码迷,mamicode.com
首页 > Web开发 > 详细

使用.net 内置的SmtpClient来实现邮件的发送

时间:2017-08-27 11:09:13      阅读:482      评论:0      收藏:0      [点我收藏+]

标签:mst   generic   odi   gif   ima   author   授权   nsf   rgs   

  前言  

  发送邮件的方式有很多种,比如通过.net框架内置的SmtpClient来实现邮件发送,使用开源项目LumiSoft.Net等,这里就讲一下如何使用System.Net.Mail命名空间下的SmtpClient来发送邮件。

  一、邮件发送过程

  例如A使用163邮箱发送邮件给B(qq邮箱)。首先A会把邮件通过SMTP(Simple Mail Transfer Protocol)协议传输到163的Smtp服务器上,163的Smtp服务器会根据B的邮箱账号,把邮件通过Smtp协议发给QQ邮箱的Smtp服务器。QQ的Smtp服务器接收到邮件消息后会将之存储在QQ邮箱的邮件存储设备上。当B登陆QQ邮箱后,如果有新邮件,POP3服务器就会从QQ邮箱的邮件存储设备上读出邮件并通过POP3/IMAP服务发送给邮件客户端的B。

  原理图

  技术分享

  二、前置工作

  1.准备两个测试用的邮箱(这里使用qq邮箱)

  2.为邮箱开启POP3/SMTP服务 和 IMAP / SMTP服务(qq邮箱 需要在设置->账户下开启)

  技术分享

 三、开始coding

  1.创建MailMessage对象来编辑邮件正文,并指明发送者和接收者

  2.创建SmtpClient对象来发送邮件,需要指明邮件发送者的的账号和密码(qq邮箱要使用授权码)

  3.示例代码

  

技术分享
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Net;
 5 using System.Net.Mail;
 6 using System.Security;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 
10 namespace MailTest
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             string fromMail = "2710797200@qq.com";
17             string toMail = "1370944126@qq.com";
18             MailMessage mailMessage = new MailMessage
19             {
20                 //发件人
21                 From = new MailAddress(fromMail)
22             };
23 
24             //收件人 可以添加多个收件人
25             mailMessage.To.Add(new MailAddress(toMail));
26 
27             //mailMessage.CC 获取包含此电子邮件的抄送(CC)收件人的地址集合
28             //邮件主题
29             mailMessage.SubjectEncoding=Encoding.UTF8;
30             mailMessage.Subject = "Hello";
31 
32             //邮件正文
33             mailMessage.BodyEncoding = Encoding.UTF8;
34             mailMessage.Body = "<p style=‘color:red;font-size:14px;‘>邮件测试</p>";
35             
36             //如果要发送html格式的消息,需要设置这个属性
37             mailMessage.IsBodyHtml = true;
38 
39             //邮件内容即消息正文中中显示图片 
40             //需要为图片指明src=‘cid:idname(资源id)‘
41             AlternateView htmlBody = AlternateView.CreateAlternateViewFromString("<img src=‘cid:zfp‘/>", null, "text/html");
42 
43             //然后在LinkedResource加入文件的绝对地址,和ContentType 例如image/gif,text/html...与http请求的响应报文中的ContentType一致
44             LinkedResource lr = new LinkedResource("1.gif","image/gif");
45 
46             //绑定上文中指定的idname
47             lr.ContentId = "zfp";
48 
49             //添加链接资源
50             htmlBody.LinkedResources.Add(lr);
51 
52             mailMessage.AlternateViews.Add(htmlBody);
53 
54             //发送附件 指明附件的绝对地址
55             Attachment attachment = new Attachment("1.txt");
56             mailMessage.Attachments.Add(attachment);
57 
58 
59             //创建邮件发送客户端
60             try
61             {
62                 //这里使用qq邮箱 需要在设置->账户下开启POP3/SMTP服务 和 IMAP / SMTP服务
63                 //qq邮箱的发件服务器smtp.qq.com  端口25
64                 SmtpClient sendClient = new SmtpClient("smtp.qq.com", 25)
65                 {
66                     //指定邮箱账号和密码
67                     //在第三方客户端登陆qq邮箱时,密码是授权码
68                     //登陆qq邮箱在设置->账户下可以生成授权码
69                     Credentials = new NetworkCredential(fromMail, "xmxyldrmtvnrddfe")
70                 };
71 
72                 //指定如何发送电子邮件
73                 sendClient.DeliveryMethod = SmtpDeliveryMethod.Network;
74 
75                 //指定使用使用安全套接字ssl加密的链接
76                
77                 sendClient.EnableSsl = true;
78                 sendClient.Send(mailMessage);
79             }
80             catch
81             {
82                 throw;
83             }
84            
85 
86             Console.WriteLine("ok!");
87             Console.ReadKey();
88 
89         }
90     }
91 }
View Code

  四、可能出现的异常

  1.System.Net.Mail.SmtpException:“操作已超时。”

  这个异常可能是邮件服务器的ip与端口出错

  2.System.Net.Mail.SmtpException:“参数或变量中有语法错误。服务器响应为:mail from address must be same as authorization user”

  这个异常一般是邮件发送者的账号与密码设置错误,这里再次提示一下,qq邮箱的密码需要使用授权码

 

使用.net 内置的SmtpClient来实现邮件的发送

标签:mst   generic   odi   gif   ima   author   授权   nsf   rgs   

原文地址:http://www.cnblogs.com/phasd/p/7439696.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!