zoukankan      html  css  js  c++  java
  • 45.简单邮件传输协议 SMTP

    一丶简单邮件传输协议 简单邮件传输协议 简单邮件传输协议 SMTP

    • smtplib 模块:(在 Python3版本中,可以通过 SMTP协议发送邮件的模块常为 smtplib, 并且这个模块属于内置模块,不需要额外安装,以下为该模块常用函数介绍  )
      • smtplib.SMTP(host='', port=0, local_hostname=None, [timeout,])     (实例化 SMTP对象,并可以远程 SMTP服务器进行连接;)
        • host:远程 smtp主机 地
        • port:远程 smtp主机端口。
        • local_hostname:标示本地连接用户身份
        • timeout:连接超时选项
      • smtplib.SMTP_SSL(host='',port=0,local_hostname=None,keyfile=None,certfile=None,[timeout, ]context=None,)  (用于连接需要 SSL安全加持才可以连接的MSTP服务器, 是现在比较常用的SMTP实例化连接方式 ;)
        • host:远程 smtp主机地址。
        • port:远程 smtp主机端口。
        • local_hostname:标示本地连接用户身份  。
        • keyfile、certfile:ssl连接时使用的 验证书及 私人秘钥文件。
        • timeout:连接超时选项。 
        • context:ssl连接时配置选项 ;
          • 参考 :https://docs.python.org/3.6/library/ssl.html#ssl.SSLContext 
    • SMTP实例化对象内置函数:
      • SMTP.set_debuglevel(level):
        • level设置实例的调试级别。
        • 0,不输出任何调试信息,同时,0也是默认值。
        • 1:输出每次请求的单行信息。
        • 2:最高级别调试信息输出,记录每一行发送及接收时的命令。
      • SMTP.connect(host='localhost', port=0)
        • 如果在实例化 SMTP对时候,我们并没有指出连接的主机及端口地址,那么可以在后续的示例中使用该函数进行 smtp服务器的连接  ,其中参数部分为:
        • host:smtp主机地址。
        • port:smtp主机端口,常用主机端口为 25。
          • 如果采用加密方式连接时,常端口为 465或 587
      • SMTP.helo([hostname])
        • 使用 helo指令向服务器确认身份,告知 smtp服务器连接者身份
      • SMTP.verify(address)
        • 判断 address所指向的smtp服务器是否存在 ;
        • 不过出于安全考虑,一般  smtp邮件服务器都会屏蔽这个指令。 
      • SMTP.login(user,passwd)
        • 成功连接到smtp服务器之后,可以通过该函数登录对应邮箱账号。 
        • user:对应 smtp服务器邮件登录用户名。
        • passwd:对应 smtp服务器邮件登录密码。
      • STMP.starttls(keyfiles=None,cerfile=None,context=None)
        • 启用 TLS安全传输命令,之后所有的 SMTP指令在传输的时候,都会加密传输。 
      • SMTP.sendmail(from_addr,to_addrs,msg)
        • 通过登录邮件服务器用户向目标发送。
        • from_addr:发送者邮箱
        • to_addrs:接收邮件的用户箱。
          • 这个值可以是一有效邮箱用户列表 [ ''xx1@xx.com", 'xx2@xx.com']
        • 这里需要注意的是,邮件内容有一定格式字符串 :
          'From: from@xx.com ' +                                     #其中第一行为发件人信息;

          'To: to@xx.com ' +                                          #第二行为接收邮件用户信息;

          'Subject:主题 ' +                                               #第三行为邮件主题;

          ' ' +                                                                  #第四行为与邮件内容分隔的一个' ';

          '邮件内容 '                                                               #第五行为具体邮件内容。
      • SMTP.quit()
        •  断开与  smtp主机的连接 。
    • smtplib 发送邮件(这里要看对应服务器是否支持ssl加密,不支持就用25端口)

      #发送简单的邮件.py
      import smtplib
      mail_host = 'smtp.qq.com' #qq邮箱服务器
      from_addr = "1039821294@qq.com"   #发送者用户
      from_addr_passwd = "**************"      #记住的密码并不是你的qq邮箱登录的密码,而是IMAP/SMTP服务,在第三方客户端登录时,密码框里的授权码:
      to_addrs = ["1039821294@qq.com","1039821294@qq.com"] #接受者用户
      smtp = smtplib.SMTP_SSL(mail_host,465)  #连接qq邮箱服务器,端口465
      smtp.set_debuglevel(2)
      smtp.login(from_addr, from_addr_passwd)
      content = '这是一封测试邮件!'   #这里是定义发送内容的变量
      for to_addr in to_addrs:
          msg = 'From: %s
      ' % from_addr + 
          'To: %s
      ' % to_addr + 
          'Subject: %s
      ' % '测试邮件' + 
          '
      ' + 
          '%s' % content   #记住换行要加 
          smtp.sendmail(from_addr, to_addr, msg.encode('utf-8'))  

      运行结果:

    • 通过 MIME标准定制邮件

      •  MIME(Multipurpose Internet Mail Extensions)名为多用途互联网邮件扩展类型 ,可以让 可以让 我们在使用 我们在使用 我们在使用 SMTP协议进行发送邮件时,让内容更加丰富多彩。浏览器也会根据MIME格式对应支持的内容来打开一些特殊文件 , 比如图像音频HTML文件等。 

      • 其中 MIME Type类型 定义在邮件传输时的 Content-type Herder中,常见MIME类型格式如下:
        Content-Type : type/subtype; charset='utf-8'
      • 其中 type对应的格式有如下:
        • Text:用于 标准文本信息, 文本信息可以使多种字符集或格式的。
        • Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型单独的数据
        • Application:用于传输应程序数据或者二进制。
        • Message:用于包装一个简单消息。
        • Image:用于传输静态图片资源。 
        • Audio:用于传输音频 用于传输音频
        • Video:用于传输视频资源
        • text/plain:纯文本内容
        • text/html:HTML内容
        • image/gif:GIF图像
        • image/jpeg:JPEG图像
        • mage/png:PNG图像
        • application/octet-stream:二进制数据
        • application/xhtml+xml:XHTML 文档
        • application/pdf:PDF文档
        • application/msword:Mirosoft Word文件
        • multipart/alternative:HTML邮件的 HTML形式 和纯文本形式 
        • application/x-www-form-urlencoded:使用 HTTP的 POST方法提交的表单 
    • 发送 HTML格式邮件:(常用这个)
      • 发送 HTML格式邮件时,我们需要额外导入 email.mime.text模块下的 MIMEText,该类可以为我们初始化 HTML邮件数据, 之后可以很方便的通过 smtp实例进行发送  。
      • email.mime.text.MIMEText(_text, _subtype='plain', _charset=None )
        • _text:发送邮件的 HTML内容
        • _subtype:文本类型 。
          • plain:纯文本格式 纯文本格式 纯文本格式 。
          • html:html格式
        • _charset:邮件 HTML数据编码格式 ;为了支持中文, 常为 'utf-8'。
      • #发送简单的html格式邮件.py
        import smtplib
        from email.mime.text import MIMEText
        mail_host = 'smtp.qq.com' #qq邮箱服务器
        from_addr = "1039821294@qq.com"   #发送者用户
        from_addr_passwd = "****************"      #记住的密码并不是你的qq邮箱登录的密码,而是IMAP/SMTP服务,在第三方客户端登录时,密码框里的授权码:
        to_addrs = ["1039821294@qq.com","1039821294@qq.com"] #接受者用户
        smtp = smtplib.SMTP_SSL(mail_host,465)  #连接qq邮箱服务器,端口465
        smtp.set_debuglevel(2)
        smtp.login(from_addr, from_addr_passwd)
        content = '<a href="http://www.python.org">>学习python使我快乐!<</a>'   #这里是定义发送内容的变量
        msg = MIMEText(content,'html','utf-8')  #创建 MIME格式 HTML邮件
        msg['From'] = from_addr    #邮件内容中的发送人信息
        msg['Subject'] = 'HTML邮件测试' #邮件主题
        for to_addr in to_addrs:
            msg['To'] = to_addr  #邮件内容中的接收人信息 
            smtp.sendmail(from_addr, to_addr, msg.as_string())
        

        运行结果:

      •   

         
  • 相关阅读:
    1.1.9 如何从正文开始设置页眉页脚
    1.1.8 怎样在Word的页眉中插入一级标题
    1.1.5 在同一折线图中画2条曲线
    1.1.4 图片自动编号
    1.1.3 公式编号对齐
    1.1.2 一页摘要不分栏,正文分栏
    1.1.1 参考文献格式未满行直接换行
    kernel page_size
    kernel cpu_cur_freq
    kernel printk
  • 原文地址:https://www.cnblogs.com/zhangan/p/10529516.html
Copyright © 2011-2022 走看看