使用Exchange服务发送邮件服务,主要是发附件,和嵌入式图片
首先NuGet .
.NetFrameWork Microsoft.Exchange.WebServices
.net Core Microsoft.Exchange.WebServices.NETStandard
新建一个消息体类
public class SendMailContent
{
/// <summary>
/// 邮件主题
/// </summary>
public string Subject { get; set; }
/// <summary>
/// 邮件主体
/// </summary>
public MessageBody Body { get; set; }
/// <summary>
/// 发送人列表
/// </summary>
public List<EmailAddress> ToList { get; set; }
/// <summary>
/// 抄送人列表
/// </summary>
public List<EmailAddress> CcList { get; set; }
/// <summary>
/// 密件抄送收件人列表
/// </summary>
public List<EmailAddress> BccList { get; set; }
/// <summary>
/// 发送后是否保存到已发送邮件列表
/// </summary>
public bool IsSendSave { get; set; }
/// <summary>
/// 附件文件路径列表
/// </summary>
public List<string> AttachmentFileNames { get; set; }
/// <summary>
/// 内嵌照片路径和其对应的CID名称
/// </summary>
public Dictionary<string, string> InnerPictures { get; set; }
}
一个单例模式的 EWSHELP帮助类
public class EWSHelper
{
private static readonly object _lock = new object();
private static EWSHelper _instance = null;
/// <summary>
/// ExchangeService对象
/// </summary>
private static ExchangeService service;
private EWSHelper()
{
}
public static EWSHelper GetInStance(string domain, string password)
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
{
service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new WebCredentials(domain, password, "域");
service.Url = new Uri("Exchange WebService 地址");
_instance = new EWSHelper();
}
}
}
return _instance;
}
public bool SendEmail(SendMailContent content)
{
//InitializeEWS();
EmailMessage message = new EmailMessage(service);
//使用自定义发件箱
message.From = new EmailAddress("displayname", "addresss");
// 邮件主题
message.Subject = content.Subject;
message.Body = content.Body;
message.ToRecipients.AddRange(content.ToList);
if (content.CcList?.Count > 0)
message.CcRecipients.AddRange(content.CcList);
if (content.BccList?.Count > 0)
message.BccRecipients.AddRange(content.CcList);
//添加内嵌照片
if (content.InnerPictures?.Count > 0)
{
int i = 0;
foreach (var item in content.InnerPictures)
{
message.Attachments.AddFileAttachment(item.Key, item.Value);
message.Attachments[i].IsInline = true;
//message.Attachments[i].ContentType=
message.Attachments[i].ContentId = item.Key;
i++;
}
}
//添加附件
if (content.AttachmentFileNames?.Count > 0)
foreach (var item in content.AttachmentFileNames)
{
message.Attachments.AddFileAttachment(item);
}
if(content.IsSendSave)
{
message.SendAndSaveCopy();
return true;
}
else
{
message.Send();
return true;
}
//}
// 保存草稿
//message.save();
// 只发送不保存邮件
// message.Send();
// 发送并保存已发送邮件
}
}
调用例子
如果要使用内嵌图片 需要在邮件Body中添加对图片的 嵌入Id
<img src = \"cid:singphoto\" alt = \"内嵌图片\" />
SendMailContent content = new SendMailContent();
content.Subject = subject;
content.Body = new MessageBody
{
BodyType = BodyType.HTML,
Text = "邮件体"
};
content.ToList = new List<EmailAddress>() { new EmailAddress { Address = "邮件地址", Name = "收件人"} };
content.InnerPictures=new Dictionary<string, string>();
content.InnerPictures.Add("singphoto", @"D:\logo.png");
EWSHelper.GetInStance("发件人域账号", “发件人密码”).SendEmail(content);