引言

你是否想每天早晨一睁眼就能在微信收到今天的最新天气预报?然而,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邮箱服务的端口号为465smtpobj.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邮箱服务的端口号为465smtpobj.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实用程序(1):发送邮件相关推荐

  1. 定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱

    本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下 整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据. 产品端有个自动出报告的需求,并且希 ...

  2. python 实现SMTP发送邮件(四)-添加附件

    Python实现SMTP发送邮件(四)-添加附件 [Python]  纯文本查看  复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 ...

  3. python smtplib.SMTP()发送邮件报“UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xba in position 0: i

    python smtplib.SMTP()发送邮件报"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xba in position ...

  4. 用python自动化定时发送邮件(普通文本,html,图片,附件等)_亲测有效

    这周有需求将Bi报表每天定时,自动的群发给team成员,今天搜集资料完成了这个需求,可以发送普通文本,图片,附件已经html形式将其展现出来,整套代码如下:已亲测可行,相关信息已脱敏~ 写完脚本后登陆 ...

  5. Python实现自动发送邮件(详解)

    Python实现自动发送邮件 1.开启SMTP服务 为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务: 这点很关键,别忘了去开启SMTP, 别忘了去开启SMTP,否则邮件是无法发送成功的 ...

  6. 如何用python自动发邮件_Python | 解放双手,用Python实现自动发送邮件

    解放双手,用Python实现自动发送邮件 使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间. Python有两个内置库:smtplib和email,能够实现邮件功能, ...

  7. Python使用SMTP发送邮件

    1.目标 使用SMTP发送邮件 2.系统环境 操作系统:Win7 64 Python版本:3.7.0 3.代码参考 #config:utf-8                         #强制使 ...

  8. python smtp模块发送邮件

    应用场景: 在服务器上设置的告警参数被触发后,通常是发送手机短信或者邮件通知,本例就以发送邮件为例,手机怎么收邮件呢?以qq邮箱为例,在手机端安装qq邮箱app,触发邮件后,手机也能及时查看了 代码展 ...

  9. python通过代理发送邮件_Python实现SMTP发送邮件详细教程

    简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的 ...

最新文章

  1. Tengine高性能部署之—日志分割
  2. SQLServer数据库的表管理
  3. ListView中含有EditText时候--要命的焦点问题迎刃而解
  4. dojo中的dojo/dom-attr
  5. 软件工程心理学之9----乙方如何面对甲方2
  6. java开源对象池_JAVA 对象池
  7. @value 注入静态属性_TP6依赖注入是如何实现的
  8. MySql使用TEXT/BLOB类型的几点注意
  9. salesforce 零基础学习(三十四)动态的Custom Label
  10. JS之Date对象和获取系统当前时间
  11. Thymeleaf 的使用
  12. linux下编译C++文件基本命令
  13. Android Glide加载本地gif动态图
  14. C++学习第九课--类的成员函数、对象复制与私有成员笔记
  15. SwiftUI 如何同时处理2个手势SimultaneousGesture(教程含代码)
  16. 抓包PC微信小程序失败解决方法
  17. A performance evaluation of local descriptors——局部描述子评估译文(1,2,...)
  18. 我的组会内容分享(部分)CDR+CTLE+DFE
  19. 高性能MySQL(InnoDB)
  20. 给表空间增加新的数据文件

热门文章

  1. 10个中文成语,10种Python新手错误
  2. 飞信,原来就是这么简单
  3. 站立会议:猪与鸡的故事
  4. gradle-7.1.1-all 百度网盘下载
  5. 程序设计思维(CSP模拟题)B - HRZ 学英语
  6. 用AsFTools切割合并ASF和WMV媒体文件
  7. java开发有不加班的吗_千万不要相信程序员在加班时间写的代码!
  8. 3D点云深度学习PointNet源码解析——conv2D,fc,max_pooling
  9. 单词记了又忘怎么办?6大方法教你高效背英语单词
  10. 华为AR系列路由器web配置端口映射实现内网服务器对外开放