我想从Javascript Web应用程序中创建电子邮件。我完全知道有关此问题的许多SO问题(例如在Chrome中使用HTML打开Outlook)。传统答案存在以下问题:
Mailto:链接:这将使您创建电子邮件,但仅限于纯文本(无HTML),并且不允许附件。
Activex:仅限于IE,我的应用程序还需要在Firefox和Chrome中运行。安装FF&Chrome插件以允许ActiveX存在安全隐患,而且似乎也很容易出现错误。
通过SMTP发送服务器端:用户的电子邮件不会出现在“已发送”文件夹中。还有一些障碍,如让用户在浏览器中编辑HTML并附加文件。
创建Outlook .MSG文件:似乎没有任何库,并且对此进行了很少的编写。显然,该文件格式实际上嵌入了整个FAT文件存储系统。
许多其他SO问题和我的关键区别:
- 我可以访问客户机器,因此我可以安装辅助应用程序或插件,根据需要更改设置等。
- 该界面不需要实际发送邮件,它只需要为用户设置邮件。
- 我还需要能够从JS中提供电子邮件附件(例如PDF)。
我不可能是第一个遇到这个问题的Web应用程序开发人员,但我无法找到任何解决方案,无论是商业还是开源。
更新:
我使用了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