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

  1. import smtplib
  2. from email.mime.text import MIMEText
  3.  
  4. def send_email(from_user_name, from_address, password, to_address_list, subject, content, smtp_host):
  5. """
  6. :param from_user_name: str> 发送邮箱的用户名
  7. :param from_address: str> 发送邮箱地址
  8. :param password: str> 发送邮箱密码
  9. :param to_address_list: list> 接收邮箱地址
  10. :param subject: str> 邮件主题
  11. :param content: str> 邮件内容
  12. :param smtp_host: str> smtp服务器地址
  13. :return send_result: bool > 邮件是否发送成功
  14. """
  15. smtp = smtplib.SMTP(smtp_host, 465)
  16. smtp.starttls()
  17. smtp.set_debuglevel(1)
  18. smtp.ehlo(smtp_host)
  19. smtp.login(from_address, password)
  20. msg = MIMEText(content, _subtype='html', _charset='utf-8')
  21. msg['From'] = u'%s<%s>' % (from_user_name, from_address)
  22. msg['To'] = ",".join(to_address_list)
  23. msg['Subject'] = subject
  24.  
  25. send_result = False
  26. try:
  27. smtp.sendmail(from_address, to_address_list, msg.as_string())
  28. send_result = True
  29. except smtplib.SMTPException as e:
  30. print(str(e))
  31. send_result = False
  32. finally:
  33. smtp.quit()
  34. return send_result
  35.  
  36. if __name__ == '__main__':
  37. send_email(
  38. from_user_name='from_user_name',
  39. from_address='from_address@xxx.com',
  40. password='email_password',
  41. to_address_list=['a@xxx.com', 'b@xxx.com'],
  42. subject='test_subject',
  43. content='test_content',
  44. smtp_host='smtp.xxx.com'
  45. )

该例子中定义了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之smtplib模块的更多相关文章

  1. python之smtplib模块 发送邮件

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #smtplib模块 发送邮件 import smtplib from email.mime.text imp ...

  2. python爬虫-smtplib模块发送邮件

    1.代码如下: import smtplib from email.message from EmailMessage # smtplib模块负责发送邮件服务 # email.message模块负责构 ...

  3. python调用smtplib模块发送邮件

    #!/usr/bin/env python #coding: utf-8 import smtplib from email.mime.text import MIMEText from email. ...

  4. 通过python操作smtplib模块发送邮件

    # gconf.py SMTP_SERVER_HOST='smtp.exmail.qq.com' SMTP_SERVER_PORT=25 SMTP_USER='jack@qq.com' # 邮箱客户端 ...

  5. web端自动化——Python的smtplib发送电子邮件

    SMTP (Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. Python的smtplib模块提 ...

  6. python:利用smtplib模块发送邮件

    自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用例后,将测试报告(HTML.截图.附件)通过邮件方式发送. 参考代码:send_mail.py 一.python对 ...

  7. python:利用smtplib模块发送邮件详解

    自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用例后,将测试报告(HTML.截图.附件)通过邮件方式发送. 首先我们要做: 进入163邮箱,点击设置中的pop3/ ...

  8. 3.python 发送邮件之smtplib模块

    SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址的邮件传输规则. python中对SMTP进行了简单的封装,可以发送纯文本邮件, ...

  9. Python通过yagmail和smtplib模块发送简单邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件.python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是pytho ...

随机推荐

  1. python中的生成器,迭代器及列表生成式

    列表生成器:  即List Comprehensions. 在python中,可通过内置的强大有简单的生成式来创建列表.例如创建一个1到10的列表list [1, 2, 3, 4, 5, 6, 7, ...

  2. 解决org.hibernate.LazyInitializationException的正确姿势

    项目运行过程中,一个报错信息,报错信息如下: org.hibernate.LazyInitializationException: could not initialize proxy [xxx.do ...

  3. K-Fold 交叉验证

    转载--原文地址 www.likecs.com 1.K-Fold 交叉验证概念 在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集.测试集是与训练独立的数据,完全不参与训练,用于最终模型的 ...

  4. AJAX的学习与使用>前端技术系列

    目录 AJAX的学习与使用 什么是AJAX 为什么要使用AJAX AJAX接收服务器响应数据的3种格式 文本格式(重要) JSON格式(重要) 服务器端响应实体类JSON格式的3种方式 修改实体类的t ...

  5. (11)MySQL进阶篇SQL优化(InnoDB锁问题排查与解决)

    1.概述 前面章节之所以介绍那么多锁的知识点和示例,其实最终目的就是为了排查与解决死锁的问题,下面我们把之前学过锁知识重温与补充一遍,然后再通过例子演示下如果排查与解决死锁. 2.前期准备 ●数据库事 ...

  6. Windows协议 Kerberos篇

    认证流程 角色 功能 Domain Controller 也就是域控 Key Distribution Center 秘钥分发中心,简称KDC,默认安装在域控里,包括AS.AD和TGS. Accoun ...

  7. 开源爆款,阿里P7Android技术笔记,理论与实战齐飞,限时开放下载!

    自我介绍 2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在. 被人面试过,也面试过很多人.深知大多数初中级Android工程师,想要 ...

  8. 线程创建的三种方法:继承Thread类,实现Runnable接口,实现Callable接口

    线程创建 三种创建方式 1. 继承Thread类 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用start()方法启动线程 线程不一定执行,CPU按排调度 pa ...

  9. CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003

    Title/ CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003 序 : 写完这篇文章后,我准备一直做下去了,包括flight的各个分区,也看到前方的路. ...

  10. XV6学习笔记(1) : 启动与加载

    XV6学习笔记(1) 1. 启动与加载 首先我们先来分析pc的启动.其实这个都是老生常谈了,但是还是很重要的(也不知道面试官考不考这玩意), 1. 启动的第一件事-bios 首先启动的第一件事就是运行 ...