0%

使用python发送邮件

由于之前写了一个误差计算脚本,采用了万能的nohup python calc_error.py >logs &实现了后台运行,但是在实际使用过程中,经常会遇到异常或者一些奇奇怪怪的问题,自己每次上线检查也麻烦,遂思考能不能用邮件来解决问题.

我参考这篇文章,学习一下使用python发送邮件

所用到的库

我们分为两部,一方面是写邮件的过程,需要特定的邮件头和附件,这一部分使用的是email模块进行

我在使用pip install email的时候一直出错,但是到pip install emails就可以,目前不确定两者关系,但是都可以使用import email调用

而编写完邮件后,对于邮件的发送则是通过smtp服务进行,这一部分则是用smtplib实现,而其安装可以用pip install aiosmtplib进行

配置smtp

我计划使用Gmail对这些邮件进行配置,为此,我打开了Gmail中的imappop3服务,关于Gmail更多信息如下,摘自于此

内容 配置
接收邮件 (IMAP) 服务器 imap.gmail.com 要求 SSL:是 端口:993
发送邮件 (SMTP) 服务器 smtp.gmail.com 要求 SSL:是 要求 TLS:是(如适用) 使用身份验证:是 SSL 端口:465 TLS/STARTTLS 端口:587
完整名称或显示名称 您的姓名
帐号名、用户名或电子邮件地址 您的完整电子邮件地址
密码 您的 Gmail 密码

尝试发送邮件

下面代码展示发送测试邮件过程

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
import smtplib
from email.mime.text import MIMEText

mail_host=''
mail_user=''
mail_pass=''
sender=''
receivers=['']#可以群发

#设置邮件信息
message=MIMEText('content','plain','utf-8')
message['Subject']="Test email"
message['From']=sender
message['To']=receivers[0]

try:
# smtpobj=smtplib.SMTP()
# smtpobj.connect(mail_host,25)#这是无需ssl验证的情况
smtpobj=smtplib.SMTP_SSL(mail_host)#这是需要ssl验证的情况
smtpobj.login(mail_user,mail_pass)
smtpobj.sendmail(sender,receivers,message.as_string())
smtpobj.quit()
print('Success')
except smtplib.SMTPException as e:
print('error',e)

这个代码确实可以发送邮件,测试完成

添加附件

我们可以利用MIMENonMultipart中的MIMEText类来发送我们得到的csv文件

可以参考这篇文章

更多

自然,我们可以实现更多内容(比如HTML等),但是我目前不需要,就先留在这里,可能未来还会更新