我在尝试打开用javax编写的.msg文件时遇到权限错误

我在尝试打开用javax编写的.msg文件时遇到权限错误,java,outlook,fileoutputstream,jakarta-mail,Java,Outlook,Fileoutputstream,Jakarta Mail,嗨,我正在写一封有两个附件的电子邮件,一个是另一封电子邮件&一个文本文档。经过几个小时的研究,一切都如期进行。我似乎无法解决一个问题 好的,我知道Outlook是一个程序,它可以在电子邮件中使用.eml扩展名打开电子邮件。在所有电子邮件构建之后,我将附件电子邮件写入一个tmp文件,如下所示 msg.writeTo(new FileOutputStream(new File("/tmp/"+contactName+".eml"))); 我的目标是创建一个类似于“草稿”的电

嗨,我正在写一封有两个附件的电子邮件,一个是另一封电子邮件&一个文本文档。经过几个小时的研究,一切都如期进行。我似乎无法解决一个问题

好的,我知道Outlook是一个程序,它可以在电子邮件中使用.eml扩展名打开电子邮件。在所有电子邮件构建之后,我将附件电子邮件写入一个tmp文件,如下所示

            msg.writeTo(new FileOutputStream(new File("/tmp/"+contactName+".eml")));
我的目标是创建一个类似于“草稿”的电子邮件,一旦打开它,所有字段(如收件人、抄送、密件抄送和主题)都已可用并可编辑。如果我这样写,编辑这些字段的唯一方法就是打开附件电子邮件并点击“全部回复”。这个额外的步骤还包括删除生成的文本

发件人:eolnotification@niksun.com[邮寄至: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该文件可能不存在,您可能没有打开它的权限,或者它可能已在其他程序中打开。右键单击包含该文件的文件夹,然后单击“属性”检查您对该文件夹的权限

我尝试了所有不同的方法来更改权限,但没有任何效果。有人说这是因为文件是如何写入outputstream的。我甚至尝试创建一个FileOutputStream对象并显式关闭它,但这也不起作用


我知道一个事实,a.msg确实可以按我所希望的方式打开,但在我的代码中它不起作用。有人知道吗?

MSG文件是二进制格式的。您是否真的创建了一个二进制MSG文件,而不是仅仅将MIME文件扩展名从EML更改为MSG

要创建MSG文件,您可以使用它的。
CreateMessageFromMsgFile
方法


您还可以尝试将
X-Unsent:1
MIME头添加到您的EML文件。

您的程序没有关闭下一行中的FileOutputStream

msg.writeTo(新文件输出流(新文件(“/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

谢谢,德米特里没想到我会得到答案,我会读到的