Используйте Javascript для создания HTML-сообщения электронной почты в Microsoft Outlook



Я хотел бы создать электронное письмо из веб-приложения Javascript. Я полностью осведомлен о многих вопросах SO по этому поводу (например, Open Outlook HTML with Chrome). Есть проблемы с типичными ответами:





  1. Mailto: ссылка: это позволит вам создать письмо, но только в виде обычного текста (без HTML), и это не позволяет для вложений.



  2. Activex: только IE, мое приложение должно работать в Firefox и Chrome тоже. FF & Chrome плагины для разрешения ActiveX представляют опасность для безопасности и, кажется, глючат.



  3. Серверная часть отправляет через SMTP: письмо не попадает в папку "отправлено" для пользователя. Плюс препятствия, позволить пользователю редактировать HTML в браузере файлов.



  4. Создайте мировоззрение .MSG file: похоже, что нет библиотек и мало написано об этом. По-видимому, формат файла на самом деле имеет целую систему хранения файлов FAT.



Ключевые различия между многими другими так вопросы и мои:




  • у меня есть доступ к клиентским машинам, поэтому я могу установить
    вспомогательные приложения или надстройки, изменение настроек по мере необходимости и т. д.


  • интерфейс недолжен на самом деле отправлять почту, ему нужно только
    чтобы настроить его для пользователя.


  • мне также нужно иметь возможность передать по электронной почте вложение из JS (например, PDF).


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



Обновление:



Я использовал метод EML file, и до сих пор он работает хорошо. Вот мой код 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
709   3  

3 ответов:

Формат MSG-файладокументирован , но это, конечно, не весело... Почему бы не создать файл EML (MIME)?

Для тех, кто хочет удалить или понизить этот ответ: предложение заключается в использовании формата EML (MIME). Согласно OP, он рассматривал формат файла MSG (#4), но был обескуражен из-за сложности или отсутствия библиотек JS, которые обрабатывают этот формат. Если рассматривать MSG файл, то MIME-это гораздо лучший выбор - он основан на тексте, поэтому никаких специальных библиотек не существует. требуется для его создания. Outlook сможет открыть его так же легко, как файл MSG. Чтобы убедиться, что Outlook рассматривает его как Неотправленное сообщение, задайте для заголовка X-Unsent MIME значение 1.

UPDATE: самый простой EML-файл будет выглядеть следующим образом:

To: Joe The User <[email protected]>
Subject: Test EML message
X-Unsent: 1
Content-Type: text/html

<html>
<body>
Test message with <b>bold</b> text.
</body>
</html>

Используя идею простых текстовых eml-файлов, я придумал следующее: http://jsfiddle.net/CalvT/un3hapej/

Это редактирование того, что я нашел - чтобы создать файл .txt, а затем загрузить его. Как .eml файлы практически .txt файлы, я подумал, что это сработает. И так оно и есть. Я оставил textarea с образцом электронной почты, так что вы можете легко проверить. Когда вы нажимаете на кнопку Создать файл, он затем дает вам ссылку для загрузки, чтобы загрузить ваш файл .eml. Единственное препятствие, которое я вижу, - это создание браузер откройте файл .eml после его загрузки.

EDIT: и подумайте об этом, поскольку у вас есть доступ к клиентским машинам, вы можете настроить браузер так, чтобы он всегда открывал файлы этого типа. Например, в Chrome вы можете нажать на стрелку рядом с загрузкой и выбрать всегда открывать файлы этого типа.

Вот код

HTML:

(function () {
var textFile = null,
  makeTextFile = function (text) {
    var data = new Blob([text], {type: 'text/plain'});

    if (textFile !== null) {
      window.URL.revokeObjectURL(textFile);
    }

    textFile = window.URL.createObjectURL(data);

    return textFile;
  };


  var create = document.getElementById('create'),
    textbox = document.getElementById('textbox');

  create.addEventListener('click', function () {
    var link = document.getElementById('downloadlink');
    link.href = makeTextFile(textbox.value);
    link.style.display = 'block';
  }, false);
})();
<textarea id="textbox" style="width: 300px; height: 200px;">
To: User <[email protected]>
Subject: Subject
X-Unsent: 1
Content-Type: text/html

<html>
<body>
Test message
</body>
</html>
  
</textarea>

<button id="create">Create file</button>
  
<a download="message.eml" id="downloadlink" style="display: none">Download</a>

Похоже, никто не ответил на вопрос о привязанности, поэтому вот мое решение: создание ЖНВЛП multipart/смешанные сообщения.

Content-Type: multipart/mixed; boundary=--boundary_text_string

С этим, вы можете иметь несколько частей в вашей электронной почте. Несколько частей позволяют добавлять вложения, как это.

Content-Type: application/octet-stream; name=demo.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment

Начните с заголовков электронной почты, затем добавьте границу, а затем содержимое части (расположение новой строки очень важно, иначе клиенты не будут правильно анализировать ваш файл). Вы можете добавить несколько частей. Ниже приведен пример. Обратите внимание, что последняя граница отличается от остальных (2 тире в конце).

To: Demo-Recipient <[email protected]>
Subject: EML with attachments
X-Unsent: 1
Content-Type: multipart/mixed; boundary=--boundary_text_string

----boundary_text_string
Content-Type: text/html; charset=UTF-8

<html>
<body>
<p>Example</p>
</body>
</html>

----boundary_text_string
Content-Type: application/octet-stream; name=demo.txt
Content-Transfer-Encoding: base64
Content-Disposition: attachment
ZXhhbXBsZQ==

----boundary_text_string
Content-Type: application/octet-stream; name=demo.log
Content-Transfer-Encoding: base64
Content-Disposition: attachment
ZXhhbXBsZQ==

----boundary_text_string--

Это дает вам eml-файл с двумя вложениями. Смотрите RFC 1371, Если вы хотите узнать больше о том, как это работает.

Comments

    Ничего не найдено.