Я хотел бы создать письмо из веб-приложения Javascript. Я полностью осведомлен о многих вопросах SO по этому поводу (например, Открыть Outlook HTML с Chrome). Есть проблемы с типичными ответами:
-
Mailto: link: это позволит вам создать электронное письмо, но только в виде обычного текста (без HTML), и оно не позволяет вложения.
-
ActiveX: только IE, мое приложение также нужно запускать в Firefox и Chrome. FF и Chrome для включения ActiveX являются угрозами безопасности и кажутся ошибочными.
-
Серверные сообщения отправляются через SMTP: письмо не попадает в папку "Отправлено" для пользователя. Плюс препятствия, позволяющие пользователю редактировать HTML в браузере и прикреплять файлы.
-
Создайте файл Outlook.MSG. Кажется, нет библиотек и мало написано об этом. По-видимому, в файловом формате имеется встроенная система хранения файлов FAT.
Основные различия между многими другими вопросами SO и моими:
- У меня do есть доступ к клиентским машинам, поэтому я могу установить вспомогательные приложения или надстройки, изменять настройки по мере необходимости и т.д.
- Интерфейс не требует фактической отправки почты, он нужен только для его настройки для пользователя.
- Мне также нужно предоставить электронное письмо от JS (например, PDF).
Я не могу быть первым разработчиком веб-приложений, которому стоит столкнуться с этим, но пока я не могу найти решение как коммерческого, так и открытого источника.
Update:
Я использовал метод файла EML, и он работает до сих пор. Вот мой JS-код для его создания и запуска:
var emlContent = "data:message/rfc822 eml;charset=utf-8,";
emlContent += 'To: '+emailTo+'\n';
emlContent += 'Subject: '+emailSubject+'\n';
emlContent += 'X-Unsent: 1'+'\n';
emlContent += 'Content-Type: text/html'+'\n';
emlContent += ''+'\n';
emlContent += htmlDocument;
var encodedUri = encodeURI(emlContent); //encode spaces etc like a url
var a = document.createElement('a'); //make a link in document
var linkText = document.createTextNode("fileLink");
a.appendChild(linkText);
a.href = encodedUri;
a.id = 'fileLink';
a.download = 'filename.eml';
a.style = "display:none;"; //hidden link
document.body.appendChild(a);
document.getElementById('fileLink').click(); //click the link