C# 发送邮件
第一步首先写一个发送邮件的类sendNoticeEmail:
引用命名空间using System.Net.Mail;
public class sendNoticeEmail
{
public string sendNoticeEmailMethod(ef_dm_oop_request oop)//因为参数较多,通过一个对象把所需参数传入
{
//读取邮件模板页内容
string emailContent = File.ReadAllText(System.Web.HttpContext.Current.Server.MapPath("~/upload/templates/promotion/NoticeEmail.txt"), System.Text.Encoding.UTF8);
//替换模板页中的变量
emailContent = emailContent.Replace("author", oop.creation_user).Replace("state", oop.status).Replace("themename", oop.theme_en_desc).Replace("keycode", oop.key_code).Replace("familyname", oop.family).Replace("reason", oop.reason_id).Replace("tmc", oop.tmc);
//读取webconfig中配置的邮件配置参数
string mailConfig=System.Configuration.ConfigurationManager.AppSettings["mailConfig"].ToString();
mailConfig = string.IsNullOrEmpty(mailConfig) ? string.Empty : mailConfig;
string[] mailConfigArray = mailConfig.Split(';');
/*mailConfigArry的内容:smtp.163.com;25;账号@163.com;pwd密码
smtp.163.com为163的邮件服务器地址,25为端口,之后是账号和密码,各大邮件服务提供商的都不同,请参考http://www.360doc.com/content/15/0411/20/20545288_462481521.shtml
*/
//实例化一个邮件消息对象
MailMessage email = new MailMessage();
//email.To.Add("123456777@qq.com");
//可循环群发,利用Add方法写入收件人地址
email.To.Add(oop.email_address);
email.From = new MailAddress(mailConfigArray[2], "这是显示的别名", System.Text.Encoding.UTF8);
//内容
email.Body = emailContent;
//标题
email.Subject = "[NSA++ DM Key in_OOP "+oop.dm_theme_id+"]("+oop.status+") Out of Process: “"+ oop.theme_en_desc + "” “"+ oop.key_code + "” “"+ oop.family + "” “"+ oop.reason_id + "” by “"+ oop.tmc + "”" ;
email.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
email.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
email.IsBodyHtml = false;
email.Priority = MailPriority.High;//邮件优先级
//实例化smtp客服端对象,用来发送电子邮件
System.Net.Mail.SmtpClient stmp = new SmtpClient();
stmp.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
stmp.Host = mailConfigArray[0];
//设置是否需要发送是否需要身份验证,如果不需要下面的credentials是不需要的
stmp.UseDefaultCredentials = true;
stmp.Credentials = new System.Net.NetworkCredential(mailConfigArray[2], mailConfigArray[3]);
stmp.EnableSsl = true;
stmp.Port = System.Int32.Parse(mailConfigArray[1]);
string returnMess = "";
try
{
//发送邮件
stmp.Send(email);
returnMess = master.success;
//return returnMess;
}
catch (Exception ex)
{
log4.Error("sendEmail",ex);
returnMess = master.failure;
//throw ex;
//return "失败";
}
return returnMess;
}
}
第二步:创建邮件模板,新建一个文本文档如:

要替换的变量名称务必和代码中的保持一致!
第三步:就是调用啦,先要得到我们邮件中需要替代的变量等。
1 result_email_notice = promotion._dm_item.Query_email_notice(ef_dm_oop_request);
//接收要发送的通知邮件信息,这里用到ibaits数据库查出的信息返回给一个实体类中,可根据自己需求更改 2 if (!string.IsNullOrEmpty(result_email_notice.email_address)) 3 { 4 sendNoticeEmail email = new sendNoticeEmail();//引用此类所在的命名空间后new一个对象出来 5 string message = email.sendNoticeEmailMethod(result_email_notice); 6 }
第四步:我们需要到该发件人邮箱的上设置一下,打开SMTP,以163为例:


这里会要你设置一个客户端密码,记住,程序中需要配置为这个密码,而不是你邮箱的密码。
不同邮箱有不同的发送限制,163好像是一天50最多。QQ一百,详细请看
http://www.360doc.com/content/15/0411/20/20545288_462481521.shtml
具体没有测试,大家可以自己测试。
最后结果:最后如果正常调用到此方法,就能接到邮件通知啦。如下图:

可能遇到的问题:如果报客户端需要什么安全验证等,可能是你邮箱用户名密码不对,试着先正常登陆试试。如果进入收件人的垃圾箱,可以设置白名单。

浙公网安备 33010602011771号