功能描述:使用邮箱验证实现用户注册激活和找回密码。邮箱选择网易163作为smtp服务器。
真实测试情况:第一种:大部分服务器运行商的25端口默认是封禁的,可以联系运营商进行25端口解封,解封之后可以使用25端口。第二种:使用465、587加密端口,经测试587端口发送失败返回“无法从传输连接中读取数据”,所以这里只做465端口的配置。下面就是两种成功案例的代码请同学根据实际情况选择。
从网上查阅信息了解到使用阿里和qq邮箱的587端口也发送失败,所以目前知道网易、阿里、qq三大运营商的stmp服务587端口都失败。
第一步:开启smtp服务。登录网易邮箱【设置】-左侧菜单找到【POP3/SMTP/IMAP】,开启服务和获取授权密码(注意:代码中的密码使用授权密码)。如图设置
第二步:设置服务器防火墙入栈规则添加465端口。
第三步:代码。
Send25是25端口测试可以发送邮件的方法。使用的类库System.Net.Mail
public void Send25()
{
//this.SmtpHost //指定 smtp 服务器地址
//this.SmtpPort //smtp 服务器的端口
//this.FromEmailAddress //发送邮件的邮箱地址
//this.FormEmailPassword //发送邮件的邮箱密码,这里使用授权码
//this.ToList //接收邮件的邮箱地址,可以是集合逗号分隔
//System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;//可以去掉
SmtpClient smtp = new SmtpClient(); //实例化一个SmtpClient
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; //将smtp的出站方式设为 Network
smtp.EnableSsl = false; //smtp服务器是否启用SSL加密
smtp.Host = this.SmtpHost; //指定 smtp 服务器地址
smtp.Port = this.SmtpPort; //指定 smtp 服务器的端口,默认是25,如果采用默认端口,可省去
smtp.UseDefaultCredentials = true; //如果你的SMTP服务器不需要身份认证,则使用下面的方式,不过,目前基本没有不需要认证的了
//smtp.EnableSsl = false;
smtp.Credentials = new NetworkCredential(this.FromEmailAddress, this.FormEmailPassword); //如果需要认证,则用下面的方式
MailMessage mm = new MailMessage(); //实例化一个邮件类
mm.Priority = MailPriority.Normal; //邮件的优先级,分为 Low, Normal, High,通常用 Normal即可
mm.From = new MailAddress(this.FromEmailAddress, "管理员", Encoding.GetEncoding(936));
//收件人
if (!string.IsNullOrEmpty(this.ToList))
mm.To.Add(this.ToList);
//抄送人
if (!string.IsNullOrEmpty(this.CCList))
mm.CC.Add(this.CCList);
//密送人
if (!string.IsNullOrEmpty(this.BccList))
mm.Bcc.Add(this.BccList);
mm.Subject = this.Subject; //邮件标题
mm.SubjectEncoding = Encoding.GetEncoding(936); //这里非常重要,如果你的邮件标题包含中文,这里一定要指定,否则对方收到的极有可能是乱码。
mm.IsBodyHtml = this.IsBodyHtml; //邮件正文是否是HTML格式
mm.BodyEncoding = Encoding.GetEncoding(936); //邮件正文的编码, 设置不正确, 接收者会收到乱码
mm.Body = this.Body; //邮件正文
//邮件附件
if (this.AttachmentList != null && this.AttachmentList.Count > 0)
{
foreach (Attachment attachment in this.AttachmentList)
{
mm.Attachments.Add(attachment);
}
}
smtp.Send(mm);
}
Send465是465端口测试可以发送邮件的方法。使用的类库System.Web.Mail
public bool Send465()
{
// 邮件主题
System.Web.Mail.MailMessage mmsg = new System.Web.Mail.MailMessage();
//邮件主题
mmsg.Subject = "主题";
mmsg.BodyFormat = System.Web.Mail.MailFormat.Html;
//邮件正文
mmsg.Body = “正文”;
//正文编码
mmsg.BodyEncoding = Encoding.UTF8;
//优先级
mmsg.Priority = System.Web.Mail.MailPriority.Normal;
//发件者邮箱地址
mmsg.From = Email;
//收件人收箱地址
mmsg.To = email;
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//用户名
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", Email);
//密码(授权码)
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Emailpwd);
//端口
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", Port);
//是否ssl
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl",true);
//Smtp服务器
System.Web.Mail.SmtpMail.SmtpServer = Host;
try
{
System.Web.Mail.SmtpMail.Send(mmsg);
return true;
}
catch (Exception ex)
{
return false;
}
}