Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отправка письма через Outlook (https://javascript.ru/forum/misc/70119-otpravka-pisma-cherez-outlook.html)

Sayler91 12.08.2017 13:49

Отправка письма через Outlook
 
Добрый день. Есть страничка html. Как создать письмо с табличкой из 1 строчки и 3 столбцов: Иванович|Иван|123456789, взятых из странички?

<table>
<tbody><tr>
                        <th>Фамилие</th>
                        <td colspan="2" style="width: 300px;">
                            <span id="lastname" xmlpathvalue="">Иванович</span>
                            &nbsp;</td>
                    </tr>
                    <tr>
                        <th>Имя</th>
                        <td colspan="2" style="width: 300px;">
                            <span id="firstname" xmlpathvalue="">Иван</span>
                            &nbsp;</td>
                    </tr>
                    <tr>
                        <th><span id="number">Телефон</span></th>
                        <td>
                            <span id="DataChangeNumber" xmlpathvalue="Number">123456789</span>
                        </td>
                    </tr>
 </tbody></table>

laimas 12.08.2017 16:29

<form action="mailto:адрес мыла"> ....

Sayler91 12.08.2017 16:52

<!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>
Нашел вот такой код. Проблема в том что он создает файл, который нужно открывать. Можно сделать без нажатие на открыть, а сразу создавалось окно письма? И почему то не видится русский текст.

laimas 12.08.2017 17:08

Вам чего надо - отправить письмо? Значит отправляйте обычную форму в полях которой помещайте все что нужно. А отправление, это отправка по протоколу mailto. Отправление будет только в том случае, если ваш интернет провайдер дает доступ к POP (есть зарегистрированный ящик). Какой почтовый клиент у вас при этом роли не играет.

А приведенный код и занимается подготовкой файла .eml, который надо открыть в почтовом клиенте чтобы отправить его. Для того же чтобы запустить почтового клиента (программу) с передачей ему этого файла как параметра у JS под веб страницей нет прав.

Sayler91 12.08.2017 17:38

Цитата:

Сообщение от laimas (Сообщение 461490)
Вам чего надо - отправить письмо? Значит отправляйте обычную форму в полях которой помещайте все что нужно. А отправление, это отправка по протоколу mailto. Отправление будет только в том случае, если ваш интернет провайдер дает доступ к POP (есть зарегистрированный ящик). Какой почтовый клиент у вас при этом роли не играет.

Нажав на скрипт должно создаваться письмо с текстом с данных странички. Отправлять же будет сам пользователь. Вариант с моим кодом выше мне не подходит. Помогите создать код создающий форму письма.

laimas 12.08.2017 18:02

Цитата:

Сообщение от Sayler91
И почему то не видится русский текст.

Потому, что не указывается кодировка, укажите. Следует также учесть, что кодировка задается для тела письма и не влияет на его тему (emailsubject), которую кодируют.

Цитата:

Сообщение от Sayler91
сразу создавалось окно письма?

Что такое "окно письма"?

Sayler91 13.08.2017 16:55

Цитата:

Сообщение от laimas (Сообщение 461484)
<form action="mailto:адрес мыла"> ....

Спасибо за подсказку. Написал такой скрипт, но не могу построить таблицу с рамками, формат не воспринимается. Подскажите пожалуйста.

<!DOCTYPE html>
<html>
<table>
<tbody><tr>
                        <th>Фамилие</th>
                        <td colspan="2" style="width: 300px;">
                            <span id="lastname" xmlpathvalue="">Иванович</span>
                            &nbsp;</td>
                    </tr>
                    <tr>
                        <th>Имя</th>
                        <td colspan="2" style="width: 300px;">
                            <span id="firstname" xmlpathvalue="">Иван</span>
                            &nbsp;</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>

laimas 13.08.2017 17:44

По протоколу можно mailto отправить только текст, в случае отправки формы этим протоколом enctype ее должен быть text/plain. То есть, вы не можете указать ни в ссылке с протоколом mailto, ни в форме таким протоколом, что тело сообщения отправляется как text/html, чего вы пытаетесь сделать.

Sayler91 13.08.2017 18:06

А есть другие способы создать форму письма, кроме mailto и создания файла .eml ?

laimas 13.08.2017 18:22

Цитата:

Сообщение от Sayler91
А есть другие способы создать форму письма

Что значит "форма письма"? Мне не известно такое понятие, есть тело почтового сообщения, в том же Outlook можете посмотреть что это такое.

Все остальное относительно почты, это ее отправление. Если у вас задача отправить почту с клиента минуя свой севере (кто и должен в общем-то этим заниматься), то используйте для этого чужой сервер предоставляемый такое API.

Sayler91 13.08.2017 18:29

В терминологии я не силен, как и в многом другом :) Нужно нажав на скрипт в браузере (в данном случае букмарклет), создается тело письма в outlook, а из странички берутся данные для этого письма. Письмо же отправлять будет сам пользователь.

laimas 13.08.2017 18:39

Цитата:

Сообщение от Sayler91
создается тело письма в outlook

И что дальше? Outlook, это .eml, имеющий определенный формат. Ну создали вы его, что дальше? Вы же не хотите сохранять в файл, чтобы пользователь его потом открывал в Outlook. Во-первых у пользователя должен быть установлен этот почтовый клиент (да и вообще какой либо) и доступна почта, во-вторых вы должны разъяснить пользователю как указать в браузере открывать такие файлы. Файл созданный при этом нужно предлагать скачать. При соблюдении этих условий будет работать.

