我正在编辑电子邮件并将其发送给收件人。但我也想将原始邮件保存在已发送的文件夹中。但是,如果我将 mailobject
移动到该文件夹,邮件仍然可以编辑。
这就是我移动邮件的方式:
private void CopyMailToSent(Outlook.MailItem originalMail)
{
var folder = originalMail.SaveSentMessageFolder;
originalMail.Move(folder);
}
我可以将mailobject设置为readonly或伪造发送吗?
答案 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”文件,然后将其添加到已发送文件夹中的邮件中。 然后它看起来像这样:
这是代码:
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();
}