将邮件移动到Outlook已发送文件夹。邮件仍然可以编辑

时间:2018-01-26 08:46:23

标签: c# email outlook

我正在编辑电子邮件并将其发送给收件人。但我也想将原始邮件保存在已发送的文件夹中。但是,如果我将 mailobject 移动到该文件夹​​,邮件仍然可以编辑。

enter image description here

这就是我移动邮件的方式:

  private void CopyMailToSent(Outlook.MailItem originalMail)
  {
      var folder = originalMail.SaveSentMessageFolder;
      originalMail.Move(folder);          
  }

我可以将mailobject设置为readonly或伪造发送吗?

2 个答案:

答案 0 :(得分:1)

首先,Outlook对象模型根本不允许您设置MailItem.Sent属性。在MAPI级别上,MSGFLAG_UNSENT属性中的PR_MESSAGE_FLAGS位只能在第一次保存消息之前设置。

我所知道的唯一OOM解决方法是创建一个帖子项(它在发送状态下创建),将其消息类设置为“IPM.Note”,保存,释放它,通过条目id重新打开(现在它将处于已发送状态的MailItem中,使用PropertyAccessor重置图标,设置一些发件人属性(OOM不会让你设置所有这些)。

如果使用Redemption是一个选项,它将允许您设置Sent属性以及与发件人相关的属性,并添加收件人而无需解析它们。

Set MySession = CreateObject("Redemption.RDOSession")
MySession.MAPIOBJECT = Application.Session.MAPIOBJECT
Set folder = MySession.GetDefaultFolder(olFolderSentMail)
Set msg = folder.Items.Add("IPM.Note")
msg.Sent = True
msg.Recipients.AddEx "Joe The User", "joe@domain.demo", "SMTP", olTo
msg.Sender = MySession.CurrentUser
msg.SentOnBehalfOf = MySession.CurrentUser
msg.subject = "Test sent message"
msg.Body = "test body"
msg.UnRead = false
msg.SentOn = Now
msg.ReceivedTime = Now
msg.Save

答案 1 :(得分:0)

我无法解决问题,但我做了解决方法,对我来说很好。 我希望可以在这里发布,即使它不是解决方案。如果没有,抱歉我会将其删除。

我的解决方法是将原始邮件保存为“.msg”文件,然后将其添加到已发送文件夹中的邮件中。 然后它看起来像这样: enter image description here

这是代码:

private void SendMail(Outlook.Mailitem mail)
{
   mail.SaveAs(tempDirectory + @"originalMail.msg");
   var folder = mail.SaveSentMessageFolder;  
   ChangeMailSubject(mail);
   ChangeMailText(mail);
   mail.Send();
   folder.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler((sender) => AttachOriginalMail(sender);    
}

private void AttachOriginalMail(object sender)
{   
    var mail = (Outlook.MailItem) sender;
    mail.Attachments.Add(tempDirectory + @"originalMail.msg");
    mail.Save();
}