python自动发送邮件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xjh163/article/details/95867388

1.发送文字内容+附件

首先,我们要知道自己发送邮件需要的步骤:
选择邮箱—>登录邮箱(用户名、密码)—>发件人(默认为自己)—>收件人—>主题—>正文—>附件—>发送
python发邮件的步骤与其类似,主要是模仿这一系列动作。

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

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

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

简单来说,smtplib负责登陆邮箱,emali负责构造邮件

import smtplib    
from email.mime.multipart import MIMEMultipart    
from email.mime.text import MIMEText    
from email.mime.image import MIMEImage 
from email.header import Header   


##设置smtplib所需的参数
#下面的发件人,收件人是用于邮件传输的
smtpserver = 'smtp.qq.com'    #指定发送邮箱的格式smtp.163.com   smtp.qq.com  使用的邮箱的smtp服务器地址,这里是qq的smtp地址,其他同理
username = '******@qq.com'#发件人用户名
password='******'#发件人授权码,注意对于网页版邮箱,需要的不是密码,而是授权码,授权码要合着写在一起,中间不能有空格
sender='******@qq.com'#发件人,即发件人用户名
receiver='***@163.com'#接收人
#receiver=['******@126.com','******@126.com'] 收件人为多个收件人,用列表表示

#构造邮件主题
subject = 'Python email test,邮件主题'#邮件主题为中英文均可

##构造邮件对象MIMEMultipart对象,用于写邮件的即显示出来的邮件
#下面的主题,发件人,收件人,日期是显示在邮件页面上的
msg = MIMEMultipart('mixed') 
msg['Subject'] = subject  #这里的subject即为上面构造的邮件主题
msg['From'] = '******@qq.com <******@qq.com>' #邮件发件人
msg['To'] = '******@163.com' #邮件收件人
#msg['To'] = ";".join(receiver) #收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
#msg['Date']='2012-3-16'

#构造正文内容
text = "这是你要的需求,具体见附件,Have  a good time"    
text_plain = MIMEText(text,'plain', 'utf-8') #邮件发送程序为了防止有些邮件阅读软件不能显示处理HTML格式的数据,通常都会用两类型分别为"text/plain"和"text/html"。构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后一定要用utf-8编码保证多语言兼容性。


#构造附件
sendfile=open(r'C:\\Users\\431&1301197.xlsx','rb').read() #打开附件内容(路径名\\文件名.文件类型 )   
text_att = MIMEText(sendfile, 'base64', 'utf-8') 
text_att["Content-Type"] = 'application/octet-stream' 
#text_att.add_header('Content-Disposition', 'attachment', filename='aa需求.txt')#设置附件名字,中英文
均可
msg.attach(text_att)   

#发送邮件
try:
smtp = smtplib.SMTP()    #实例
smtp.connect('smtp.qq.com')
#我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。
#smtp.set_debuglevel(1)  
smtp.login(username, password)    
smtp.sendmail(sender, receiver, msg.as_string())    
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")

2.定时发送邮件

我们需要安装schedule这个第三方包,anaconda中没有预装,如果是想用jupyter notebook中安装,代码如下:

! pip install schedule

我们用一个小函数举例

import schedule
import time

def job():#定义一个叫job的函数,函数的功能是打印'I'm working...'
    print("I'm working...")

    schedule.every(10).minutes.do(job)       #部署每10分钟执行一次job()函数的任务
    schedule.every().hour.do(job)            #部署每×小时执行一次job()函数的任务
    schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
    schedule.every().monday.do(job)          #部署每个星期一执行job()函数的任务
    schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务

while True:
    schedule.run_pending()
    time.sleep(1)    

#13-15都是检查部署的情况,如果任务准备就绪,就开始执行任务。   

第1行和第2行,是引入schedule和time。

第5行和第6行,是定义了一个叫job()的函数,调用这个函数时,函数会打印I’m working…。

第9行-13行都是相关的时间设置,你可以根据自己的需要来确定。

第15-17行是一个while循环,是去检查上面的任务部署情况,如果任务已经准备就绪,就去启动执行。其中,第15行的time.sleep(1)是让程序按秒来检查,如果检查太快,会浪费计算机的资源。

参考链接:
https://www.cnblogs.com/yufeihlf/p/5726619.html
https://www.runoob.com/python/python-email.html
https://blog.csdn.net/mymatin1004/article/details/82698422
https://blog.csdn.net/WxyangID/article/details/80633534
https://blog.csdn.net/u012209894/article/details/78414638
https://www.cnblogs.com/mylearning-log/p/10840421.html

猜你喜欢

转载自blog.csdn.net/xjh163/article/details/95867388