Python - 邮件发送【包括附件, 定时】

简介

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 = '[email protected]'  # 设置发件邮箱
    pwd = 'xwkmzxrubbscahh'  # 设置发件邮箱的密码,qq邮箱的授权码,等会登陆会用到
    receiver0 = '[email protected]'  # 设置邮件接收人
    receiver1 = '[email protected]'

    body = '

'+caodate+'

爬虫脚本错误日志

' #发送文件的内容 # 设置邮件正文,这里是支持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

 

 

你可能感兴趣的:(python学习,Linux)