工作中难免会出现自动发送电子邮件的需求,比如说做完自动化测试之后通过电子邮件的形式将结果反馈出来。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://www.cnblogs.com/zhuosanxun/p/14640218.html