标签: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 }
四、可能出现的异常
1.System.Net.Mail.SmtpException:“操作已超时。”
这个异常可能是邮件服务器的ip与端口出错
2.System.Net.Mail.SmtpException:“参数或变量中有语法错误。服务器响应为:mail from address must be same as authorization user”
这个异常一般是邮件发送者的账号与密码设置错误,这里再次提示一下,qq邮箱的密码需要使用授权码
标签:mst generic odi gif ima author 授权 nsf rgs
原文地址:http://www.cnblogs.com/phasd/p/7439696.html