href mailto с русским заголовком

Опубликовано 2014.10.24

Если в ссылке в атрибуте href прописать mailto:e-mail - то при клике на такую ссылку у пользователя откроется почтовый клиент и создастся письмо, адресованное адресу, указанному после mailto: Так же в ссылке можно передавать заголовок письма и его содержимое. Для этого нужны переменные subject и body. Таким образом ссылка будет выглядеть вот так:
  1. <a href="mailto:example@server.dom?subject=My email&body=My text of this e-mail">написать письмо</a>
Такой код будет корректно отрабатываться во всех браузерах. Если нажать на такую ссылку - то откроется почтовый клиент Как видите, заголовок и содержимое успешно подтянулись. Но если заголовок или боди написать по-русски - то такая ссылка работать не будет. В интернете нет полностью рабочего решения, лишь демагогия о кодировке UTF-8. Мы о ней даже говорить не будем. Русский заголовок будет работать только в FireFox. А во всех остальных браузерах мы получим следующее. И кодировка страницы тут не при чём. Никакой UTF-8 без BOM не поможет. Допустим вам нужна следующая ссылка
  1. <a href="mailto:example@server.dom?subject=Заголовок&body=Текст моего письма">написать письмо</a>
Решается эта трабла следующим образом. Я сразу приведу весь код.
  1. <a id="lnk" href="mailto:example@server.dom?subject=Заголовок&amp;body=Текст моего письма">написать письмо</a>
  2.  
  3. <script type="text/javascript">
  4. link = 'mailto:example@server.dom?subject='+encode('Заголовок')+'&body='+encode('Текст моего письма');
  5. ua = navigator.userAgent;
  6. if((ua.indexOf('MSIE') > 0) || (ua.indexOf('AppleWebKit') > 0)) {
  7. $('a#lnk').attr('href', link);
  8. $('a#lnk').text('написать письмо');// For IE...
  9. }
  10. function encode(sValue) {
  11. var text = "", Ucode, ExitValue, s;
  12. for (var i = 0; i < sValue.length; i++) {
  13. s = sValue.charAt(i);
  14. Ucode = s.charCodeAt(0);
  15. var Acode = Ucode;
  16. if (Ucode > 1039 && Ucode < 1104) {
  17. Acode -= 848;
  18. ExitValue = "%" + Acode.toString(16);
  19. }
  20. else if (Ucode == 1025) {
  21. Acode = 168;
  22. ExitValue = "%" + Acode.toString(16);
  23. }
  24. else if (Ucode == 1105) {
  25. Acode = 184;
  26. ExitValue = "%" + Acode.toString(16);
  27. }
  28. else if (Ucode == 32) {
  29. Acode = 32;
  30. ExitValue = "%" + Acode.toString(16);
  31. }
  32. else if (Ucode == 10){
  33. Acode = 10;
  34. ExitValue = "%0A";
  35. }
  36. else {
  37. ExitValue = s;
  38. }
  39. text = text + ExitValue;
  40. }
  41. return text;
  42. }
  43. </script>
  44. </></></script>
В href атрибут ссылки уже прописан стандартный mailto, и он сработает если у пользователя не включен JavaScript в браузере. Если включен - то JavaScript сформирует ссылку в "правильной" кодировке. И если браузер InternetExplorer или на движке AppleWebKit(под него у меня попали Google Chrome, Opera и Safari) - заменит атрибут href нашей ссылки. Специально для ишака надо перезаписать и анкор ссылки... Обратите внимание на id ссылки. У вас он может быть другим, но тогда не забудьте исправить и js код. Или вообще используйте другой селектор. Так же должна быть подключена библиотека jQuery. Если вы всё сделали верно: