使用python发送电子邮件

电子邮件在日常工作中有很大用途,凡项目或任务,有邮件来往可避免扯皮背锅。
而在一些自动化的应用场合,也使用得广泛,特别是系统监控方面,如果在资源使用达到警戒线之前自动发邮件通知运维人员,能消除隐患于前期,而不至于临时临急去做善后方案。
对于多人协合(不管是不是异地)场合,邮件也有用武之地,当有代码或文档更新时,自动发邮件通知项目成员或领导,让各方人员知晓并及时更新(是否更新,取决于人,而非工具)。

说到发邮件,不得不提用程序的方式实现。笔者之前已经开通了腾讯免费企业邮箱,并关联自己的域名,自己注册了些邮箱来测试。
本文使用python语言实现发送电子邮件。

实现

python拥有大量的库,非常方便使用,发送邮件使用了smtplib、MIMEText等,参考网上资料,实现了发送功能,源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/python3
# encoding: utf-8
# 文件名:smtp_test.py
# 基于python 3.4 发送邮件测试示例,本代码文件使用UTF-8格式
# TODO:隐藏账户信息

import os
import base64

import smtplib
import email.utils
from email.mime.text import MIMEText

# 接收邮件地址
to_email = 'latelee@163.com, li@latelee.org'
#to_email = str.splitfields(to_email, ",")

# 发送者信
# 这是真实可用的邮箱账号密码,为方便他人请勿修改谢谢
# 如果真的想要一个免费测试邮箱,发邮件到li@latelee.org谢谢
smtpserver = 'smtp.exmail.qq.com'
snd_email = 'cicd@latelee.org'
username = snd_email
password = b'1qaz@WSX'

subject = 'python email test'

def send_email(to_list, sub, content):
msg = MIMEText(content, 'html', 'utf-8')
msg['Subject'] = sub
#msg['From'] = email.utils.formataddr(('py发送者', snd_email)) # 发件人:py发送者<xxx@163.com>
msg['From'] = snd_email
msg['To'] = to_list
#msg['Date'] = formatdate(localtime=True)

try:
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
#smtp.login(username, bytes.decode(base64.b64decode(password)))
smtp.login(username, bytes.decode(password))
smtp.sendmail(snd_email, to_list, msg.as_string())
smtp.quit()
return 0
except Exception as e:
print(str(e))
return -1

# main...
if __name__ == '__main__':
if send_email(to_email, "hello", "hello world, this is a python email test") == 0:
print("send %s ok" % to_email)
else:
print("send failed")

测试

测试时将源码的to_email修改为实际邮件,直接运行:

1
python smtp_test.py

即可。

过了半年的PS:近期笔者邮箱收到了许多测试邮件,如果使用本文示例,请修改to_email为自己想接收的邮件地址,另外请勿修改snd_email邮件密码。另外,也有部分同志在测试中写了些不和谐的文字,请勿如此。
再过半年的PPS:近期经常收到测试邮件,对工作生活造成一定干扰,麻烦大家一定要修改接收邮件。否则我会修改邮件密码,本文示例无法直接使用。

李迟 2019.1.15 中午

  • 本文作者:李迟
  • 版权声明:原创文章,版权归署名作者,转载建议注明出处(当然不注明亦可)。
  • 本文链接:/cicd/send-email-using-python.html