我想从outlook addin发送smtp发送邮件,该邮件保存到outlook发送文件夹中
注意:在发送文件夹中保存邮件项目的地址必须是我指定的smtp地址,而不是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;
}
提前感谢
您需要在"已发送邮件"文件夹中创建一个已发送邮件,并使用MailItem.PropertyAccessor
设置所有相关属性。请注意,PropertyAccessor
不允许您设置某些与发件人相关的属性。在Outlook 2010或更高版本中,可以设置MailItem.Sender
属性。
另外请注意,保存消息后无法更改已发送标志,因此要使用OOM创建已发送项目,您需要创建一个post项目,然后将其MessageClass
属性更改为"IPM.Note"
。
还要注意,每次保存消息时,OOM都会重置ReceivedTime
和SentOn
属性。
如果使用救赎是一种选择(我是它的作者),你可以做以下事情(在我的脑海中):
Redemption.RDOSession session = new Redemption.RDOSession();
session.MAPIOBJECT = Application.Session.MAPIOBJECT;
Redemption.RDOMail message = session.GetDefaultFolder(rdoDefaultFolders.olFolderSentMail).Items.Add("IPM.Note");
message.Sent = true;
message.Subject = "test";
message.Body = "fake sent message";
message.Recipients.AddEx("The Recipient", "recipient@domain.com", "SMTP", olTo);
string senderEntryID = session.AddressBook.CreateOneOffEntryID("Some Name", "SMTP", "user@domain.com", false, true);
addressEntry = session.AddressBook.GetAddressEntryFromID(senderEntryID);
message.Sender = addressEntry;
message.SentOnBehalfOf = addressEntry;
message.Save();