用python定时发送邮件,包括附件

python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。

smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。

email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

下面是代码

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 = '99276@qq.com'  # 设置发件邮箱,一定要自己注册的邮箱

    pwd = 'xwkmzxrubbscahh'  # 设置发件邮箱的密码,qq邮箱的授权码,等会登陆会用到

    receiver0 = 'lunsen@tbmao.com'  # 设置邮件接收人,可以是扣扣邮箱

    receiver1 = '1879230382@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/python3 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

 

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值