【问题标题】:Storing emails in sent items of Outlook using add in使用插件将电子邮件存储在 Outlook 的已发送项目中
【发布时间】:2016-09-08 11:32:49
【问题描述】:

我正在尝试在 .net 框架 4.0 下的 Visual Studio 中为 Outlook 开发一个插件。我使用 smtp 协议从 Outlook 插件发送电子邮件。我无法在 Outlook 的已发送文件夹中找到已发送的邮件。

如何将已发送的邮件存储在 Outlook 的已发送文件夹中?

到目前为止,我已经编写了这个用于发送邮件的代码。

public bool SendEMail(){ 
   MailMessage mailNew = new MailMessage();
    var smtp = new SmtpClient("SmtpServer")
    {
     EnableSsl = false,
     DeliveryMethod = SmtpDeliveryMethod.Network
     };
    smtp.Port = 587;
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.UseDefaultCredentials = false; 
    System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("UserName", "password");
    smtp.EnableSsl = false;
    smtp.Credentials = credentials;
    MailAddress mailFrom = new MailAddress("clark@gmail.com");
    mailNew.From = mailFrom;
    mailNew.To.Add("someone@gmail.com");
    mailNew.Subject = Subject;
    mailNew.IsBodyHtml = Html;
    mailNew.Body = Body;
   smtp.Send(mailNew);
   return true;
}

我想在 Outlook 的已发送文件夹中添加用于存储已发送邮件的编码。

【问题讨论】:

    标签: outlook


    【解决方案1】:

    您需要创建一个虚假的已发送项目。请注意,Outlook 对象模型中的邮件是在未发送状态下创建的,无法修改。 唯一的例外是帖子项目。下面的 VB 脚本在 Sent Item 文件夹中创建一个 poat 项目,重置消息类,将其作为常规 MailItem 重新打开(现在处于已发送状态)。请注意,您不能单独使用 OOM 设置与发送者相关的属性,也不能设置发送/接收日期。

    'create PostItem
    set msg = Application.Session.GetDefaultFolder(olFolderSentMail).Items.Add("IPM.Post")
    msg.MessageClass = "IPM.Note"
    msg.Subject = "fake sent email"
    msg.Body = "test"
    msg.Save
    vEntryId = msg.EntryID
    set msg = Nothing 'release the mesage
    'and reopen it as MailItem
    set msg = Application.Session.GetItemFromID(vEntryId)
    'make sure PR_ICON_INDEX is right
    msg.PropertyAccessor.SetProperty "http://schemas.microsoft.com/mapi/proptag/0x10800003", -1
    set vRecip = msg.Recipients.Add("fakeuser@domain.demo")
    vRecip.Resolve
    msg.Save
    

    如果使用Redemption 是一个选项,它可以让您在第一次保存之前设置发送状态(MAPI 限制)并允许正确设置发送者和日期属性:

    set Session = CreateObject("Redemption.RDOSession")
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT
    set msg = Session.GetDefaultFolder(olFolderSentMail).Items.Add("IPM.Note")
    msg.Sent = true
    msg.Subject = "fake sent email"
    msg.Body = "test"
    set vRecip = msg.Recipients.Add("fakeuser@domain.demo")
    vRecip.Resolve
    'dates
    msg.SentOn = Now
    msg.ReceivedTime = Now
    'create fake sender
    vSenderEntryID = Session.AddressBook.CreateOneOffEntryID("the sender", "SMTP", "me@domain.demo", true, true)
    set vSender = Session.AddressBook.GetAddressEntryFromID(vSenderEntryID)
    msg.Sender = vSender
    msg.SentOnBehalfOf = vSender
    msg.Save
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-18
      • 2019-03-04
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2019-03-26
      • 1970-01-01
      相关资源
      最近更新 更多