平时基本都是是用SMTP协议发送邮件,但是公司有个客户对发送邮件要求比较特殊,所以就结合客户需求写了一个通用的exchange协议发送邮件的方法,菜鸟上手,请大家多多指教
public class ExchangeEmailInfo
{
/// <summary>
/// 接收人
/// </summary>
public List<string> ToRecipients { get; set; }
/// <summary>
/// 抄送人
/// </summary>
public List<string> CcRecipients { get; set; }
/// <summary>
/// 邮件主题
/// </summary>
public string Subject { get; set; }
/// <summary>
/// 邮件内容
/// </summary>
public string MessageBodyContent { get; set; }
/// <summary>
/// 邮件内容类型 0 html 1 文本
/// </summary>
public int MessageBodyType { get; set; }
}
public class ExchangeEmailServicce
{
/// <summary>
/// exchange协议服务地址
/// </summary>
public string ExchangeServiceUrl { get; set; }
/// <summary>
/// 发送人
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 密码
/// </summary>
public string UserPwd { get; set; }
/// <summary>
/// 域名
/// </summary>
public string Domain { get; set; }
/// <summary>
/// 邮件集合
/// </summary>
public List<ExchangeEmailInfo> EmailInfoList { get; set; }
}
public ResponseModel<string> SendMail(ExchangeEmailServicce emailServicce)
{
ResponseModel<string> result = new ResponseModel<string>() { IsSuccess = true, ErrorCode = 0 };
System.Text.StringBuilder builder = new System.Text.StringBuilder();
try
{
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2013);
if (string.IsNullOrWhiteSpace(emailServicce.Domain))
exchangeService.Credentials = new WebCredentials(emailServicce.UserName, emailServicce.UserPwd);
else
exchangeService.Credentials = new WebCredentials(emailServicce.UserName, emailServicce.UserPwd, emailServicce.Domain);
exchangeService.TraceEnabled = true;
exchangeService.TraceFlags = TraceFlags.All;
exchangeService.Url = new Uri(emailServicce.ExchangeServiceUrl);
if (emailServicce == null || emailServicce.EmailInfoList.Count <= 0)
{
log.Error(result.Message);
result.IsSuccess = false;
result.Message = "邮件信息不能为空";
return result;
}
foreach (var item in emailServicce.EmailInfoList)
{
EmailMessage email = new EmailMessage(exchangeService);
email.ToRecipients.AddRange(item.ToRecipients);
email.Subject = item.Subject;
if (item.CcRecipients != null && item.CcRecipients.Count > 0)
email.CcRecipients.AddRange(item.CcRecipients);
MessageBody body = new MessageBody()
{
BodyType = item.MessageBodyType == 0 ? BodyType.HTML : BodyType.Text,
Text = item.MessageBodyContent
};
email.Body = body;
email.Send();
builder.Append(JsonConvert.SerializeObject(item.ToRecipients) + "-");
}
return result;
}
catch (System.ObjectDisposedException ex)
{
result.Message = "程序异常,请重试。";
result.ErrorCode = 1;
}
catch (ServiceVersionException ex)
{
result.Message = "服务版本异常,请重试";
result.ErrorCode = 1;
}
catch (ServiceValidationException ex)
{
result.Message = "服务验证失败,请重试";
result.ErrorCode = 1;
}
catch (ServiceLocalException ex)
{
result.Message = "本地服务异常,请重试";
result.ErrorCode = 1;
}
catch (Exception e)
{
result.Message = e.ToString();
result.ErrorCode = 2;
}
if (builder != null && string.IsNullOrWhiteSpace(builder.ToString()))
log.Error("参数:" + JsonConvert.SerializeObject(emailServicce) + "/n已成功发送的邮件:"+builder.ToString()+"/n错误信息:" + result.Message);
else
log.Error("参数:" + JsonConvert.SerializeObject(emailServicce) + "/n错误信息:" + result.Message);
result.IsSuccess = false;
return result;
}
//exchange协议发送邮件 mailTo,mailCC 多个收件人和多个抄送人之间分别用英文逗隔开
ExchangeSendMail = function (serviceUrl, userName, UserPwd, mailTo, mailCC, mailSubject, mailBody, mailBodyType, domain) {
if (mailTo == null || mailTo == undefined) {
alert('接收人不能为空');
return;
}
var infoList = new Array();
var emailInfo = {};
emailInfo.ToRecipients = mailTo.split(',');
if (mailCC != null && mailCC != undefined)
emailInfo.CcRecipients = mailCC.split(',');
emailInfo.Subject = mailSubject;
emailInfo.MessageBodyContent = mailBody;
emailInfo.MessageBodyType = (mailBodyType == null || mailBodyType == undefined) ? 1 : mailBodyType;
infoList.push(emailInfo)
var para = {
ExchangeServiceUrl: serviceUrl
, userName: userName
, UserPwd: UserPwd
, Domain: (domain == null || domain == undefined) ? "" : domain
, EmailInfoList: infoList
};
$.ajax({
url: Display.config.VirtualPath + '/api/ExchangeEmail/SendMessage',
type: "POST",
contentType: 'application/json',
data: JSON.stringify({ args: para, messageType: 1 }),
success: function (data) {
if (!data.IsSuccess)
alert(data.Message);
}
});
}
本文介绍了如何在C# .NET环境下,针对特殊邮件发送需求,利用Exchange协议编写通用的邮件发送方法。作为初学者的尝试,期待得到更多资深开发者的意见和建议。

3391

被折叠的 条评论
为什么被折叠?



