【发布时间】:2016-08-27 13:42:55
【问题描述】:
我有一个 C# 控制台应用程序,它可以动态创建一堆电子邮件并将它们保存到 Outlook 2013 中的草稿文件夹。但是,我遇到了一个问题,即我创建的项目不仅在草稿文件夹中创建,但是在发件箱文件夹中也会创建一个空白项目(为每个填写的草稿项目创建一个空白发件箱项目)。
作为比较,当我尝试使用 UI 创建草稿电子邮件时,它按预期工作。我新建了一封电子邮件,单击“保存”,该项目仅出现在“草稿”文件夹中。当我尝试以编程方式执行此操作时,会创建发件箱项目。
这是我用来创建电子邮件的 C# 代码:
Outlook.Application app = new Outlook.Application();
Outlook._NameSpace ns = null;
Outlook.Account smtpAddress = null;
Outlook.MAPIFolder draftsFolder = null;
ns = app.GetNamespace("MAPI");
draftsFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDrafts);
Outlook.MailItem email = draftsFolder.Items.Add("IPM.NOTE");
email.Subject = "Test";
email.HTMLBody = "Test draft email";
email.Recipients.Add(smtpAddress.SmtpAddress);
email.Recipients.ResolveAll();
email.UnRead = True;
email.Save();
我也尝试过这种变体:
Outlook.Application app = new Outlook.Application();
Outlook._NameSpace ns = null;
Outlook.Account smtpAddress = null;
Outlook.MAPIFolder draftsFolder = null;
ns = app.Session;
ns.Logon(Profile:"", Password:Type.Missing, ShowDialog:Type.Missing, NewSession:true);
draftsFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDrafts) As Outlook.Folder;
Outlook.MailItem email = (Outlook.MailItem)draftsFolder.Items.Add("IPM.NOTE");
email.Subject = "Test";
email.HTMLBody = "Test draft email";
email.Recipients.Add(smtpAddress.SmtpAddress);
email.Recipients.ResolveAll();
email.UnRead = True;
email.Save();
为了解决问题,我在 Outlook 模块中创建了以下 VBA 代码来测试与上述类似的代码:
Sub SaveEmailToDraftFolder()
Dim app As Outlook.Application
Dim ns As Outlook.nameSpace
Dim fd As Outlook.folder
Dim em As Outlook.MailItem
Set app = New Outlook.Application
Set ns = app.GetNamespace("MAPI")
Set fd = ns.GetDefaultFolder(olFolderDrafts)
Set em = fd.Items.Add("IPM.NOTE")
With em
.Subject = "Test VBA"
.HTMLBody = "This is a test."
.Recipients.Add (smtpAddress) 'smtpAddress is just a placeholder for a real email address
.Recipients.ResolveAll
.UnRead = True
.Save
End With
End Sub
VBA 代码在运行时与 C# 代码执行相同的操作。它会在草稿文件夹中创建一封完整的电子邮件,但也会在发件箱中创建一个空白项目。
作为参考,我有两个 Outlook 配置文件,当我打开 Outlook 时,应用程序会提示我使用一个。但是,如果我将设置更改为始终使用我的默认配置文件(“Outlook”),我已经测试了同时运行控制台应用程序和 VBA 代码,并且每次创建已完成的草稿项目时它仍然会创建一个空白的发件箱项目。
有没有人遇到过这个问题,如果有,您是如何解决的?
谢谢。
【问题讨论】:
标签: c# vba outlook .net-4.0 outlook-2013