2015-01-14 2 views
7

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

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

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

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

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

Основные отличия между многими другими SO вопросы и шахты:

  • Я сделать имеют доступ к клиентским машинам, так что я мог установить вспомогательные приложения или надстроек, изменение параметров при необходимости и т. д.
  • Интерфейс не необходимо отправить по электронной почте, ему нужно только , чтобы настроить его для пользователя.
  • Мне также нужно указать электронное письмо от 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 
+0

Ваш вопрос несколько неоднозначна. Ваше название и теги указывают, что вы хотите использовать JavaScript, но ваши «ключевые различия» указывают, что вы можете использовать вспомогательные приложения и надстройки, которые не являются (обязательно) JavaScript. Похоже, вы хотите, чтобы мы немного искали вас, чтобы найти решение, которое, как правило, плохо подходит для SO. –

+0

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

+0

Мне нравится подход, он придерживается правил песочницы браузера (пользователю не нужно открывать загружаемый EML-файл), пока он появляется, чтобы дать именно то, что нужно. Я обязательно найду использование этой техники! – Falkayn

ответ

10

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

Тем, кто хочет удалить или отклонить этот ответ: рекомендуется использовать формат EML (MIME). Согласно OP, он считал формат файла MSG (№ 4), но был обескуражен из-за сложности или отсутствия JS-библиотек, которые обрабатывают этот формат. Если бы рассматривался MSG-файл, MIME намного лучший выбор - он основан на тексте, поэтому для его создания не требуются специальные библиотеки. Outlook сможет открыть его так же легко, как файл MSG. Чтобы убедиться, что Outlook рассматривается как неотправленное сообщение, установите для заголовка MIME X-Unsent значение 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> 
+1

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – NicolasMoise

+0

Без обид Николя, ты действительно звучит как родной английский оратор, и я уверен, что ты понимаешь, что мое предложение - использовать формат файла MIME. Я уверен, что вы можете видеть, что «Почему бы не создать файл EML (MIME)?» это вежливый способ сказать: «Вам действительно нужно использовать формат EML (MIME)». –

+0

Вы пробовали этот подход и сделали это? Какие ресурсы вы использовали для изучения формата? –

5

Используя идею EML файлов в виде обычного текста, я пришел с этим: http://jsfiddle.net/CalvT/un3hapej/

Это редактировать что-то я found - создать файл .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>

+0

Я планирую развивать это, поскольку он меня интересует –

+0

Вы обнаружили, как добавлять вложения через файл eml? – yurin

+0

Возможно ли открыть файл eml в Outlook напрямую, не загружая его в браузере? – Santhosh

Смежные вопросы