您好我正在写一封包含2个附件的电子邮件,其中一封是另一封电子邮件&文本文件。经过几个小时的研究,一切都按预期工作我似乎无法解决一个问题。
好的,所以我知道Outlook是打开电子邮件的程序,它使用.eml扩展名存储其电子邮件。完成所有电子邮件构建后,我将附件电子邮件写入这样的tmp文件。
msg.writeTo(new FileOutputStream(new File("/tmp/"+contactName+".eml")));
我的目标是创建一个像电子邮件一样的“草稿”,一旦打开它,To,CC,Bcc和主题等所有字段都已可用且可编辑。如果我这样写,编辑这些字段的唯一方法是打开附件电子邮件并点击“回复全部”。这个额外步骤还包括删除生成的文本,如。
来自:eolnotification@niksun.com [mailto:eolnotification@company.com]
发送时间:2014年2月8日星期六下午4:11
主题:90天内停产公司产品的通知
所以我发现我应该使用.msg代替.eml。当我使用它时,它似乎是一个许可问题。
msg.writeTo(new FileOutputStream(new File("/tmp/"+contactName+".msg")));
无法打开文件:C:\ tmp \ joe_susie.msg该文件可能不存在,您可能没有权限打开它,或者它可能在另一个程序中打开。右键单击包含该文件的文件夹,然后单击“属性”以检查该文件夹的权限。
我尝试了所有不同的方式来更改权限,但没有任何作用。有人说这是因为文件是如何写入输出流的。我甚至尝试制作一个FileOutputStream对象并明确地将其关闭,这也不起作用。
我知道一个事实是.msg确实打开了我想要的可编辑方式,但是我的代码却没有用。有谁知道这个?
答案 0 :(得分:1)
您的程序未关闭以下行中的FileOutputStream。
msg.writeTo(new FileOutputStream(new File("/tmp/"+contactName+".eml")));
您需要将其重写为:
try (FileOutputStream fos = new FileOutputStream(new File("/tmp/"+contactName+".eml"))) {
msg.writeTo(fos);
fos.flush();
}
由于某种原因,Outlook打开对话框无法打开“.eml”文件。但是,如果要从outlook打开.eml
(MIME文本)文件,可以使用未记录的'/ eml'开关来执行此操作:
outlook.exe /eml foo.eml
如果你想从outlook打开'.msg'(二进制)文件,可以使用记录的'/ f'开关来实现:
outlook.exe /f foo.msg
答案 1 :(得分:0)
MSG文件是二进制格式。您是否实际创建了二进制MSG文件,而不是仅仅将MIME文件扩展名从EML更改为MSG?
要创建MSG文件,您可以使用Redemption及其RDOSession。CreateMessageFromMsgFile
方法。
您还可以尝试将X-Unsent:1
MIME标头添加到您的EML文件中。