引言
????????你是否想每天早晨一睁眼就能在微信收到今天的最新天气预报?然而,Python中的许多关于微信的第三方库都被微信禁用,根本原因是微信网页登录的禁用。
????????不过没有关系,我们可以另辟蹊径:将需要的内容以邮件的形式发送至指定QQ邮箱,然后用微信自带的“QQ邮箱提醒”功能,获取邮件。
准备
????????1、微信中启用“QQ邮箱提醒”,根据指引绑定邮箱。?微信设置QQ邮箱提醒的方法https://jingyan.baidu.com/article/1e5468f97e7474094961b7de.html
????????2、启用QQ邮箱的STMP功能(默认禁用)。进入QQ邮箱,然后点击位于顶部的【设置】按钮,选择【账户设置】,然后下拉到这个位置。开启POP3/SMTP服务,验证后会给到一个授权码,后续服务端用该授权码登录邮箱。
程序实现
1、引入必要的模块。
import smtplib #用于邮件的发信动作
from email.mime.text import MIMEText #邮件内容支持纯文本、HTML
from email.mime.image import MIMEImage #邮件内容支持图片
from email.mime.multipart import MIMEMultipart #邮件内容支持附件
from email.mime.application import MIMEApplication
from email.header import Header #用于构建邮件头
2、收发邮箱的关键信息赋值。
sender_addr = 'Ryze@qq.com' #发信邮箱
psd = '*****' #QQ邮箱授权码
receiver_addr = 'Camille@qq.com' #收信邮箱
smtp_server = 'smtp.qq.com' #发信服务器
注意:“password”并非QQ密码,而是上文提到的授权码。
3、邮箱正文。
????????邮箱正文内容不同,发送方式不同,主要分为纯文本、HTML、图片、附件等形式。
(1) 纯文本
#邮件正文,第一个参数为正文内容,第二个参数为纯文本格式,第三个参数为编码
msg = MIMEText('连你都被加强了,那我呢?', 'plain', 'utf-8')
#邮件头信息
msg['From'] = Header('符文法师') #发送者
msg['To'] = Header('青钢影') #接收者
subject = '英雄联盟设计师!' #邮件题目
msg['Subject'] = Header(subject, 'utf-8') #邮件主题
效果如下:
(2) HTML
????????与纯文笔相比,只需将邮件正文代码:
msg = MIMEText('连你都被加强了,那我呢?', 'plain', 'utf-8')
修改为:
# 正文含有超链接
html_msg = """
<p>我也曾是战斗法师...</p>
<p><a href="https://www.bilibili.com/video/BV194411i79X?spm_id_from=333.999.0.0&vd_source=75b66cf905f08cd449e94bc1ba8938d3">扣1回调超负荷护盾</a></p>
"""
msg = MIMEText(html_msg, 'html', 'utf-8') #第二个参数为HTML格式
效果如下:
?(3) 附件
????????发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后发送。
msg = MIMEMultipart() #带附件的实例
#邮件头信息
msg['From'] = Header('符文法师') #发送者
msg['To'] = Header('青钢影') #接收者
subject = '英雄联盟设计师!' #邮件题目
msg['Subject'] = Header(subject, 'utf-8') #邮件主题
# 正文含有超链接
html_msg = """
<p>我也曾是战斗法师...</p>
<p><a href="https://www.bilibili.com/video/BV194411i79X?spm_id_from=333.999.0.0&vd_source=75b66cf905f08cd449e94bc1ba8938d3">扣1回调超负荷护盾</a></p>
"""
msg.attach(MIMEText(html_msg, 'html', 'utf-8')) #邮件正文内容
#构造附件1
att1 = MIMEApplication(open('Ryze.xlsx','rb').read())
att1['Content-Type'] = 'application/octet-stream'
#filename指邮件中显示的附件名
att1.add_header('Content-Disposition', 'attachment', filename="瑞兹改动整理.xlsx")
msg.attach(att1)
#构造附件2
att2 = MIMEApplication(open('Camille.xlsx','rb').read())
att2['Content-Type'] = 'application/octet-stream'
att2.add_header('Content-Disposition', 'attachment', filename="卡蜜尔改动整理.xlsx")
msg.attach(att2)
效果如下:
?4、发送邮件。
try:
smtpobj = smtplib.SMTP_SSL(smtp_server)
# 建立连接,qq邮箱服务的端口号为465
smtpobj.connect(smtp_server, 465)
# 登录,发送者账号和口令
smtpobj.login(sender_addr, psd)
# 发送邮件
smtpobj.sendmail(sender_addr, receiver_addr, msg.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("无法发送邮件")
finally:
# 关闭服务器
smtpobj.quit()
结论
????????本篇文章介绍了使用Python发送邮件的方法,包括含附件。基于本文提到的方法,有望实现程序发送邮件自动化。
附录:完整代码
import smtplib #用于邮件的发信动作
from email.mime.text import MIMEText #邮件内容支持纯文本、HTML
from email.mime.image import MIMEImage #邮件内容支持图片
from email.mime.multipart import MIMEMultipart #邮件内容支持附件
from email.mime.application import MIMEApplication
from email.header import Header #用于构建邮件头
sender_addr = 'sender@qq.com' #发信邮箱
psd = 'xxxxxxxxxxxxxxxx' #QQ邮箱授权码
receiver_addr = 'receiver@qq.com' #收信邮箱
smtp_server = 'smtp.qq.com' #发信服务器
#邮件正文,第一个参数为正文内容,第二个参数为纯文本格式,第三个参数为编码
#msg = MIMEText('连你都被加强了,那我呢?', 'plain', 'utf-8')
msg = MIMEMultipart() #带附件的实例
html_msg = """
<p>我也曾是战斗法师...</p>
<p><a href="https://www.bilibili.com/video/BV194411i79X?spm_id_from=333.999.0.0&vd_source=75b66cf905f08cd449e94bc1ba8938d3">扣1回调超负荷护盾</a></p>
"""
#msg = MIMEText(html_msg, 'html', 'utf-8') #第二个参数为HTML格式
msg.attach(MIMEText(html_msg, 'html', 'utf-8')) #邮件正文内容
#构造附件1
att1 = MIMEApplication(open('Ryze.xlsx','rb').read())
att1['Content-Type'] = 'application/octet-stream'
#filename指邮件中显示的附件名
att1.add_header('Content-Disposition', 'attachment', filename="瑞兹改动整理.xlsx")
msg.attach(att1)
#构造附件2
att2 = MIMEApplication(open('Camille.xlsx','rb').read())
att2['Content-Type'] = 'application/octet-stream'
att2.add_header('Content-Disposition', 'attachment', filename="卡蜜尔改动整理.xlsx")
msg.attach(att2)
#邮件头信息
msg['From'] = Header('符文法师') #发送者
msg['To'] = Header('青钢影') #接收者
subject = '英雄联盟设计师!' #邮件题目
msg['Subject'] = Header(subject, 'utf-8') #邮件主题
try:
smtpobj = smtplib.SMTP_SSL(smtp_server)
# 建立连接,qq邮箱服务的端口号为465
smtpobj.connect(smtp_server, 465)
# 登录,发送者账号和口令
smtpobj.login(sender_addr, psd)
# 发送邮件
smtpobj.sendmail(sender_addr, receiver_addr, msg.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("无法发送邮件")
finally:
# 关闭服务器
smtpobj.quit()
|