javascript - 使用 Javascript 在 Microsoft Outlook 中创建 HTML 电子邮件

标签 javascript web-applications outlook

我想从 Javascript 网络应用程序创建电子邮件。我完全知道关于这个的许多 SO 问题(例如 Open Outlook HTML with Chrome )。典型答案有问题:

  1. Mailto: 链接:这将允许您创建电子邮件,但只能是纯文本(无 HTML)并且不允许附件。

  2. Activex:仅限 IE,我的应用程序也需要在 Firefox 和 Chrome 中运行。允许 ActiveX 的 FF 和 Chrome 插件是安全隐患,而且似乎有问题。

  3. 服务器端通过 SMTP 发送:电子邮件最终不会出现在用户的“已发送”文件夹中。加上允许用户在浏览器中编辑 HTML 和附加文件的障碍。

  4. 创建一个 Outlook .MSG 文件:似乎没有库,也没有关于如何做的文章。显然,该文件格式实际上嵌入了整个 FAT 文件存储系统。

许多其他 SO 问题和我的问题之间的主要区别:

  • 确实可以访问客户端机器,所以我可以安装 帮助应用程序或加载项,根据需要更改设置等。
  • 接口(interface)不需要实际发送邮件,它只需要 为用户进行设置。
  • 我还需要能够为电子邮件提供 JS 附件(例如 PDF)。

我不是第一个遇到这个问题的网络应用程序开发人员,但我无法找到商业或开源解决方案。

更新:

我使用了 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

最佳答案

MSG 文件格式为 documented ,但这肯定不好玩...... 为什么不创建 EML (MIME) 文件?

建议使用 EML (MIME) 格式。根据 OP,他们考虑了 MSG 文件格式(#4),但由于其复杂性和缺乏处理该格式的 JS 库而感到沮丧。如果考虑 MSG 文件,MIME 是更好的选择 - 它是基于文本的,因此不需要特殊的库来创建它。 Outlook 将能够像打开 MSG 文件一样轻松地打开它。

要确保 EML 邮件被 Outlook 视为未发送的邮件,请将 X-Unsent MIME header 设置为 1。


最简单的 EML 文件如下所示:

To: Joe The User <joe@domain.demo>
Subject: Test EML message
X-Unsent: 1
Content-Type: text/html

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

关于javascript - 使用 Javascript 在 Microsoft Outlook 中创建 HTML 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951843/

相关文章:

javascript - 在 three.js 中调整 dat.gui 的大小

javascript - 从 0 和 1 的数组恢复复选框的状态

Java应用范围

html - Outlook 2007/2010 在表格单元格内添加空间

c# - 如何在 PowerShell 中创建一个 Outlook 规则,将电子邮件无错误地移动到文件夹,使用在 C# 中完美运行的相同代码?

vba - 列出附件的文件名

javascript - 为什么不在浏览器上获得 JQuery 效果?

javascript - 如何将这些 div 放置在 td 中?

database - 如何使用 Yii Web 应用程序从数据库中添加或删除表?

google-chrome - 如何防止用户放大桌面网络应用程序?