简介
python发邮件需要两个模块,smtplib和email,都是Python自带库。
smtplib 模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
email 模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
具体操作
demo代码
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
ISOTIMEFORMAT='%Y%m%d'
def sentemail():
caodate=str(time.strftime(ISOTIMEFORMAT, time.localtime()))
host = 'smtp.qq.com' # 设置发件服务器地址
port = 465 # 设置发件服务器端口号。注意,这里有SSL和非SSL两种形式
sender = '66666@qq.com' # 设置发件邮箱
pwd = 'xwkmzxrubbscahh' # 设置发件邮箱的密码,qq邮箱的授权码,等会登陆会用到
receiver0 = '88888@tbmao.com' # 设置邮件接收人
receiver1 = '123456789@qq.com'
body = '<h1>'+caodate+'</h1><p>爬虫脚本错误日志</p>' #发送文件的内容
# 设置邮件正文,这里是支持HTML的
msg = MIMEText(body, 'html') # 设置正文为符合邮件格式的HTML内容
message = MIMEMultipart()
message['subject'] = caodate + '爬虫脚本错误日志' # 设置邮件标题
message['from'] = sender # 设置发送人
message['to'] = receiver0 # 设置接收人
message.attach(msg)
filename='数据采集.csv' # 构造附件1,传送当前目录下的 filename 文件
att1 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream' # 注意这里是个坑,之前没有这样写的话发送文件就会变成bin格式的
att1.add_header('Content-Disposition', 'attachment', filename='数据采集.csv')
# att1["Content-Disposition"] = 'attachment; filename="'+filename+'"' # bin格式
message.attach(att1)
try:
s = smtplib.SMTP_SSL(host, port) # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL
s.login(sender, pwd) # 登陆邮箱
s.sendmail(sender, receiver0, message.as_string())# 发送邮件!
print ('邮件发送成功')
except smtplib.SMTPException as e:
print(e)
print ('邮件发送失败')
if __name__ == '__main__':
sentemail()
设置定时可以用crontab
定时命令:
04 * * * * root /root/personFile/jason/email.sh # 命令说明,每小时的04分发送一次邮件
其中email.sh的内容如下:
#!/usr/bin/sh
cd /root/personFile/jason/ && /usr/local/bin/python email.py
下面是crontab部分使用语法,更详细的可查阅其他资料
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
或者windows定时使用可看这篇文章配置:https://blog.csdn.net/weixin_42277380/article/details/104042405