Отправка письма через Outlook
Добрый день. Есть страничка html. Как создать письмо с табличкой из 1 строчки и 3 столбцов: Иванович|Иван|123456789, взятых из странички?
<table> <tbody><tr> <th>Фамилие</th> <td colspan="2" style="width: 300px;"> <span id="lastname" xmlpathvalue="">Иванович</span> </td> </tr> <tr> <th>Имя</th> <td colspan="2" style="width: 300px;"> <span id="firstname" xmlpathvalue="">Иван</span> </td> </tr> <tr> <th><span id="number">Телефон</span></th> <td> <span id="DataChangeNumber" xmlpathvalue="Number">123456789</span> </td> </tr> </tbody></table> |
<form action="mailto:адрес мыла"> ....
|
<!DOCTYPE html> <html><head></head> <body> <a href="#" onclick="myFunction()">Клик</a> <script> function myFunction() { var mailHtm ="<h1> Tekst <h1>"; var emailTo = "Komu"; var emailsubject = "Tema"; var emlCont = 'To: '+emailTo+'\n'; emlCont += 'Subject: '+emailsubject+'\n'; emlCont += 'X-Unsent: 1'+'\n'; emlCont += 'Content-Type: text/html'+'\n'; emlCont += ''+'\n'; emlCont += "<!DOCTYPE html><html><head></head><body>" + mailHtm + "</body></html>"; console.log(emlCont); var textFile = null; var data = new Blob([emlCont], {type: 'text/plain'}); if (textFile !== null) { window.URL.revokeObjectURL(textFile); } textFile = window.URL.createObjectURL(data); var a = document.createElement('a'); var linkText = document.createTextNode("fileLink"); a.appendChild(linkText); a.href = textFile; a.id = 'fileLink'; a.download = emailsubject+".eml"; a.style.visibility = "hidden"; document.body.appendChild(a); document.getElementById('fileLink').click(); } </script> </body></html>Нашел вот такой код. Проблема в том что он создает файл, который нужно открывать. Можно сделать без нажатие на открыть, а сразу создавалось окно письма? И почему то не видится русский текст. |
Вам чего надо - отправить письмо? Значит отправляйте обычную форму в полях которой помещайте все что нужно. А отправление, это отправка по протоколу mailto. Отправление будет только в том случае, если ваш интернет провайдер дает доступ к POP (есть зарегистрированный ящик). Какой почтовый клиент у вас при этом роли не играет.
А приведенный код и занимается подготовкой файла .eml, который надо открыть в почтовом клиенте чтобы отправить его. Для того же чтобы запустить почтового клиента (программу) с передачей ему этого файла как параметра у JS под веб страницей нет прав. |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
<!DOCTYPE html> <html> <table> <tbody><tr> <th>Фамилие</th> <td colspan="2" style="width: 300px;"> <span id="lastname" xmlpathvalue="">Иванович</span> </td> </tr> <tr> <th>Имя</th> <td colspan="2" style="width: 300px;"> <span id="firstname" xmlpathvalue="">Иван</span> </td> </tr> <tr> <th><span id="number">Телефон</span></th> <td> <span id="DataChangeNumber" xmlpathvalue="Number">123456789</span> </td> </tr> </tbody></table> <script> var email = 'abc@mail.com'; var a1 = document.getElementById('lastname').innerText; var a2 = document.getElementById('firstname').innerText; var a3 = document.getElementById('number').innerText; var tableObj = document.createElement('table'); tableObj.style.width = '100%'; var tableHTML = '<tr><td>' + a1 + '</td><td>' + a2 + '</td><td>' + a3 + '</td></tr>'; tableObj.innerHTML = tableHTML; document.body.appendChild(tableObj); var link = 'mailto:' + email + '?subject=Tema ' +'&body='+ document.body.appendChild(tableObj); window.location.href = link; </script> </body></html> |
По протоколу можно mailto отправить только текст, в случае отправки формы этим протоколом enctype ее должен быть text/plain. То есть, вы не можете указать ни в ссылке с протоколом mailto, ни в форме таким протоколом, что тело сообщения отправляется как text/html, чего вы пытаетесь сделать.
|
А есть другие способы создать форму письма, кроме mailto и создания файла .eml ?
|
Цитата:
Все остальное относительно почты, это ее отправление. Если у вас задача отправить почту с клиента минуя свой севере (кто и должен в общем-то этим заниматься), то используйте для этого чужой сервер предоставляемый такое API. |
В терминологии я не силен, как и в многом другом :) Нужно нажав на скрипт в браузере (в данном случае букмарклет), создается тело письма в outlook, а из странички берутся данные для этого письма. Письмо же отправлять будет сам пользователь.
|
Цитата:
У вас север есть, почему им не отправляете почту, а занимаетесь изобретением велосипеда? |
Цитата:
|
Да, ситуация. Но с другой стороны и к лучшему. Не используйте для этого веб страницу. Можно используя HTML и JS или VBS, написать приложение, вот оно уже не будет иметь ограничений, можно открывать приложения с параметрами и т.п. Для этого достаточно поместить в html страницу тег hta, описав в нем параметры приложения, и изменить расширение .html на .hta. Страница будет запускаться как приложение.
Если с офисом установлен объект CDO, то отправить письмо можно так: var mail = new ActiveXObject("CDO.Message"); mail.Subject = "Тема"; mail.From = "адрес отправителя"; mail.To = "адрес получателя"; mail.HTMLBody = "<h1>HTML письмо</h1>"; mail.Send; mail = null; |
Беда в том, что использование сторонних программ запрещено, только js код в браузере, ну и расширения в Хроме. Ваш код у меня не заработал, видимо у меня не установлен CDO, что и на рабочем компе тоже.
Думаю пока использовать вариант с созданием файла .eml. Вот только у меня проблема. Как исправить код чтоб он работал без функции click ,т.е. для букмарклета. <!DOCTYPE html> <html><head></head> <body> <a href="#" onclick="myFunction()">Клик</a> <script> function myFunction() { var mailHtm ="<h1> Tekst <h1>"; var emailTo = "Komu"; var emailsubject = "Tema"; var emlCont = 'To: '+emailTo+'\n'; emlCont += 'Subject: '+emailsubject+'\n'; emlCont += 'X-Unsent: 1'+'\n'; emlCont += 'Content-Type: text/html'+'\n'; emlCont += ''+'\n'; emlCont += "<!DOCTYPE html><html><head></head><body>" + mailHtm + "</body></html>"; console.log(emlCont); var textFile = null; var data = new Blob([emlCont], {type: 'text/plain'}); if (textFile !== null) { window.URL.revokeObjectURL(textFile); } textFile = window.URL.createObjectURL(data); var a = document.createElement('a'); var linkText = document.createTextNode("fileLink"); a.appendChild(linkText); a.href = textFile; a.id = 'fileLink'; a.download = emailsubject+".eml"; a.style.visibility = "hidden"; document.body.appendChild(a); document.getElementById('fileLink').click(); } </script> </body></html> |
Как раз и из-за рамок, что бы можно эту таблицу в Экселе использовать. А сплошной текст мне не подходит.
|
Цитата:
HTA, это также html-страница, но работающая под управлением IE как приложение. Javascript на этой странице может подключать системные библиотеки, ActiveX компоненты. А это не сторонние приложения. Код приведенный и не будет выполняться в рамках веб страницы. Вот пример hta-приложения просто открывающего Блокнот. Сохраните его с расширением .hta и запустите. <html> <head> <meta content = "text/html; charset=windows-1251"> <title>Пример treeview в hta</title> <hta:application id="my" applicationname = "my" border = "thin" innerborder = "no" contextmenu = "no" maximizebutton = "no" minimizebutton = "no" sysmenu = "yes" selection = "no" showintaskbar = "yes" scroll = "no" singleinstance="yes" windowstate = "normal" /> </head> <body> <script> var wsh = new ActiveXObject("WScript.Shell") wsh.Run("notepad", 1) </script> </body> </html> |
Sayler91,
а это почитать доки о CDO. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Что вы там делаете на своих страницах только богу известно, но HTA может общаться со всеми компьютерами локальной сети, хранить и читать файлы сервера этой сети. Если это форма готовит данные для отправки или бог знает откуда они появляются, то отправить и почту сразу. Какие-то сценарии крутые, не проблема поместить в эту страницу и jQuery. И все это в рамках html-страницы! Браузер просто "в тени", но при этом не накладывает никаких ограничений! Если это до вас не доходит, тогда майтесь в своем Хроме со своей страницей, а мне более сказать нечего. |
Спасибо вам за ваши ответы. Буду переваривать вышесказанное, для меня это в новинку, особенно НТА.
|
Есть форум посвященный этим вопросам, называется "Серый форум".
|
|
Часовой пояс GMT +3, время: 07:29. |