3. 技术专题 - 邮件收发

  • 协议
    • smtp
      • 用于邮件的协议,用于客户端与服务器之间,也用于服务器与服务器之间
      • SMTP(Simple Mail Transfer Protocol)简易邮件传输通讯协议 SMTP是互联网上的一种通讯协议,主要功能是用在传送电子邮件,当我们通过电子邮件程序,寄E-mil给另外一个人时,必须通过SMTP通讯协议,将邮件送到对方的邮件服务器上,等到对方上网的时候,就可以收到你所寄的信。
      • 它也是用来传送网络上的电子邮件,不同的是POP是负责邮件程序和邮件服务器收信的通讯协定,SMTP则是负责邮件服务器与邮件服务器之间的寄信的通讯协定。
      • 大多数SMTP服务器也是免费的,也就是说,不管你有无E-mail信箱,只要想寄信,随便填上一个SMTP服务器,就可以寄信了。如果你用Outlook Express或者其它邮件程序发信,又同时拥有多个免费邮箱,不必设置多个SMTP服务器,只要选择一个填上就行了,比如新浪邮件提供的服务器就是:smtp.sina.com.cn。
      • 一般端口:25,ssl端口:465(SSL/TLS,内容一开始就被保护起来了 是看不到原文的)/994/587(STARTTLS协议,在STARTTLS命令执行后才对之后的原文进行保护的)。
      • 分为smtp client和smtp server
      • ssl/tls加密防伪
        • 注意协议版本,现在很多smtp server要求tls1.2甚至以上的版本,版本不对会导致认证或握手失败等错误。
        • smtp client所在的机器上需要已经安装了smtp server的服务器证书所对应的根证书,才能让smtp client完成握手过程,否则会报证书错误等错误。
      • 认证
        • 正常情况下,登陆认证后的有效账号才能发邮件,而且只能以自己的名义发邮件(否则以别人的名义发邮件,甚至匿名以任何人的名义发邮件,那太危险了),也就是说发出的邮件的from只能是自己这个账号对应的邮箱地址。
      • c#使用SmtpClient发送邮件
        • MailAddress类
          • MailAddress类表示电子邮件的地址。该类结合SmtpClient类或MailMessage类使用,其实例存储了电子邮件的地址信息。
        • MailMessage类
          • MailMessage类是.NET Framework中管理邮件的专用类,表示可以使用SmtpClient类发送的电子邮件。
          • MailMessage 类的实例表示一个电子邮件的所有内容,并用SmtpClient类来传输到SMTP服务器。若要指定电子邮件的发件人、收件人和内容,可以使用 MailMessage类的关联属性。
            • Subject
            • SubjectEncoding
            • Body
            • BodyEncoding
        • SmtpClient类
          • 允许应用程序使用简单邮件传输协议 (SMTP) 发送电子邮件。
          • Send()
          • Host
          • Port
          • EnableSsl
            • 此时可以不设Port?
            • 一般port为465,但也可以仍为25(如果server支持StartTls)
            • 如果smtp server要求tls1.2以上的版本,那么代码中不设置协议版本的话会报错
              • .net framework 4.5以上的版本,有现成的Tls12枚举值
                • 为当前的环境追加支持的协议(使用|位操作符来追加某个协议选项):ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12;
              • .net framework 4.5以下的版本,没有现成的Tls12枚举值
                • 为当前的环境追加支持的协议(使用|位操作符来追加某个协议选项,由于.net framework 4.5以下的SecurityProtocolType枚举只有tls和ssl3两个选项,没有具体版本可以直接用,所以可以直接用该标志位为1的数字来转换): ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | (SecurityProtocolType) 3072;
          • UseDefaultCredentials
            • 如果为true,将使用web.config中的smtp配置中的credentials
            • 如果为false,将使用后面设置的Credentials字段
              • 必须先设为false,再设置Credentials?debug时,如果在watch中改为false,那么Credentials会变成null,需要重新初始化。
          • Credentials
            • 可以设置多种Credentials实现类
            • 要结合UseDefaultCredentials=false一起使用
            • NetworkCredential类
              • 为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。
              • UserName
                • 是账号
                • 邮箱可以吗?
                • 可以不加域前缀
                  • 是因为在初始化时传入了domain吗?不传的话是不是就要加了?
              • Password
              • Domain
                • .net 2.0的web.config中好像不能设置domain,没有这个属性,运行时会报错,那只能在代码里设置credentials时同时设一下domain了?
          • DeliveryMethod邮件发送方式
            • Network:(默认)
              • 邮件通过网络发送到SMTP服务器.
            • PickupDirectoryFromIis:
              • 邮件将复制到Internet信息服务(IIS)的邮件默认目录中.
            • SpecifiedPickupDirectory:
              • 邮件将复制到属性PickupDirectoryLocation指定的目录中.
        • SmtpException
          • SmtpFailedRecipientException
            • SmtpFailedRecipientsException
          • Mailbox unavailable. The server response was: 5.7.60 SMTP; Client does not have permissions to send
            • 因为登录smtp server的账号和想要发的邮件的from不一致,服务端做了检查,不让以别人的名义发邮件
    • pop3
      • 用于邮件的协议
      • POP(Post Office Protocol)邮局通讯协定POP是互联网上的一种通讯协定,主要功能是用在传送电子邮件,当我们寄信给另外一个人时,对方当时多半不会在线上,所以邮件服务器必须为收信者保存这封信,直到收信者来检查这封信件。当收信人收信的时候,必须通过POP通讯协定,才能取得邮件。
      • POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(默认端口是110)。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
      • 单向通信。POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
      • 一般端口:110,ssl端口:995
    • imap
      • 用于邮件的协议
      • IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。
      • IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。
      • 双向通信。IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
      • 一般端口:143,ssl端口:993

posted on 2021-06-23 11:15  碎羽love星谊  阅读(365)  评论(0编辑  收藏  举报

导航