python自动化办公
本节目标:python调用QQ邮箱API发送邮件。
本节内容:自动化定时发送邮件 本节技术点:smtplib,datetime
本节阅读需要(15)min。 本节实操需要(20)min。
文章目录
前言
- python自动化办公
- 前言
- 一、开启smtp服务
- 二、使用smtplib发送邮件
- smtplib简介
- 第一封邮件
- 总结
大规模批量化的发送邮件一直是自动化办公的一个重要内容。升职加薪。冲冲冲!!!! 另外datetime库也是一个必须掌握的库。详细内容见
一、开启smtp服务打开邮箱服务器。设置-》账户 找到这个然后开启。
需要短信验证,证明安全性。
然后会得到授权码,自己截图保存。
二、使用smtplib发送邮件
smtplib简介
# smtplib 用于邮件的发信动作
import smtplib
from email.mime.text import MIMEText
# email 用于构建邮件内容
from email.header import Header
# 用于构建邮件头
# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = 'xxx@qq.com'
# 收信方邮箱
to_addr = 'xxx@qq.com'
# 发信服务器
smtp_server = 'smtp.qq.com' # QQ固定是这个
# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
msg = MIMEText('send by python','plain','utf-8')
# 邮件头信息
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')
# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL(smtp_server) # 实例化一个加密服务器
server.connect(smtp_server,465) # 启动加密端口,QQ加密的固定是这个
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()
第一封邮件
上面的模板测试了非常的好用。 只要不是填写垃圾信息,应该都是能收到的。
授权码不是密码,是截图保存的16位字符串。
其实按照上文是可以直接发一个标题,内容都很简单的邮件的。
但是我们发邮件一般需要有一个格式,不是一句话,而且需要附带图片或者附件。
所以我们在内容上还需要一些改进。我们要用到MIMEText之类的工具
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一
上代码!!!
from datetime import date,datetime
from fileinput import filename
import smtplib
# email 用于构建邮件内容
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from datetime import datetime
# 用于构建邮件头
# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = 'xxxxxxx@qq.com'
shouquanma = 'xxxxxxxxx'
# 收信方邮箱
to_addr = 'xxxxxxxxx@outlook.com'
# 发信服务器
smtp_server = 'smtp.qq.com'
# 创建一个可以同时添加正文和附件的msg
msg1=MIMEMultipart()
# 添加正文, 是空格
mail_msg='''
  亲爱的老铁
睡什么睡,起来嗨
'''
#如果仅添加正文可以用此公式:msg=MIMEText(mail_msg,'html','utf-8')#表示添加正文内容
msg1.attach(MIMEText(mail_msg,'html','utf-8'))
# 添加附件,本质上是通过SMTP报文协议传送流文件
rarFilePath = '发送.txt'
att1=MIMEText(open(rarFilePath,'rb').read(),'base64','utf-8')#添加附件,由于定义了中文编码,所以文件可以带中文
### 只支持英文文件名
# att1["Content-Type"]='application/octet-stream'#数据传输类型的定义
# att1["Content-Disposition"]='attachment;filename=%s'%rarFilePath#定义文件在邮件中显示的文件名和后缀名,名字不可为中文,会乱码
# msg1.attach(att1)
### 支持中文的
att1["Content-Type"] = 'application/octet-stream;name=%s'%Header(rarFilePath,'UTF-8')
att1.add_header('content-disposition','attachment',filename=rarFilePath)
msg1.attach(att1)
# 邮件头信息,属性是固定的
msg1['From'] = Header(from_addr)
msg1['To'] = Header(to_addr)
msg1['Subject'] = Header('hello world')
msg1['Date'] = datetime.ctime(datetime.now())
# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL(smtp_server) # 实例化一个加密服务器
server.connect(smtp_server,465) # 启动加密端口
# 登录发信邮箱
server.login(from_addr, shouquanma)
# 发送邮件
# server.sendmail(from_addr, to_addr, msg.as_string()) # 发送纯文本
server.send_message(msg1) # 发送邮件对象
# 关闭服务器
server.quit()
你们看看多么愉快啊
总结本节讲解了如何发送邮件。
使用的到了smtplib,负责报文发送。网络层 email则负责内容的构建。应用层
下一节,我们讲讲,定时,和群发。
那就更刺激了!!!