参考:

​Python-100-Days/14.网络编程入门和网络应用开发.md at master · jackfrued/Python-100-Days · GitHub​

​什么是授权码,它又是如何设置?_QQ邮箱帮助中心​


一、申请授权码

每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)_发送邮件

登陆qq邮箱,设置,账户,(往下找)POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,

开启服务:POP3/SMTP服务 。手机验证后得到16位授权码,复制下来后面要用。

详情见:​​什么是授权码,它又是如何设置?_QQ邮箱帮助中心​

二、使用SMTP发送邮件

 将下面程序的发件人、收件人、等修改,修改完成后运行即可发送邮件。

from smtplib import SMTP
from email.header import Header
from email.mime.text import MIMEText


def main():
# 请自行修改下面的邮件发送者和接收者
#【发送者邮箱】
sender = 'abcdefg@126.com'
#【接受者邮箱】
receivers = ['uvwxyz@qq.com', 'uvwxyz@126.com']
#【邮件内容】
message = MIMEText('用Python发送邮件的示例代码.', 'plain', 'utf-8')
#【发件人】
message['From'] = Header('王大锤', 'utf-8')
#【收件人】
message['To'] = Header('骆昊', 'utf-8')
#【邮件主题】
message['Subject'] = Header('示例代码实验邮件', 'utf-8')
smtper = SMTP('smtp.qq.com')
#【将secretpass改成自己的16位授权码】
smtper.login(sender, 'secretpass')
smtper.sendmail(sender, receivers, message.as_string())
print('邮件发送完成!')


if __name__ == '__main__':
main()

三、在window中开启定时任务

1、Windows键+R,调出此窗口,输入compmgmt.msc

2、右键任务计划程序,选择创建基本任务。按提示填写,注意启动程序这里,程序写Python解释器路径,参数写上面的邮件脚本,起始于写脚本所在路径

每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)_数据_02

四、带附件的 邮件

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

import urllib


def main():
# 创建一个带附件的邮件消息对象
message = MIMEMultipart()

# 创建文本内容
text_content = MIMEText('附件中有本月数据请查收', 'plain', 'utf-8')
message['Subject'] = Header('本月数据', 'utf-8')
# 将文本内容添加到邮件消息对象中
message.attach(text_content)

# 读取文件并将文件作为附件添加到邮件消息对象中
with open('/Users/Hao/Desktop/hello.txt', 'rb') as f:
txt = MIMEText(f.read(), 'base64', 'utf-8')
txt['Content-Type'] = 'text/plain'
txt['Content-Disposition'] = 'attachment; filename=hello.txt'
message.attach(txt)
# 读取文件并将文件作为附件添加到邮件消息对象中
with open('/Users/Hao/Desktop/汇总数据.xlsx', 'rb') as f:
xls = MIMEText(f.read(), 'base64', 'utf-8')
xls['Content-Type'] = 'application/vnd.ms-excel'
xls['Content-Disposition'] = 'attachment; filename=month-data.xlsx'
message.attach(xls)

# 创建SMTP对象
smtper = SMTP('smtp.126.com')
# 开启安全连接
# smtper.starttls()
sender = 'abcdefg@126.com'
receivers = ['uvwxyz@qq.com']
# 登录到SMTP服务器
# 请注意此处不是使用密码而是邮件客户端授权码进行登录
# 对此有疑问的读者可以联系自己使用的邮件服务器客服
smtper.login(sender, 'secretpass')
# 发送邮件
smtper.sendmail(sender, receivers, message.as_string())
# 与邮件服务器断开连接
smtper.quit()
print('发送完成!')


if __name__ == '__main__':
main()