目的:写一个可发送邮件的DLL。

原理: 

  例如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。

  原理图

  

使用的对象
      smtpClient类:允许应用程序使用简单邮件传输协议 (SMTP) 发送电子邮件。

      MailAddress类:MailAddress类表示电子邮件的地址。该类结合SmtpClient类或MailMessage类使用,其实例存储了电子邮件的地址信息。  

      MailMessage 类:MailMessage类是.NET Framework中管理邮件的专用类,表示可以使用SmtpClient类发送的电子邮件。MailMessage 类的实例表示一个电子邮件的所有内容,并用SmtpClient类来传输到SMTP服务器。若要指定电子邮件的发件人、收件人和内容,可以使用 MailMessage类的关联属性。

      NetworkCredential类:为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。

代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Mail;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace ConsoleApp1
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15. sendingMail();
  16. Console.ReadLine();
  17. }
  18. public static string sendingMail()
  19. {
  20. string smtpService = "smtp.qq.com";
  21. string sendEmail = "xxx@qq.com";
  22. string sendpwd = "*******";
  23.  
  24. //确定smtp服务器地址 实例化一个Smtp客户端
  25. SmtpClient smtpclient = new SmtpClient();
  26. smtpclient.Host = smtpService;
  27. //smtpClient.Port = "";//qq邮箱可以不用端口
  28.  
  29. //确定发件地址与收件地址
  30. MailAddress sendAddress = new MailAddress(sendEmail);
  31. MailAddress receiveAddress = new MailAddress("XXXXXX@qq.com");
  32.  
  33. //构造一个Email的Message对象 内容信息
  34. MailMessage mailMessage = new MailMessage(sendAddress, receiveAddress);
  35. mailMessage.Subject = "测试邮件" + DateTime.Now;
  36. mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
  37. mailMessage.Body = "测试邮件发送成功!!!";
  38. mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
  39.  
  40. //邮件发送方式 通过网络发送到smtp服务器
  41. smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;
  42.  
  43. //如果服务器支持安全连接,则将安全连接设为true
  44. smtpclient.EnableSsl = true;
  45. try
  46. {
  47. //是否使用默认凭据,若为false,则使用自定义的证书,就是下面的networkCredential实例对象
  48. smtpclient.UseDefaultCredentials = false;
  49.  
  50. //指定邮箱账号和密码,需要注意的是,这个密码是你在QQ邮箱设置里开启服务的时候给你的那个授权码
  51. NetworkCredential networkCredential = new NetworkCredential(sendEmail, sendpwd);
  52. smtpclient.Credentials = networkCredential;
  53.  
  54. //发送邮件
  55. smtpclient.Send(mailMessage);
  56. Console.WriteLine("发送邮件成功");
  57.  
  58. }
  59. catch (System.Net.Mail.SmtpException ex) { Console.WriteLine(ex.Message, "发送邮件出错"); }
  60. return "DLL调用成功!";
  61. }
  62. }
  63. }

遇到的问题

      1.报错:

         解决办法:将安全连接设为true,如:smtpclient.EnableSsl = true;

      2.报错:mail from address must be same as authorization user

       解决办法:QQ邮箱设置里开启服务。如图:

       

最后测试该方法成功,结果如图:

更多详尽的资料可参考这个地址:http://blog.csdn.net/liyanwwww/article/details/5507498

C#使用SmtpClient发送邮件的更多相关文章

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

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

  2. SmtpClient发送邮件时附件名称乱码

    在用户环境发现一个现象,使用System.Net.Mail.SmtpClient发送邮件,当附件名包含中文且长度较长时,最终的邮件里附件名会乱掉,写个简单的测试程序: var mail = new M ...

  3. .NET 通过SmtpClient发送邮件 提示 4.7.1 service unavailable try again later 解决办法

    最近用C#的SmtpClient发送电子邮件碰到这个错误: 正在处理错误. 服务器响应为:4.7.1 Service unavailable - try again later 换了其他的SMTP服务 ...

  4. C# 使用 SmtpClient 发送邮件注意项

    最近有邮件发送需求,使用 C#  SmtpClient 对象发送邮件 , 报异常, 如下错误代码: 调整代码顺序后,发送邮件成功! 注意:一定要先设置 EnableSsl和UseDefaultCred ...

  5. SmtpClient发送邮件

    使用第三方SMTP服务器来发送邮件.如网易: SmtpClient sc = new SmtpClient("smtp.126.com"); sc.Credentials = ne ...

  6. 记一次SmtpClient发送邮件引发的系列问题

    前提:公司同事离职,我接手同事负责的项目. 事件:某天公司的分析人员,说软件中的邮件发送功能不能使用,总是提示"邮件发送失败". 本地能够正常发送,发布WCF到服务器IIS上,再调 ...

  7. SmtpClient 发送邮件

    利用SmtpClient 代码发送邮件. 简单测试代码: static void Main(string[] args) { MailMessage msg = new MailMessage(); ...

  8. C#使用SmtpClient发送邮件解决授权码配置问题

    授权码,(新版邮箱在开启smtp权限设置时,会生成授权码)如果不做配置,客户端是不能发送邮件的 //指定邮箱账号和密码,需要注意的是,这个密码是你在QQ邮箱设置里开启服务的时候给你的那个授权码 Smt ...

  9. asp.net利用SmtpClient发送邮件

    using System; using System.Data; using System.Web.UI; using System.Data.OracleClient; using DBUtilit ...

随机推荐

  1. Magento 2数据库EAV模型结构

     EAV模型是一种数据模型 ,用于描述实体的数量预计会很大,但事实上,实体中要使用的属性数量并不多. Magento 2这么设计是为了灵活性,在不影响主干的基础上,任意新增删除属性. EAV模型(E ...

  2. CGPoint,CGSize,CGRect转NSString以及CGRect的一些便捷实用方法

    打印代码小技巧 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFr ...

  3. 006-UDP用户数据报文协议

    一.概述 用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报的传输层协议,正式规范为RFC 768. 在TCP/IP模型中 ...

  4. edraw的符号制作

    1.选中要制作的符号,在"符号"->"保存符号",这将保存为两个文件,1个是ede,另一个是png文件. 2. 3.名称,提示,随意写,只要你明白什么意思 ...

  5. css篇-less,scss 用calc问题

    在less或者scss中 calc(100% -4rem) 等带单位混合运算会被less解析忽略单位,全部按照百分比计算,此例中的计算被less编译成calc(96%), 解决办法: width:(& ...

  6. vue中$set的用法

    数组: this.$set(Array,index, newValue) 对象: this.$set(Object, key, value)

  7. C++读取dll文件所在目录

    ////保证config.txt从本DLL目录位置读取 //获取DLL自身所在路径(此处包括DLL文件名) }; GetModuleFileNameA((HINSTANCE)&__ImageB ...

  8. Centos7安装Openvpn

    前言 搭建openvpn主要参考这篇博客,原文传送: http://www.jianshu.com/p/4bbf946222d5 所以你会发现步骤基本一样. 安装openvpn A:安装EPEL仓库 ...

  9. IOP知识点(3)-Modal.show

    1.position 模态框初始位置.可设为字符串 "左位置 上位置" 或数组 [左位置, 上位置],规则如下: 左位置 可设为 left|center|right 三者之一,上位 ...

  10. Pro*C介绍

    内嵌SQL 概要 Pro*C语法 SQL 预处理指令 语句标号 宿主变量 基础 指针 结构 数组 指示器变量 数据类型同等化 动态SQL 事务 错误处理 SQLCA WHENEVER语句 Demo程序 ...