一、要使用程序来发送邮件,以下几个信息必不可少
Smtp服务器:发送邮件的服务器,如常见的smtp.163.com、smtp.qq.com,不同的服务商,发送邮件的服务器也不相同
账号:发送邮件的邮箱账号
密码:邮箱密码或授权码(注:当你在程序中使用邮箱密码进行发邮件,发现无法发送等问题,就要考虑邮箱是否开启了SMTP权限,是不是需 要使用授权码进行发邮件,像qq、163邮箱,这些邮箱是需要先开启SMTP发送邮件的权限,当开启后,会产生一个授权码,这时第三方就可以使用邮件账号加授权码来实现发送邮件功能)
端口:默认端口25 加密端口一般是 465端口,如果不对,请自行百度查询
二、为什么要加密发送邮件
阿里云为了反垃圾邮件,25端口是封掉的,也就是说,如果你要使用阿里服务器发送邮件,25端口是走不通的,必须使用其他端口发送邮件,
这个时候就要用到加密端口发送邮件。如果你的项目有发送邮件的功能,且在测试服务器上发邮件是正常的,部署到阿里云之后就不行了,
这个时候就要想到是不是服务器端口的问题。
三、邮件发送限制
1、发送的邮件,可能会被接收方的邮件系统当做垃圾邮件拦截。
2、程序发送邮件的速度很快的,如果在短时间内发送大量邮件,可能会被当前邮箱所在服务器拦截(邮件发送频率太高)具体限制详情,要 咨询邮件服务器的管理人员。
3、单个邮箱单日发送大量邮件,很有可能发送失败,理论上每个邮箱所在服务器都会有单日发送邮件数量的限制,具体限制是多少,要咨询 邮件服务器的管理人员。
四、发送邮件的函数
1、基于System.Net.Mail.MailMessage 发送邮件
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="email">收件人邮箱</param>
/// <param name="title">标题</param>
/// <param name="content">发送内容</param>
/// <returns></returns>
public static bool SendEmail(string email,string title,string content)
{
string _smtpServer = "smtp.163.com"; //SMTP服务器
string _userName = "test@163.com"; //邮箱
string _pwd = "test"; //密码或授权码
if(_smtpServer == "" || _userName == "" || _pwd == "") {
return false;
}
using(System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage()) {
/*
* msg.To.Add("b@b.com");可以发送给多人
*/
msg.To.Add(email); //设置收件人
/*
* msg.CC.Add("c@c.com");
* msg.CC.Add("c@c.com");可以抄送给多人
*/
/* 3个参数分别是 发件人地址(可以随便写),发件人姓名,编码*/
msg.From = new MailAddress(_userName,_userName,System.Text.Encoding.UTF8);
msg.Subject = title; //邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8; //邮件标题编码
msg.Body = content; //邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = true; //是否是HTML邮件
msg.Priority = MailPriority.Normal; //邮件优先级
SmtpClient client = new SmtpClient(_smtpServer,587); //邮件服务器地址及端口号
client.EnableSsl = true; //ssl加密发送
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.Credentials = new System.Net.NetworkCredential(_userName,_pwd); //邮箱账号 密码
client.Timeout = 6000; //6秒超时
try {
client.Send(msg); //发送邮件
client.Dispose(); //释放资源
return true;
} catch(System.Net.Mail.SmtpException ex) {
return false;
}
}
}
缺点:最近发现该方法不支持163邮箱加密发送,为此在网上找了很久,最终发现System.Net.Mail只支持显式SSL(ExplicitSSL),但是不支持隐式SSL(Implicit SSL),所以会造成163邮箱发送超时的问题,其他邮箱可能也有同样的问题,需要自行测试,如碰到163邮箱加密发送发送超时问题,可以使用下面的发送邮件函数来解决。
2、基于System.Web.Mail 发送邮件(用于解决163邮箱加密发送超时问题,该函数微软已弃用,如果不是特殊情况,不推荐使用该函数)
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="emails">收件人的邮箱</param>
/// <param name="title">邮件标题</param>
/// <param name="content">邮件内容(支持Html)</param>
public static bool SendEmailBack(List<string> emails,string title,string content)
{
string _smtpServer = "smtp.163.com"; //发邮件smtp服务器名称
string _userEmail = "test@163.com"; //发送人邮箱地址
string _pwd = "test"; //发邮件邮箱的密码或授权码
System.Web.Mail.MailMessage _msg = new System.Web.Mail.MailMessage();
//邮件主题
_msg.Subject = title;
_msg.BodyFormat = System.Web.Mail.MailFormat.Html;
//邮件正文
_msg.Body = content;
//正文编码
_msg.BodyEncoding = Encoding.UTF8;
//优先级
_msg.Priority = System.Web.Mail.MailPriority.Normal;
//发件者邮箱地址
_msg.From = _userEmail;
//收件人收箱地址
string _toEmail = "";
emails.ForEach(s => { _toEmail += s + ","; });
//_msg.Cc = _toEmail.TrimEnd(','); //抄送
_msg.To = _toEmail.TrimEnd(','); //收件人
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate","1");
//用户名
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",_userEmail);
//密码
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",_pwd);
//端口
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport",465);
//是否ssl
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl",true);
//Smtp服务器
System.Web.Mail.SmtpMail.SmtpServer = _smtpServer;
try {
System.Web.Mail.SmtpMail.Send(_msg);
return true;
} catch(SmtpException e) {
return false;
}
}
总结:
163邮箱使用SSL端口发送时出现异常:操作超时,查了好久,发现是因为:System.Net.Mail只支持显式SSL(ExplicitSSL),但是不支持隐式SSL(Implicit SSL),此问题似乎可以用System.Web.Mail或Cdosys.dll解决,System.Web.Mail 测试下来是可以使用的,Cdosys.dll没有用过。
显式SSL通过25端口连接 -> StartTLS(开始加密)-> 验证 -> 发送数据
隐式SSLStartSSL(开始加密) -> 连接 -> 验证 -> 发送数据
以上内容仅为个人见解
总结摘抄自:https://zhaoqi.vip/3123403799.html 感兴趣的同学可以看一下