当前,我正在编写一个控制台应用程序,该应用程序可以删除所有现有邮件,并且必须从.msg文件中获取新邮件(因此它将重置Outlook邮件)。 我想将导入文件从.msg文件复制到Outlook收件箱,但是我似乎找不到合适的方法。
我尝试了在这里和互联网上找到的各种方法,以及通过mail.move(inbox)“工作”最多的方法。这样会将邮件添加到收件箱中,但还会引发异常-System.Runtime.InteropServices.COMException:“无法移动项目。”,我无法摆脱它。
private static void FillInbox(NameSpace ns)
{
MAPIFolder inbox = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
MailItem mail = ns.OpenSharedItem($@"W:\CopyThis.msg");
mail.Move(inbox);
}
您能帮助我获得更好的方法吗?一个不会引发异常的东西?
答案 0 :(得分:0)
您可以尝试使用Application类的CreateItemFromTemplate方法,该方法从Outlook模板(.oft)创建新的Microsoft Outlook项目并返回新项目。在针对Outlook 2010及更高版本的测试中,我尝试将.msg
文件的路径传递给CreateItemFromTemplate
方法,它的工作原理很吸引人。因此,您可以将.msg
和.oft
文件用作模板。
using System.Runtime.InteropServices;
// ...
private void CreateItemBasedOnTemplate(Outlook.Application Application)
{
Outlook.NameSpace ns = null;
Outlook.MAPIFolder containerFolder = null;
Outlook.MailItem item = null;
Outlook.MailItem movedItem = null;
try
{
ns = Application.GetNamespace("MAPI");
containerFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
item = Application.CreateItemFromTemplate(@"D:\MyTemplate.msg", containerFolder)
as Outlook.MailItem;
// the item was created in the Drafts folder regardless
// that is why we move it to the Inbox folder
movedItem = item.Move(containerFolder) as Outlook.MailItem;
movedItem.Save();
movedItem.Display();
}
catch (COMException ex)
{
if (ex.ErrorCode == -2147287038)
System.Windows.Forms.MessageBox.Show(ex.Message,
"Can't find the template...");
else
System.Windows.Forms.MessageBox.Show(ex.Message,
"An error was occurred when creating a new item from template...");
}
finally
{
if (movedItem != null) Marshal.ReleaseComObject(movedItem);
if (item != null) Marshal.ReleaseComObject(item);
if (containerFolder != null) Marshal.ReleaseComObject(containerFolder);
if (ns != null) Marshal.ReleaseComObject(ns);
}
}
您可能会发现How To: Create a new Outlook message based on a template文章很有帮助。
答案 1 :(得分:0)
使用Namespace.OpenSharedItem
-返回MailItem
对象,然后您可以使用MailItem.Move
或MailItem.Copy / MalItem.Move
将其移动到任何文件夹。
与OpenSharedItem.CreateItemFromTemplate
(总是在未发送状态下创建项目并跳过与发件人相关的属性)不同,Namespace.OpenSharedItem
使所有属性都可用