利用System.Net.Mail 的SmtpClient发送邮件-阿里云开发者社区

开发者社区> 杰克.陈> 正文

利用System.Net.Mail 的SmtpClient发送邮件

简介: 原文:利用System.Net.Mail 的SmtpClient发送邮件 几个月前总结过关于Jmail发送邮件,当时用Jmail发送邮件发送速度有点慢(可能对Jmail了解不是很多).现在改为用微软提供的SmtpClient来发送邮件。
+关注继续查看
原文:利用System.Net.Mail 的SmtpClient发送邮件

几个月前总结过关于Jmail发送邮件,当时用Jmail发送邮件发送速度有点慢(可能对Jmail了解不是很多).现在改为用微软提供的SmtpClient来发送邮件。

MailMessage 用于构造可以使用SmtpClient类传输到Smtp服务器以便传递的电子邮件;

使用MailMessage初始化MailMessage对象时,可以将电子邮件的发信人,收件人,主题和正文指定为参数。这些参数也可能被设置,或者使用MailMessage对象上的属性访问。

常用的属性:

附件    Attachments

密送    bcc

抄送   cc

Content-Type  bodyEncoding/subjectEncoding

邮件正文  body

收件人  To

发件人  From

Subject  sujbect

使用AlternateViews属性指定一个电子邮件不同格式的副本,如果发送HTML格式的邮件,可能希望同时提供邮件的纯文本格式,以防止一些收件人使用的电子邮件阅读程序无法显示html内容,另外这是我们使用body属性指定文本格式。

下面用两种方式发邮件:

Send
 1   ArrayList list = new ArrayList();
 2         list.Add("*****@neotrident.com");
 3         list.Add("*****@gmail.com");
 4         list.Add("*****@126.com");
 5         list.Add("*****@qq.com");
 6         list.Add("*****@yahoo.com.cn");
 7         list.Add("*****@tarena.com.cn");
 8         list.Add("*****@me.com");
 9         MailMessage mailMessage = new MailMessage();
10         for (int i = 0; i < list.Count; i++)
11         {
12             MailAddress toAddress = new MailAddress(list[i].ToString());
13             mailMessage.To.Add(toAddress);//收件人
14             mailMessage.CC.Add(toAddress);//抄送
15             mailMessage.Bcc.Add(toAddress);//密送
16         }
17         string fileName = @"E:\2012年Q2新员工培训.pdf";
18         Attachment attachment = new Attachment(fileName);
19         
20         mailMessage.Attachments.Add(attachment);
21         mailMessage.From = new MailAddress("发件人邮箱地址", "**科技有限公司");
22         mailMessage.Subject = "hello";
23         mailMessage.SubjectEncoding = System.Text.Encoding.Unicode;
24         mailMessage.Body = "hello world";
25         mailMessage.BodyEncoding = System.Text.Encoding.Unicode;
26         string body = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
27         body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=utf-8\">";
28         body += "</HEAD><BODY><DIV><FONT face=Arial color=#ff0000 size=2>this is some HTML text";
29         body += "</FONT></DIV></BODY></HTML>";
30         ContentType type = new ContentType("text/html");
31         AlternateView view = AlternateView.CreateAlternateViewFromString(body, Encoding.Unicode, "text/html");
32         mailMessage.AlternateViews.Add(view);
33         SmtpClient client = new SmtpClient("smtp.126.com");
34         client.Credentials = new System.Net.NetworkCredential("发件人邮箱地址", "邮箱密码");
35         client.Send(mailMessage);

第二种利用:SendAsync,

将指定的电子邮件发送到 SMTP 服务器以便传递。 此方法不会阻止调用线程,并允许调用方将对象传递给操作完成时调用的方法。第二种方式要在页面中设置Async="true"

