文章目录
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