Jam*_*ell 14 javascript outlook web-applications
我想从Javascript Web应用程序创建一封电子邮件.我完全了解这方面的许多问题(例如,使用Chrome打开Outlook HTML).典型答案存在问题:
Mailto:link:这将允许您创建一个电子邮件,但只能使用纯文本(无HTML),并且不允许附件.
Activex:仅限IE,我的应用程序也需要在Firefox和Chrome中运行.允许使用ActiveX的FF和Chrome插件存在安全隐患,而且似乎有问题.
服务器端通过SMTP发送:电子邮件不会最终出现在用户的"已发送"文件夹中.加上障碍让用户在浏览器中编辑HTML并附加文件.
创建一个Outlook .MSG文件:似乎没有库,也没有关于这样做的书面文章.显然,文件格式实际上嵌入了整个FAT文件存储系统.
许多其他SO问题和我之间的主要区别:
我无法成为第一个面对此问题的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
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nko 16
MSG文件格式记录,但它肯定是不好玩......为什么不创建一个EML(MIME)文件?
对于那些想要删除或忽略此答案的人:建议使用EML(MIME)格式.根据OP,他考虑了MSG文件格式(#4),但由于复杂性或缺乏处理该格式的JS库而不鼓励.如果考虑MSG文件,MIME是一个更好的选择 - 它是基于文本的,因此创建它不需要特殊的库.Outlook将能够像MSG文件一样轻松地打开它.若要确保Outlook将其视为未发送的邮件,请将X-UnsentMIME标头设置为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>
Run Code Online (Sandbox Code Playgroud)
使用纯文本eml文件的想法,我想出了这个:http://jsfiddle.net/CalvT/un3hapej/
这是我发现的东西的编辑 - 创建.txt文件然后下载它.由于.eml文件实际上是.txt文件,我认为这样可行.确实如此.我已经留下了textarea示例电子邮件,因此您可以轻松测试.当您单击创建文件时,它会为您提供下载.eml文件的下载链接.我能看到的唯一障碍就是让浏览器.eml在下载后打开文件.
编辑:考虑到它,因为您可以访问客户端计算机,您可以将浏览器设置为始终打开该类型的文件.例如,在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);
})();Run Code Online (Sandbox Code Playgroud)
<textarea id="textbox" style="width: 300px; height: 200px;">
To: User <user@domain.demo>
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>Run Code Online (Sandbox Code Playgroud)
小智 6
似乎没有人回答附件问题,所以这是我的解决方案:将EML创建为多部分/混合消息。
Content-Type: multipart/mixed; boundary=--boundary_text_string
Run Code Online (Sandbox Code Playgroud)
这样,您可以在电子邮件中包含多个部分。多个部分可让您添加附件,如下所示。
Content-Type: application/octet-stream; name=demo.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment
Run Code Online (Sandbox Code Playgroud)
从电子邮件标题开始,然后添加边界,然后添加零件内容(换行位置非常重要,否则客户端将无法正确解析您的文件)。您可以添加多个部分。下面是一个例子。请注意,最后一个边界不同于其他边界(末尾有两个破折号)。
To: Demo-Recipient <demo@demo.example.com>
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--
Run Code Online (Sandbox Code Playgroud)
这为您提供了带有两个附件的eml文件。如果您想了解有关其工作原理的更多详细信息,请参见RFC 1371。
| 归档时间: |
|
| 查看次数: |
25355 次 |
| 最近记录: |