zoukankan      html  css  js  c++  java
  • python关于邮件发送包smtplib的实践分享

      最近在编写接口自动化测试平台,其中用到了自动发送邮件的功能,查询相关资料,最成熟、使用量最大的还是smtplib库,调试过程中也遇到了一些坑,现在做些简单整理:
      调试的邮件发送功能基于SMTP(Simple Mail Transfer Protocol,SMTP)协议,用SMTP把电子邮件从一台主机传送到另一台主机,发电子邮件时,必须要连接到一个外部SMTP服务器,此时邮件程序是一个SMTP客户端。而SMTP服务器也因此成为消息的第一站。

      smtplib模块和需要实例话的smtplib.SMTP类,整个传输过程:

    1. 连接到服务器
    2. 登录
    3. 发送服务请求
    4. 退出

      登录是可选的,只有在服务器启用了SMTP身份验证(SMTP-AUTH)时才需要登录。SMTP通信时需要一个端口,默认端口号是25(另外的SMTP_SLL类,作用类似SMTP,默认端口号是465)。该类中核心方法只需要两个sendmail()和quit()。下表列出了SMTP对象常用的方法:

    方法 描述
    sendmail() 将msg从from发送至to,还可以选择性地设置ESMTP邮件(mopts)和收件人(ropts)选项
    ehlo()或者helo() 使用EHLO或HELO初始化SMTP或ESMTP服务器的会话。这是可选的,因为sendmail()会在需要时自动调用相关内容
    starttls() 让服务器启用TLS模式。如果给定参数,则用它们来创建安全socket
    set_debuglevel() 为服务器通信设置调试级别
    quit() 关闭连接,并退出
    login() 使用用户名和密码登录SMTP服务器

    一个小demo:

     1 import smtplib
     2 
     3 # 连接服务器
     4 conn = smtplib.SMTP("smtp.qq.com", 25)
     5 # 登录邮箱
     6 conn.login("xxxx@qq.com", "qq邮箱授权码")
     7 # 发送邮件
     8 conn.sendmail("from发件人邮箱", “to收件人邮箱”, “内容”)
     9 # 退出邮箱
    10 conn.quit()

    以上能实现调通邮箱,但是收到的邮件内容展示为空,因为没有设置邮件主题,内容,附件等信息,这个时候就要用到另一个模块来处理邮件信息了,即email。

    关于email包,可自行百度,以下是调试demo:

    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.header import Header
    
    # **************邮箱配置信息*****************
    fromAddr = "发件人邮箱地址"
    fromPWD = "发件人邮箱密码"
    toAddr = "收件人邮箱地址"
    emailMsg = "邮件文本内容"
    
    # 1. 连接邮箱服务器
    con = smtplib.SMTP_SSL('smtp.qq.com', 465)
    # 登录邮箱
    con.login(fromAddr, fromPWD)
    
    # 2. 准备数据
    # 创建邮件对象
    msg = MIMEMultipart()
    # 设置邮件主题
    subject = Header('邮件主题', 'utf-8').encode()
    msg['Subject'] = subject
    # 设置邮件发送者
    msg['From'] = fromAddr
    # 设置邮件接受者
    msg['To'] = toAddr
    # 添加文字内容
    text = MIMEText(emailMsg, 'plain', 'utf-8')
    msg.attach(text)
    
    3.发送邮件
    con.sendmail(fromAddr, toAddr, msg.as_string())
    
    4.退出登录,断开连接
    con.quit()

    有些邮箱可能有除了账号密码外的其他验证信息,比如QQ邮箱需要验证授权码,密码处改为授权码即可;还有确保邮箱开启了smtp服务,一般在邮箱设置中开启。

    以上内容供参考。

     

  • 相关阅读:
    内存条的物理结构分析【转载】
    JDK动态代理[2]----动态代理设计模式(文章转载于别处)
    shell 计算
    如何使用Vagrant创建linux环境(MacOS版)
    JavaFreemarker01快速上手
    7、验证信息
    6、更新文档
    5、删除文档
    4、查询文档02
    3、查询文档01
  • 原文地址:https://www.cnblogs.com/marvintester/p/14460550.html
Copyright © 2011-2022 走看看