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 = '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

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值