ASP.NET 邮件发送用NET的MAIL类即可实现。
邮件发时,为不影响进程,所以采用多线程实现比较好。
/// <summary> /// 多线程邮件发送 多线程需注意不要引用到外部方法代码 /// </summary> /// <param name="model">参数集</param> /// <param name="toemail">收件人邮箱</param> /// <param name="title">邮件标题</param> /// <param name="content">邮件内容</param> public void SendEmail(Dictionary<string, object> obj, string toEmail, string toTitle, string toBody) { obj.Add("toEmail", toEmail); //收件人 obj.Add("toTitle", toTitle); //邮件标题 obj.Add("toBody", toBody); //邮件内容 Thread tr = new Thread(new ParameterizedThreadStart(SendEmail)); tr.Start(obj); } /// <summary> /// 单条邮件发送 /// </summary> /// <returns></returns> private void SendEmail(object p) { Dictionary<string, object> dic = p as Dictionary<string, object>; MailAddress from = new MailAddress(dic["SmtpEmail"].ToString()); //SMTP邮箱账户 MailAddress to = new MailAddress(dic["toEmail"].ToString()); //收件人邮箱 MailMessage message = new MailMessage(from, to); message.IsBodyHtml = true; message.Subject = dic["toTitle"].ToString(); //邮件标题 message.Body = dic["toBody"].ToString(); //邮件内容 SmtpClient client = new SmtpClient(dic["SmtpService"].ToString()); //SMTP地址 client.EnableSsl = Convert.ToBoolean(dic["SmtpSSL"]); //是否启用SSL client.Port = Convert.ToInt32(dic["SmtpPort"]); //SMTP端口 client.Credentials = new NetworkCredential(dic["SmtpAccount"].ToString(), dic["SmtpPwd"].ToString()); //邮箱账户 密码 ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }; client.Send(message); }
邮件发送说明:
1、邮件发送不成功时,查看服务器日志,可找到错误原因。
Gmail错误:SMTP服务器需要安全连接或客户端未通过身份验证。服务器响应是:5.5.1需要验证
Gmail The SMTP server 5.5.1 Authentication Required
邮件安全性没开启,https://myaccount.google.com/security#connectedapps
访问上面地址,有个开关,开启即可。
2、发送HTML页面代码,将邮件内容填写为HTML源代码即可,注意CSS代码写页面里面,引用外部文件需要注意绝对路径。