本文讲解通过C#来实现发送邮件:
1.我这里是使用的阿里企业邮箱,至于其他的163和QQ邮箱,就是修改下服务器地址和端口的问题
2.至于发送失败的问题,在排除代码问题之后,可以看下自己使用的发送邮箱的账户是否开启了授权,特别是163和QQ邮箱,要开授权的
这里针对阿里企业邮箱的各个服务器和端口配置说明一下:
1.POP服务器:
地址:pop3.mxhichina.com
端口:110
加密端口:995
2.IMAP服务器:
地址:imap.mxhichina.com
端口:143
加密端口:993
备注:接收邮件推荐使用该协议,毕竟POP3是无法和邮箱服务器进行交互的,不能更新邮件的状态。
SMTP服务器:
地址:smtp.mxhichina.com
端口:25
加密端口:465
直接上核心代码:
/// <summary>
/// 发送邮件方法,更多可以自己转到定义去查看,还是很通俗易懂的
/// </summary>
/// <param name="requestModel"></param>
public static void SendEmail(EmailInfo requestModel)
{
if (requestModel.To.IsNullOrEmpty()) throw new LevoxCpcException("邮件收件人不能为空!");
if (string.IsNullOrWhiteSpace(requestModel.Subject)) throw new LevoxCpcException("邮件标题不能为空!");
if (string.IsNullOrWhiteSpace(requestModel.Body) && requestModel.Attachments.IsNullOrEmpty()) throw new LevoxCpcException("没有要发送的邮件内容!");
var emailSettingInfo = GetSendEmailSenderInfo();
try
{
//初始化发送邮件对象
var client = new SmtpClient(emailSettingInfo.Host, emailSettingInfo.Port)
{
//是否启用SSL,这里是false,如果true,需要配置证书
EnableSsl = false,
//是否启用身份验证(UseDefaultCredentials属性必须要在Credentials前配置,否则会报错)
UseDefaultCredentials = true,
//配置身份账号密码
Credentials = new NetworkCredential(emailSettingInfo.Account, emailSettingInfo.Password)
};
//要发送的邮件对象
var email = new MailMessage()
{
//发件人邮箱和展示名称
From = new MailAddress(emailSettingInfo.Account, emailSettingInfo.DisplayName),
IsBodyHtml = true,//是否是html格式
Subject = requestModel.Subject,//邮件标题
BodyEncoding = Encoding.Default,//邮件内容编码
Body = requestModel.Body,//邮件内容
Priority = MailPriority.High//邮件优先级
};
//收件人(可以多个)
requestModel.To.Distinct().LingbugFor(r => email.To.Add(r));
//抄送人(可以多个)
if (!requestModel.CC.IsNullOrEmpty()) requestModel.CC.Distinct().LingbugFor(r => email.CC.Add(r));
//附件(可以多个)
if (!requestModel.Attachments.IsNullOrEmpty()) requestModel.Attachments.Distinct().LingbugFor(r => email.Attachments.Add(new Attachment(r)));
//发送完毕事件(只针对异步发送有效)
client.SendCompleted += (sender, e) =>
{
if (e.Error == null)
{
LogTestService.Info("邮件发送成功", requestModel.SerializeObject());
}
else
{
LogTestService.Info("邮件发送失败:" + e.Error.Message, e.Error.SerializeObject());
}
};
//发送邮件
client.SendMailAsync(email);
}
catch (Exception ex)
{
LogTestService.Info("发送邮件发生异常:" + ex.Message, ex.SerializeObject());
}
}
Ending~