У вас север есть, почему им не отправляете почту, а занимаетесь изобретением велосипеда?

Sayler91 13.08.2017 18:47

Цитата:

Сообщение от laimas (Сообщение 461543)
И что дальше? Outlook, это .eml, имеющий определенный формат. Ну создали вы его, что дальше? Вы же не хотите сохранять в файл, чтобы пользователь его потом открывал в Outlook. Во-первых у пользователя должен быть установлен этот почтовый клиент (да и вообще какой либо) и доступна почта, во-вторых вы должны разъяснить пользователю как указать в браузере открывать такие файлы. Файл созданный при этом нужно предлагать скачать. При соблюдении этих условий будет работать.

У вас север есть, почему им не отправляете почту, а занимаетесь изобретением велосипеда?

Все это я делаю для своей работы, которая не связана с программированием.JS я использую для работы с данными. Доступ к внешнему интернету отсутствует, только локальная связь. И у каждого пользователя установлен только Outlook. И да, я не хочу чтоб создавался файл .eml. по этому ищу другой способ.

laimas 13.08.2017 19:15

Да, ситуация. Но с другой стороны и к лучшему. Не используйте для этого веб страницу. Можно используя 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;

Sayler91 13.08.2017 20:01

Беда в том, что использование сторонних программ запрещено, только 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>

Sayler91 13.08.2017 20:22

Как раз и из-за рамок, что бы можно эту таблицу в Экселе использовать. А сплошной текст мне не подходит.

laimas 13.08.2017 20:30

Цитата:

Сообщение от Sayler91
Беда в том, что использование сторонних программ запрещено

Где вы увидели в коде приведенном сторонние программы?! Я же русским языком написал - веб страница из под браузера беспомощна, на нее накладываются ограничения. Javasript из под такой страницы практически бесправен.

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>

laimas 13.08.2017 20:32

Sayler91,
а это почитать доки о CDO.

Sayler91 13.08.2017 20:38

Цитата:

Сообщение от laimas (Сообщение 461552)
HTA, это также html-страница, но работающая под управлением IE как приложение. Javascript на этой странице может подключать системные библиотеки, ActiveX компоненты. А это не сторонние приложения.

Код приведенный и не будет выполняться в рамках веб страницы.

Т.е. допустим я буду запускать файл .hta на рабочем столе, а как брать данные со странички с браузера?

Цитата:

Сообщение от Rise (Сообщение 461553)
Sayler91,
А CSV-формат разве нельзя в экселе использовать?

В теории можно, но мне именно таблица нужна :) А вы сможете подсказать как переделать код для использования без функции onclick, чтоб он сразу работал в посте№3 ?

laimas 13.08.2017 20:50

Цитата:

Сообщение от Sayler91
Т.е. допустим я буду запускать файл .hta на рабочем столе, а как брать данные со странички с браузера?

Причем тут браузер если вы же сами сказали что в офлайн все происходит, доступа к сети нет?

Sayler91 13.08.2017 20:57

Цитата:

Сообщение от laimas (Сообщение 461557)
Причем тут браузер если вы же сами сказали что в офлайн все происходит, доступа к сети нет?

У нас нет внешнего интернета, но есть локальная сеть. Работа с данными в браузере. Возможно сохранять html странички и изменять их и менять расширение на hta нет возможности.

Цитата:

Сообщение от Rise (Сообщение 461558)
Sayler91,
не понятно что вам надо, то в экселе использовать, то уже таблица ради таблицы, я пас.

Вроде я описал, что мне нужно. Брать текстовые данные со странички и формировать нужные мне таблицы, что бы отправить их по почте.

laimas 13.08.2017 21:11

Цитата:

Сообщение от Sayler91
У нас нет внешнего интернета, но есть локальная сеть. Работа с данными в браузере. Возможно сохранять html странички и изменять их и менять расширение на hta нет возможности.

Еще рас повторить или ... HTA, это и есть html страница, она может содержать в себе все что угодно, точно также как и страница в браузере. И на html странице в HTA вы можете точно также работать с ней (на ней) как и в браузере. Какие проблемы? А уж по части сохранить, так браузер с веб страницей тут даже и в подметки не годится, так как в HTA javascript через систему может работать так же с файловой системой, как и Проводник.

Что вы там делаете на своих страницах только богу известно, но HTA может общаться со всеми компьютерами локальной сети, хранить и читать файлы сервера этой сети. Если это форма готовит данные для отправки или бог знает откуда они появляются, то отправить и почту сразу. Какие-то сценарии крутые, не проблема поместить в эту страницу и jQuery.

И все это в рамках html-страницы! Браузер просто "в тени", но при этом не накладывает никаких ограничений!

Если это до вас не доходит, тогда майтесь в своем Хроме со своей страницей, а мне более сказать нечего.

Sayler91 13.08.2017 21:35

Спасибо вам за ваши ответы. Буду переваривать вышесказанное, для меня это в новинку, особенно НТА.

laimas 14.08.2017 09:34

Есть форум посвященный этим вопросам, называется "Серый форум".

jamesj 21.08.2017 11:28

Спасибо за быстрый ответ!
_______________
JSON Formatter & validator tool
192.168.0.1


Часовой пояс GMT +3, время: 07:29.