• Python之smtplib模块


    工作中难免会出现自动发送电子邮件的需求,比如说做完自动化测试之后通过电子邮件的形式将结果反馈出来。Python中提供了标准库smtplib来解决这一问题,该模块定义了一个smtp客户端会话对象,能够将邮件发送给smtp服务端。具体用法请查看下面例子。

    import smtplib
    from email.mime.text import MIMEText
    
    
    def send_email(from_user_name, from_address, password, to_address_list, subject, content, smtp_host):
        """
        :param from_user_name: str> 发送邮箱的用户名
        :param from_address: str> 发送邮箱地址
        :param password: str> 发送邮箱密码
        :param to_address_list: list> 接收邮箱地址
        :param subject: str> 邮件主题
        :param content: str> 邮件内容
        :param smtp_host: str> smtp服务器地址
        :return send_result: bool > 邮件是否发送成功
        """
        smtp = smtplib.SMTP(smtp_host, 465)
        smtp.starttls()
        smtp.set_debuglevel(1)
        smtp.ehlo(smtp_host)
        smtp.login(from_address, password)
        msg = MIMEText(content, _subtype='html', _charset='utf-8')
        msg['From'] = u'%s<%s>' % (from_user_name, from_address)
        msg['To'] = ",".join(to_address_list)
        msg['Subject'] = subject
    
        send_result = False
        try:
            smtp.sendmail(from_address, to_address_list, msg.as_string())
            send_result = True
        except smtplib.SMTPException as e:
            print(str(e))
            send_result = False
        finally:
            smtp.quit()
            return send_result
    
    
    if __name__ == '__main__':
        send_email(
            from_user_name='from_user_name',
            from_address='from_address@xxx.com',
            password='email_password',
            to_address_list=['a@xxx.com', 'b@xxx.com'],
            subject='test_subject',
            content='test_content',
            smtp_host='smtp.xxx.com'
        )

    该例子中定义了send_email()函数实现了连接smtp服务端、登录邮箱、发送邮件等功能。其中smtplib.SMTP(smtp_host, 465)在初始化实力时就已经进行了smtp连接,需要传入服务端的host和port,所以入参465并不是固定的,要根据服务端的端口号来改变。

    登录SMTP服务器时往往会进行身份验证,这里用到了smtp.login(from_address, password),入参是用于验证的用户名和密码。

    登录完成后,可以通过smtp.sendmail(from_address, to_address_list, msg.as_string())把邮件发送给服务端,入参是发件人地址、收件人地址及邮件内容。

    参考资料

    • https://docs.python.org/zh-cn/3.9/library/smtplib.html

    作者:酌三巡

    感谢阅读,如需转载请注明出处!

  • 相关阅读:
    Python列表操作
    Python字符串操作
    Python个人项目--豆瓣图书个性化推荐
    Python之禅及释义
    Python文件读写
    Python文件读写
    IDLE3.6.3 Mac版不支持中文输入解决办法
    Linux 下的 Docker 安装与使用
    使用 C# 编写自己的区块链挖矿算法
    在 Docker 当中搭建 docFX 站点
  • 原文地址:https://www.cnblogs.com/zhuosanxun/p/14640218.html
Copyright © 2020-2023  润新知