SendAsync
 1  protected void Page_Load(object sender, EventArgs e)
 2     {
 3         ArrayList list = new ArrayList();
 4         list.Add("***@neotrident.com");
 5         list.Add("***@gmail.com");
 6         list.Add("***@126.com");
 7         list.Add("***@qq.com");
 8         list.Add("***@yahoo.com.cn");
 9         list.Add("***@tarena.com.cn");
10         list.Add("***@me.com");
11         MailMessage mailMessage = new MailMessage();
12         for (int i = 0; i < list.Count; i++)
13         {
14             MailAddress toAddress = new MailAddress(list[i].ToString());
15             mailMessage.To.Add(toAddress);//收件人
16             mailMessage.CC.Add(toAddress);//抄送
17             mailMessage.Bcc.Add(toAddress);//密送
18         }
19         string fileName = @"E:\2012年Q2新员工培训.pdf";
20         Attachment attachment = new Attachment(fileName);
21         
22         mailMessage.Attachments.Add(attachment);
23         mailMessage.From = new MailAddress("发件人地址", "**科技有限公司");
24         mailMessage.Subject = "hello";
25         mailMessage.SubjectEncoding = System.Text.Encoding.Unicode;
26         mailMessage.Body = "hello world";
27         mailMessage.BodyEncoding = System.Text.Encoding.Unicode;
28         string body = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
29         body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=utf-8\">";
30         body += "</HEAD><BODY><DIV><FONT face=Arial color=#ff0000 size=2>this is some HTML text";
31         body += "</FONT></DIV></BODY></HTML>";
32         ContentType type = new ContentType("text/html");
33         AlternateView view = AlternateView.CreateAlternateViewFromString(body, Encoding.Unicode, "text/html");
34         mailMessage.AlternateViews.Add(view);
35         SmtpClient client = new SmtpClient("smtp.126.com");
36         client.Credentials = new System.Net.NetworkCredential("发件人地址", "密码");
37         //client.Send(mailMessage);
38         client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
39         string userState = "test message1";
40         client.SendAsync(mailMessage, userState);
41         if (mailsent == false)
42         {
43             client.SendAsyncCancel();
44         }
45         Response.Write("Goodbye");
46 
47     }
48     static bool mailsent = false;
49     void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
50     {
51         string token = (string)e.UserState;
52         if (e.Cancelled)
53         {
54             Response.Write(string.Format("{0} Send canceled.",token));
55         }
56         if (e.Error != null)
57         {
58             Response.Write(string.Format("[{0}] {1}", token, e.Error));
59         }
60         else
61         {
62             Response.Write("Message sent");
63         }
64         mailsent = true;
65     }

 

就这可以用2种方式,以上代码包括发送附件,to,bcc,cc,正文内容的不同格式(html)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
关于SMTP协议发送邮件的总结
  最近在看一本书,是VC++网络编程,可以说那本书写的乱七八糟,我也晕头转向、、、  、 我写的大家可能有些看着抽象,捡着能看懂的看就行,我讲述的是SMTP的原理,而不是如何编程来实现,我纠结一天的感悟,希望对学习网络编程的朋友能有些帮助。
1040 0
ApiPost(中文版postman)如何发送一个随机数或者时间戳?
当我们的请求参数是一个时间戳或者随机数时,我们可以用ApiPost的内建变量
2192 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4512 0
SpringBoot开发案例之整合mail发送服务
记得上个月做过这样一篇笔记,微服务架构实践之邮件通知系统改造。 当时用的是开源的第三方插件mail和Thymeleaf做发送服务,显然这样子你需要配置一些东西,麻烦!!!接触了Spring Boot以后,显然有更好的解决方案,我们只需要引入spring-boot-starter-mail模块就实现了自动化配置。
20445 0
iOS-静默方式发送邮件(SKPSMTPMessage)
网上有很多关于这个库的文章,但很多都是直接抄DEMO里的代码,这个文章对如何使用进行了详细的说明,我在xcode8.0下,亲测通过,希望对其他有需要的同学有帮助
3027 0
+关注
杰克.陈
一个安静的程序猿~
9798
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载