【问题标题】:Saving an item in the drafts folder also creates a blank outbox item在草稿文件夹中保存项目也会创建一个空白的发件箱项目
【发布时间】: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


    【解决方案1】:

    您需要先save,然后再标记.UnRead = True

    VBA 代码

    With em
        .Subject = "Test VBA"
        .HTMLBody = "This is a test."
        .Recipients.Add ("smtpAddress")  'smtpAddress is placeholder for a real email address
        .Recipients.ResolveAll
        .Save
        .UnRead = True
    End With
    

    【讨论】:

    • 太棒了。这篇文章节省了很多时间。非常感谢 Om3r 和 user2063351。
    猜你喜欢
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多