2011-06-21 7 views
5

Używam mailto, aby umożliwić przesyłanie informacji o ofertach produktów przez klientów. Jestem próby automatycznego zapełniania cytat do treści wiadomości poprzez budowę mailto link jako ciąg znaków, a łącząc się z informacjami środki, za pomocą następującego kodu:Treść w tekście Mailto nie jest wypełniona IE

var quoteinfo = 'quote information here'; 
var link = '<a href="mailto:email?subject=subject&body=Please enter your contact information 
and message here: %0A%0A%0AQuote:%0A' + quoteinfo + '">email</a>'; 

jednak, gdy za pomocą IE, po kliknięciu łącza , wiadomość e-mail jest generowana, ale pojawia się tylko tekst jawnie dodawany - nic nie jest przechowywane w zmiennej quoteinfo. Zweryfikowałem, że ostateczny link zawiera wszystkie informacje o ofercie - po prostu nie pojawia się w wiadomości e-mail. Ponieważ wiadomość e-mail z powodzeniem generuje część tekstu, nie uważam, że jest to problem z przepełnieniem znaków (w każdym razie zdarza się to nawet w przypadku 30 znaków w zmiennej quoteinfo:

Być może jest to problem specyficzny dla klienta pocztowego?

Ostatnia uwaga: zdaję sobie sprawę, że istnieje popularny ruch w kierunku zastąpienia mailto formularzami - z innych powodów nie mogę tego zrobić tutaj, więc proszę powstrzymać się od udzielenia odpowiedzi doradzając Przejdź do formularza:

Specyficzny przykład, w jaki sposób pojawiają się moje linki:

mailto:[email protected]?subject=Submission From Quote Creator &body=Please enter 
your contact information and message here: %0A%0A%0AQuote:%0A#17350 - IFW 2-inch - 
$829.00%0A 
+0

Czy link został wygenerowany poprawnie? – Oded

+2

nie powinno to być href = "mailto: ...", a nie href = "email: .." – Raoul

+1

poprawne - przypadkowo usunąłem ten fakt, aby zachować rzeczywisty adres e-mail jako prywatny. to jest teraz naprawione. – CodeRedd

Odpowiedz

7

Symbol krzyżyka (#) ma specjalne znaczenie w adresach URL (pamiętaj o nazwach kotwicy np. http://example.com#TopOfPage). Wymień go na %23.

Zobacz W3's URL Encoding Reference

Jeszcze lepiej, JavaScript może zrobić dla Ciebie z funkcją encodeURI().

window.onload = function() { 
 
    var eTo = encodeURI("[email protected]"); 
 
    var eSubj = encodeURI("Submission From Quote Creator"); 
 
    var eBody = encodeURI("Please enter your contact information and message here: \n\n\nQuote:\n#17350 IFW 2-inch -$829.00\n"); 
 

 
    var email = "mailto:" + eTo + "?subject=" + eSubj + "&body=" + eBody; 
 

 
    document.getElementById("sales").href = email; 
 
}
<a href="" id="sales">email</a>

+0

Dzięki za wyjaśnienie! – CodeRedd

+0

Aby zastąpić # znak% 23 pracował dla mnie. Funkcja encodeURI() nie działa. – ClearCloud8

+0

@ ClearCloud8 Woops, nie zauważyłem, że kod OP ma już zakodowane podziały wierszy, więc 'encodeURI' właśnie je ponownie zakodował. Wprowadziłem działającą wersję, która ustawiła link mailto zamiast umieszczania go w zmiennej takiej, jak zrobił to stary przykład. Zmieniłem także kodowanie wszystkich trzech pól, zamiast tylko ciała (w którym był problem z OP). Co dokładnie Ci nie pasowało? – Gary

2

Gdzieś wzdłuż tych linii wyciągasz fałszywe wnioski. Zacznij od wyeliminowania generowania dynamicznego linku i przetestuj za pomocą statycznego fragmentu HTML. Jeśli to też nie działa, połóż link dokładny, który nie działa. Być może w twoim cudzysłowie masz nieprawidłowe znaki, których nie jesteś świadomy. Czy może zaczyna się od apostrofu?

z kodu powyżej, link będzie wyglądał tak:

<html> 
    <body> 

    <a href="mailto:[email protected]?subject=subject&body=Please enter your contact information and message here: %0A%0A%0AQuote:%0ARaaaawr">email</a> 

    </body> 
</html> 

To działa perfekcyjnie (testowane IE9, Outlook2007).

+1

Próbowano usunąć link dynamiczny, ale to nie zadziałało.Zmieniłem ten przykład, aby odzwierciedlić specyfikę generowanych linków. Jak widać, jedynymi znakami specjalnymi, które są używane, są znaki funta na numery produktów i znaki dolara na ceny. – CodeRedd

+0

Dzięki za pomoc! – CodeRedd

0

Ponadto do URL kodującego hash (#) jako Fantabulum mentions, chciałbym sprawdzić, które są przy użyciu klienta. Jeśli jest to Outlook (jak można wywnioskować z wyboru tagu), mogą chcieć uruchomić "Wykryj i napraw" (zazwyczaj znajduje się w menu Pomoc).

Podczas pracy "Wykryj i napraw" rozwiązano szereg problemów z podobnymi linkami w naszym intranecie. Zwykle problem jest spowodowany przez uszkodzony plik/ustawienie lub inny program do przeciążania programem Outlook - np. aktualizacja systemu Windows przywracająca klucz rejestru, który zmienił Outlook.