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

    以上内容供参考。

     

  • 相关阅读:
    TensorFlow 基础 (04)
    面向对象编程思想的介绍
    B2B、B2C、C2C、O2O的概念
    为什么我们需要域
    如何在阿里云服务器上搭建wordpress个人网站
    Ghost手动备份、还原系统详细图文教程
    IE浏览器下载文件保存时提示:“你没有权限在此位置中保存文件”解决办法
    电脑经常自动重启的一些解决办法
    ERP系统到底能做什么?
    SQL实用技巧:如何分割字符串
  • 原文地址:https://www.cnblogs.com/marvintester/p/14460550.html
Copyright © 2011-2022 走看看