Outlook Redemption - 从本地文件夹打开 .msg 文件时出现权限问题 (System.UnauthorizedAccessException)
Outlook Redemption - Permissions issues when opening .msg file from local folder (System.UnauthorizedAccessException)
我有一个 .EML 格式的日记邮件文件夹。
我正在编写一些代码将 .EML 文件另存为 .MSG 文件,然后访问保存的 .MSG 文件中的附加 .MSG 文件。当我尝试使用附加的 .MSG 文件访问任何字段时,出现以下异常:
$例外{"Error in IMessage.OpenAttach: MAPI_E_NO_ACCESS"} System.UnauthorizedAccessException
我检查了创建的文件的权限,它们似乎没问题。
我使用的代码:
RDOSession Session = new RDOSession();
foreach (var file in System.IO.Directory.GetFiles(@"\win2012r2-ns\UserProfiles\phil\Downloads\email Archive\Beth_1\"))
{
RDOMail mi = Session.CreateMessageFromMsgFile(@"C:\Temp\temp.msg", "IPM.Mail");
mi.Import(file, 1024);
mi.Save();
Marshal.ReleaseComObject(mi);
mi = Session.GetMessageFromMsgFile(@"C:\Temp\temp.msg");
for (int i = mi.Attachments.Count; i >= 1; i--)
{
if (mi.Attachments[i].FileName.IndexOf(".msg") != -1)
{
Create_Folders(mi.Attachments[i].EmbeddedMsg.ReceivedTime.Year.ToString(), mi.Attachments[i].EmbeddedMsg.ReceivedTime.Month.ToString(), mi.Attachments[i].EmbeddedMsg.ReceivedTime.Day.ToString());
mi.Attachments[i].SaveAsFile(@"\win2012r2-ns\EmailArchive\" + mi.Attachments[i].EmbeddedMsg.ReceivedTime.Year.ToString() + @"\" + mi.Attachments[i].EmbeddedMsg.ReceivedTime.Month.ToString() + @"\" + mi.Attachments[i].EmbeddedMsg.ReceivedTime.Day.ToString() + @"\" + mi.EntryID.ToString() + ".msg");
}
}
Marshal.ReleaseComObject(mi);
}
在 MSG 文件之上打开的消息不允许您打开附件和附件 table,直到该对象的先前实例被释放。
您正在使用多点表示法,导致您无法显式释放隐式变量。尝试将代码更改为以下内容:
RDOAttachments attachments = mi.Attachments;
for (int i = attachments.Count; i >= 1; i--)
{
RDOAttachment attach = mi.Attachments[i];
if (attach.Type == OlAttachmentType.olEmbeddeditem)
{
RDOMail embeddedMsg = attach.EmbeddedMsg;
Create_FoldersembeddedMsg.ReceivedTime.Year.ToString(), embeddedMsg.ReceivedTime.Month.ToString(), embeddedMsg.ReceivedTime.Day.ToString());
attach.SaveAsFile(@"\win2012r2-ns\EmailArchive\" + embeddedMsg.ReceivedTime.Year.ToString() + @"\" + embeddedMsg.ReceivedTime.Month.ToString() + @"\" + embeddedMsg.ReceivedTime.Day.ToString() + @"\" + mi.EntryID.ToString() + ".msg");
Marshal.ReleaseComObject(embeddedMsg);
}
Marshal.ReleaseComObject(attach);
}
Marshal.ReleaseComObject(attachments);
我有一个 .EML 格式的日记邮件文件夹。
我正在编写一些代码将 .EML 文件另存为 .MSG 文件,然后访问保存的 .MSG 文件中的附加 .MSG 文件。当我尝试使用附加的 .MSG 文件访问任何字段时,出现以下异常:
$例外{"Error in IMessage.OpenAttach: MAPI_E_NO_ACCESS"} System.UnauthorizedAccessException
我检查了创建的文件的权限,它们似乎没问题。
我使用的代码:
RDOSession Session = new RDOSession();
foreach (var file in System.IO.Directory.GetFiles(@"\win2012r2-ns\UserProfiles\phil\Downloads\email Archive\Beth_1\"))
{
RDOMail mi = Session.CreateMessageFromMsgFile(@"C:\Temp\temp.msg", "IPM.Mail");
mi.Import(file, 1024);
mi.Save();
Marshal.ReleaseComObject(mi);
mi = Session.GetMessageFromMsgFile(@"C:\Temp\temp.msg");
for (int i = mi.Attachments.Count; i >= 1; i--)
{
if (mi.Attachments[i].FileName.IndexOf(".msg") != -1)
{
Create_Folders(mi.Attachments[i].EmbeddedMsg.ReceivedTime.Year.ToString(), mi.Attachments[i].EmbeddedMsg.ReceivedTime.Month.ToString(), mi.Attachments[i].EmbeddedMsg.ReceivedTime.Day.ToString());
mi.Attachments[i].SaveAsFile(@"\win2012r2-ns\EmailArchive\" + mi.Attachments[i].EmbeddedMsg.ReceivedTime.Year.ToString() + @"\" + mi.Attachments[i].EmbeddedMsg.ReceivedTime.Month.ToString() + @"\" + mi.Attachments[i].EmbeddedMsg.ReceivedTime.Day.ToString() + @"\" + mi.EntryID.ToString() + ".msg");
}
}
Marshal.ReleaseComObject(mi);
}
在 MSG 文件之上打开的消息不允许您打开附件和附件 table,直到该对象的先前实例被释放。 您正在使用多点表示法,导致您无法显式释放隐式变量。尝试将代码更改为以下内容:
RDOAttachments attachments = mi.Attachments;
for (int i = attachments.Count; i >= 1; i--)
{
RDOAttachment attach = mi.Attachments[i];
if (attach.Type == OlAttachmentType.olEmbeddeditem)
{
RDOMail embeddedMsg = attach.EmbeddedMsg;
Create_FoldersembeddedMsg.ReceivedTime.Year.ToString(), embeddedMsg.ReceivedTime.Month.ToString(), embeddedMsg.ReceivedTime.Day.ToString());
attach.SaveAsFile(@"\win2012r2-ns\EmailArchive\" + embeddedMsg.ReceivedTime.Year.ToString() + @"\" + embeddedMsg.ReceivedTime.Month.ToString() + @"\" + embeddedMsg.ReceivedTime.Day.ToString() + @"\" + mi.EntryID.ToString() + ".msg");
Marshal.ReleaseComObject(embeddedMsg);
}
Marshal.ReleaseComObject(attach);
}
Marshal.ReleaseComObject(attachments);