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

 具体没有测试,大家可以自己测试。

 

最后结果:最后如果正常调用到此方法,就能接到邮件通知啦。如下图:

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

 

  

 

posted @ 2017-04-26 16:01  jhonor  阅读(563)  评论(0编辑  收藏  举报