Основной текст Mailto не заполняет IE

Я использую mailto, чтобы клиенты могли отправлять информацию о котировках продуктов. Я пытаюсь автоматически заполнить цитату в теле письма, создав ссылку mailto в виде строки и объединив информацию о цитате в соответствии со следующим кодом:

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>';

Однако при использовании IE при нажатии на ссылку электронное письмо создается, но появляется только текст, который явно добавлен — ничего, хранящееся в переменной quoteinfo, не отображается. Я убедился, что последняя ссылка действительно содержит всю информацию о котировках, просто ее нет в электронном письме. Поскольку электронное письмо успешно генерируется с частью его текста, я не думаю, что это проблема переполнения символов (и в любом случае это происходит даже с 30 символами в переменной quoteinfo.

Возможно, это проблема конкретного почтового клиента?

Последнее замечание: я хорошо знаю, что существует популярное движение к замене mailto формами — по другим причинам я не могу сделать это здесь, поэтому, пожалуйста, воздержитесь от ответа, посоветовав переключиться на форму.

Конкретный пример того, как будут выглядеть мои ссылки, выглядит следующим образом:

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

person CodeRedd    schedule 21.06.2011    source источник
comment
Ссылка сделана корректно?   -  person Oded    schedule 21.06.2011
comment
разве это не должно быть href=mailto:... а не href=email:..   -  person Raoul    schedule 21.06.2011
comment
правильно - я случайно удалил это, чтобы сохранить реальный адрес электронной почты в тайне. теперь это исправлено.   -  person CodeRedd    schedule 21.06.2011


Ответы (3)


Символ решетки (#) имеет особое значение в URL-адресах (помните имена привязок? Например, http://example.com#TopOfPage). Замените его на %23.

См. Справочник по кодированию URL-адресов W3.

Более того, JavaScript может сделать это за вас с помощью функции 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>

person Gary    schedule 21.06.2011
comment
Спасибо за разъяснения! - person CodeRedd; 21.06.2011
comment
Для замены знака # %23 у меня сработало. функция encodeURI() этого не сделала. - person ClearCloud8; 07.05.2015
comment
@ClearCloud8 Упс, не заметил, что в коде OP уже были закодированы разрывы строк, поэтому encodeURI просто перекодировал их. Я добавил работающую версию, которая устанавливает ссылку mailto вместо того, чтобы просто помещать ее в переменную, как это было в старом примере. Я также изменил его, чтобы кодировать все три поля, а не только тело (именно здесь была проблема с OP). Что именно не сработало для вас? - person Gary; 07.05.2015
comment
Как только я заменил encodeURI на encodeURIComponent, это сработало для меня в IE11. - person Michael; 21.01.2019

Где-то в этом направлении вы делаете ложный вывод. Начните с устранения динамической генерации ссылок и протестируйте использование статического фрагмента HTML. Если и это не работает, опубликуйте точную ссылку, которая не работает. Возможно, в вашей цитате есть недопустимые символы, о которых вы не знаете. Возможно, оно начинается с апострофа?

Из вашего кода выше ссылка будет выглядеть примерно так:

<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>

Это отлично работает (проверено IE9, Outlook2007).

person Paul-Jan    schedule 21.06.2011
comment
Пробовал удалить динамическую ссылку, но это не сработало. Я изменил пример, чтобы отразить специфику моих сгенерированных ссылок. Как видите, единственными специальными символами, которые используются, являются знаки фунта для номеров продуктов и знаки доллара для цен. - person CodeRedd; 21.06.2011

В дополнение к URL-адресу, кодирующему хэш (#) как Fantabulum упоминает, я бы проверил, какой клиент они используют. Если это Outlook (как следует из вашего выбора тега), они могут захотеть запустить «Обнаружение и восстановление» (обычно находится в меню «Справка»).

Запуск «Обнаружение и восстановление» устранил ряд проблем с аналогичными ссылками в нашей внутренней сети. Обычно проблема возникает из-за поврежденного файла/настройки или какой-либо другой программы, взломанной Outlook, например. обновление Windows, возвращающее раздел реестра, который изменил Outlook.

person AnonJr    schedule 21.06.2011