我正在使用MS Exchange Web服务API通过共享邮箱发送电子邮件。
发送电子邮件有效,但未将其保存在已发送的邮件中。如下所示,手动进行时,邮件已保存在“已发送邮件”中,但通过我的代码无法保存:
using Microsoft.Exchange.WebServices.Data;
using System;
//Ref to Microsoft.Exchange.WebServices v15
//Re to Microsoft.Exchange.WebServices.Auth v15
namespace Emailing
{
public class Email
{
private string _sharedOutlookMailAccount = "aSharedEmailAccount@something.com";
private ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
public Email(string exchangeURL = "https://webmail.something.com/ews/exchange.asmx")
{
try
{
exchangeService.AutodiscoverUrl(_sharedOutlookMailAccount);
//exchangeService.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _sharedOutlookMailAccount);
exchangeService.UseDefaultCredentials = true;
}
catch (System.Runtime.InteropServices.COMException ex)
{
//...
}
catch (Exception ex)
{
//...
}
}
public bool SendEmailFromSharedMailBox(string emailTo, string emailCc, string emailBcc, string emailSubject, string emailBody, string[] emailFileAttachments, bool emailFromSharedMailbox = false, bool sendToDraftOnly = false)
{
EmailMessage message = default(EmailMessage);
message = new EmailMessage(exchangeService);
emailTo = emailTo.TrimEnd(';', ',');
string[] emailArr = emailTo.Split(';', ',');
if (emailTo.Length > 0) message.ToRecipients.AddRange(emailArr);
emailCc = emailCc.TrimEnd( ';', ',' );
emailArr = emailCc.Split(';', ',' );
if (emailCc.Length > 0) message.CcRecipients.AddRange(emailArr);
emailBcc = emailBcc.TrimEnd(';', ',');
emailArr = emailBcc.Split(';', ',');
if (emailBcc.Length > 0) message.BccRecipients.AddRange(emailArr);
#if DEBUG
emailSubject = "IGNORE - TESTING ONLY - " + emailSubject;
#endif
message.Subject = emailSubject;
EmailAddress fromSender = new EmailAddress();
fromSender.MailboxType = MailboxType.Mailbox;
fromSender.Address = _sharedOutlookMailAccount;
message.From = fromSender;
if (emailFileAttachments != null)
{
foreach (string fileAttachment in emailFileAttachments)
{
if (string.IsNullOrEmpty(fileAttachment) == false)
message.Attachments.AddFileAttachment(fileAttachment);
}
}
message.Sensitivity = Sensitivity.Private;
message.Body = new MessageBody();
message.Body.BodyType = BodyType.HTML;
message.Body.Text = emailBody; //+= "_sharedMailSignature";
//Save the email message
try
{
//THIS WORKS AND IS REQUIRED FOR THE Send() &/or SendAndSaveCopy() METHODS TO WORK
message.Save(new FolderId(WellKnownFolderName.Drafts, _sharedOutlookMailAccount));
}
catch (Exception ex)
{
//...
return false;
}
if (!sendToDraftOnly)
{
try
{
//==================================================================
//THIS SENDS EMAILS BUT THEY ARE NOT SAVED IN THE SENT ITEMS!
//==================================================================
message.SendAndSaveCopy(new FolderId(WellKnownFolderName.Drafts, _sharedOutlookMailAccount));
}
catch (Exception ex)
{
//...
return false;
}
}
return true;
}
}
有人知道我如何将已发送的电子邮件保存到“已发送邮件”文件夹中吗?
答案 0 :(得分:0)
我需要使用 WellKnownFolderName.SentItems 而非草稿。
message.SendAndSaveCopy(new FolderId(WellKnownFolderName.SentItems, _sharedOutlookMailAccount));
此Microsoft知识库(KB)文章中介绍了此问题的其他原因/解决方案: https://support.microsoft.com/en-au/help/2958272/email-sent-using-outlook-are-not-saved-to-the-sent-items-folder
答案 1 :(得分:0)
是的,您可以使用SendAndSaveCopy函数来满足您的需求。这是有关EWS API的正式文档。