Python实用程序(1):发送邮件
引言
你是否想每天早晨一睁眼就能在微信收到今天的最新天气预报?然而,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):发送邮件相关推荐
- 定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱
本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下 整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据. 产品端有个自动出报告的需求,并且希 ...
- python 实现SMTP发送邮件(四)-添加附件
Python实现SMTP发送邮件(四)-添加附件 [Python] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 ...
- 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 ...
- 用python自动化定时发送邮件(普通文本,html,图片,附件等)_亲测有效
这周有需求将Bi报表每天定时,自动的群发给team成员,今天搜集资料完成了这个需求,可以发送普通文本,图片,附件已经html形式将其展现出来,整套代码如下:已亲测可行,相关信息已脱敏~ 写完脚本后登陆 ...
- Python实现自动发送邮件(详解)
Python实现自动发送邮件 1.开启SMTP服务 为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务: 这点很关键,别忘了去开启SMTP, 别忘了去开启SMTP,否则邮件是无法发送成功的 ...
- 如何用python自动发邮件_Python | 解放双手,用Python实现自动发送邮件
解放双手,用Python实现自动发送邮件 使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间. Python有两个内置库:smtplib和email,能够实现邮件功能, ...
- Python使用SMTP发送邮件
1.目标 使用SMTP发送邮件 2.系统环境 操作系统:Win7 64 Python版本:3.7.0 3.代码参考 #config:utf-8 #强制使 ...
- python smtp模块发送邮件
应用场景: 在服务器上设置的告警参数被触发后,通常是发送手机短信或者邮件通知,本例就以发送邮件为例,手机怎么收邮件呢?以qq邮箱为例,在手机端安装qq邮箱app,触发邮件后,手机也能及时查看了 代码展 ...
- python通过代理发送邮件_Python实现SMTP发送邮件详细教程
简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的 ...
最新文章
- linux的那些破事
- 开源 java CMS - FreeCMS2.8 自定义标签 channelSon
- fping的使用方法
- linux制作成后台服务,把dotnetcore 控制台app设置成linux后台服务
- 评估一个垃圾收集(GC)
- MySQL数据库主从同步的3种一致性方案实现,及优劣比较
- 中文python笔记_python 中文编码笔记
- 单链表(不带头结点)
- 本周进步要点(第3周1.9--1.15)
- 源码nginx+php
- c语言学习-猜数字游戏
- ActivityManager解析及使用
- 从古代遗传下来的设计值得一看!
- Nginx:屏蔽 IP
- Verilog中reg和wire的区别
- kubeadm reset重新初始化过程
- Python入门习题大全——检查用户名
- 线性回归和贝叶斯的线性回归
- 引导滤波GuidedFilter
- 农村电子商务专家学者以及来自全国各地的淘宝村代表将齐聚一堂