使用SMTP(简单邮件传输协议)发送邮件一般都是使用默认的25端口,而阿里云服务器为了安全将25端口封禁了,会出现在本机测试发送邮件功能正常,但是部署到服务器上却发送失败的情况。
解决办法是向阿里云申请解封25端口,或者更换端口,建议使用587端口(有的说465可用但经过测试不可用)
using System.Configuration;
using System.Collections.Specialized;
using System.IO;
using System.Net.Mail;
public string BulidFile(string tempPath, NameValueCollection values)
{
string prefix = "[$";
string postfix = "]";
StreamReader reader = null;
string template = string.Empty;
try
{
reader = new StreamReader(tempPath);
template = reader.ReadToEnd();
reader.Close();
if (values != null)
{
foreach (string key in values.AllKeys)
{
template = template.Replace(string.Format("{0}{1}{2}", prefix, key, postfix), values[key]);
}
}
}
catch
{
}
finally
{
if (reader != null)
reader.Close();
}
return template;
}
Email文件:
Hello,
[$NAME]
[$URL]
配置文件:
<appSettings>
<!-- 发送地址-->
<add key="sendFrom" value="111111111@qq.com" />
<!-- 发送人的名字-->
<add key="sendUserName" value="发送人姓名" />
<!-- 邮件标题-->
<add key="sendTitle" value="EmailTitle" />
<!-- 邮箱用户名-->
<add key="userName" value="111111111@qq.com" />
<!-- 邮箱密码注意使用授权码-->
<add key="passWord" value="bccdbrpveswhbghj" />
<!-- 邮箱服务器地址-->
<add key="smtpServer" value="smtp.qq.com" />
</appSettings>
1 public void SendEmail(string recName)
2 {
3 string templetpath = Server.MapPath("../../Resource/EmailTemplate/Email.txt");
4 NameValueCollection myCol = new NameValueCollection();
5 string Url ="";
6 string Name = "";
7 myCol.Add("NAME", Name);
8 myCol.Add("URL", Url);
9 string mailBody = BulidFile(templetpath, myCol);
10 string sendFrom = ConfigurationManager.AppSettings["sendFrom"]; //生成一个发送地址
11 string sendUserName = ConfigurationManager.AppSettings["sendUserName"];//发送人的名字
12 string sendTitle = ConfigurationManager.AppSettings["sendTitle"];//发送邮件标题
13 string username = ConfigurationManager.AppSettings["userName"];//发送邮箱用户名
14 string passwd = ConfigurationManager.AppSettings["passWord"];//发送邮箱密码
15 string smtpServer = ConfigurationManager.AppSettings["smtpServer"];//发送邮箱密码
16 MailMessage msg = new MailMessage();
17 msg.To.Add(recName);
18 /*
19 * msg.To.Add("b@b.com");
20 * msg.To.Add("b@b.com");
21 * msg.To.Add("b@b.com");可以发送给多人
22 */
23 /*
24 * msg.CC.Add("c@c.com");
25 * msg.CC.Add("c@c.com");可以抄送给多人
26 */
27 /* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
28 msg.From = new MailAddress(sendFrom);
29 msg.Subject = sendTitle;//邮件标题
30 msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
31 msg.Body = mailBody;//邮件内容
32 msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
33 msg.Priority = System.Net.Mail.MailPriority.High;//邮件优先级
34 msg.IsBodyHtml = false;//是否是HTML邮件
35 SmtpClient client = new SmtpClient();
36 //注意一下三行代码
37 client.EnableSsl = true;
38 client.UseDefaultCredentials = false;
39 client.DeliveryMethod = SmtpDeliveryMethod.Network;
40 //指定发件人的邮件地址和密码以验证发件人身份默认端口为25
41 client.Port = 587;
42 client.Credentials = new System.Net.NetworkCredential(sendFrom, passwd);
43 client.Host = smtpServer;
44 try
45 {
46 client.Send(msg); --异步可使用SendAsync
48 }
49 catch (System.Net.Mail.SmtpException ex)
50 {
51
52 }
53 }