使用Javascript在Microsoft Outlook中创建HTML电子邮件
我想从Javascript web应用程序创建一封电子邮件。我完全知道在这方面有这么多问题(例如)。典型答案存在以下问题:使用Javascript在Microsoft Outlook中创建HTML电子邮件,javascript,web-applications,outlook,Javascript,Web Applications,Outlook,我想从Javascript web应用程序创建一封电子邮件。我完全知道在这方面有这么多问题(例如)。典型答案存在以下问题: Mailto:link:这将允许您创建一封电子邮件,但只能使用纯文本(无HTML),并且不允许使用附件 Activex:仅IE,我的应用程序也需要在Firefox和Chrome中运行。允许ActiveX的FF和Chrome插件存在安全隐患,似乎有缺陷 服务器端通过SMTP发送:电子邮件不会在用户的“已发送”文件夹中结束。此外,还存在允许用户在浏览器中编辑HTML和附加文件的
- 我没有访问客户端计算机的权限,因此我可以安装 助手应用程序或外接程序,根据需要更改设置等
- 接口不需要实际发送邮件,它只需要 为用户设置它
- 我还需要能够给电子邮件从JS的附件(如PDF)
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文件格式是,但它肯定不是有趣的。。。
为什么不创建一个EML(MIME)文件
对于那些想要删除或否决此答案的人来说:建议使用EML(MIME)格式。根据OP的说法,他考虑了MSG文件格式(#4),但由于复杂性或缺少处理该格式的JS库,因此不鼓励使用该格式。如果考虑MSG文件,MIME是一个更好的选择-它是基于文本的,所以不需要特殊的库来创建它。Outlook将能够像打开MSG文件一样轻松地打开它。要确保Outlook将其视为未发送邮件,请将X-unsent
MIME标头设置为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>
To:Joe用户
主题:测试EML消息
X-Unsent:1
内容类型:text/html
用粗体文本测试消息。
利用纯文本eml文件的思想,我提出了以下建议:
这是我找到的东西的编辑-创建一个.txt
文件,然后下载它。由于.eml
文件实际上是.txt文件,所以我认为这会起作用。确实如此。我将textarea
与示例电子邮件一起放在这里,以便您可以轻松地进行测试。当你点击创建文件时,它会给你一个下载链接来下载你的.eml
文件。我能看到的唯一障碍是在下载后让浏览器打开.eml
文件
编辑:考虑一下,当您可以访问客户端计算机时,您可以将浏览器设置为始终打开该类型的文件。例如,在Chrome中,您可以单击“下载”旁边的箭头,然后选择“始终打开此类型的文件”
这是密码
HTML:
(函数(){
var textFile=null,
makeTextFile=函数(文本){
var data=newblob([text],{type:'text/plain'});
if(textFile!==null){
window.URL.revokeObjectURL(文本文件);
}
textFile=window.URL.createObjectURL(数据);
返回文本文件;
};
var create=document.getElementById('create'),
textbox=document.getElementById('textbox');
create.addEventListener('click',函数(){
var link=document.getElementById('downloadlink');
link.href=makeTextFile(textbox.value);
link.style.display='block';
},假);
})();代码>
收件人:用户
主题:主题
X-Unsent:1
内容类型:text/html
测试消息
创建文件
下载
似乎没有人回答附件问题,因此我的解决方案如下:
将EML创建为多部分/混合消息
Content-Type: multipart/mixed; boundary=--boundary_text_string
有了这个,你可以在你的电子邮件中有多个部分。
使用多个部件可以添加附件,如下所示
Content-Type: application/octet-stream; name=demo.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment
从电子邮件标题开始,然后添加边界,然后添加部分内容(换行符位置非常重要,否则客户端将无法正确解析文件)。可以添加多个零件。下面是一个例子。请注意,最后一个边界与其他边界不同(末尾有两条破折号)
收件人:演示收件人
主题:带附件的EML
X-Unsent:1
内容类型:多部分/混合;边界=--边界\文本\字符串
----边界\文本\字符串
内容类型:text/html;字符集=UTF-8
范例
----边界\文本\字符串
内容类型:应用程序/八位字节流;name=demo.txt
内容传输编码:base64
内容配置:附件
ZxHbXBszq==
----边界\文本\字符串
内容类型:应用程序/八位字节流;name=demo.log
内容传输编码:base64
内容配置:附件
ZxHbXBszq==
----边界\文本\字符串--
这将为您提供一个包含两个附件的eml文件。
查看您是否想了解有关如何工作的更多详细信息。我在创建带有非英语字符的.eml文件并在Outlook中打开该文件时遇到了编码问题。
问题是我把“charset=”放错了位置,没有在编码周围加引号(“)。
解决方案:
function createShiftReportEmail() {
const title = "Shift Összefoglaló";
const body = "ÁÉŐÚŰÓÜÖÍűáéúőóöí";
const emlContent = new Blob([`data:message/rfc822 eml,\nSubject: ${title}\nX-Unsent: 1\nContent-Type: text/plain;charset="utf-8"\n\n${body}`]);
if (!document.querySelector('#downloadEmail')) {
document.body.insertAdjacentHTML('beforeend', '<a id="downloadEmail" download="ShiftReport.eml" style="display: none">Download</a>');
}
const downloadBtn = document.querySelector('#downloadEmail');
downloadBtn.href = URL.createObjectURL(emlContent);
downloadBtn.click();
}
函数createShiftReportEmail(){
const title=“ShiftÖsszefoglaó”;
const body=“ÁŐÚŰÜÍűúőóí”;
const emlContent=new Blob([`data:message/rfc822 eml,\n对象:${title}\nX Unsent:1\n内容类型:text/plain;charset=“utf-8”\n\n${body}`];
如果(!document.querySelector('#downloadmail')){
document.body.insertAdjacentHTML('beforeend','Download');
}
const downloadBtn=document.querySelector('#downloadEma
function createShiftReportEmail() {
const title = "Shift Összefoglaló";
const body = "ÁÉŐÚŰÓÜÖÍűáéúőóöí";
const emlContent = new Blob([`data:message/rfc822 eml,\nSubject: ${title}\nX-Unsent: 1\nContent-Type: text/plain;charset="utf-8"\n\n${body}`]);
if (!document.querySelector('#downloadEmail')) {
document.body.insertAdjacentHTML('beforeend', '<a id="downloadEmail" download="ShiftReport.eml" style="display: none">Download</a>');
}
const downloadBtn = document.querySelector('#downloadEmail');
downloadBtn.href = URL.createObjectURL(emlContent);
downloadBtn.click();
}