• 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服务,一般在邮箱设置中开启。

    以上内容供参考。

     

  • 相关阅读:
    史记 · 码农列传
    死侍在新片中,扮演了一个 AI 驱动的 NPC
    什么是高中物理?一篇长长长长文告诉你!
    你管这玩意叫网络?
    你管这破玩意叫计算机?
    try-catch-finally中的4个巨坑,老程序员也搞不定!
    未来几年,软件测试九大新兴趋势
    代码中大量的if/else,你有什么优化方案?
    PHP部署服务端常见问题整理
    PHP服务端环境搭建
  • 原文地址:https://www.cnblogs.com/marvintester/p/14460550.html
Copyright © 2020-2023  润新知