python自动化办公:邮件篇(定时邮件问候女票soeasy)
前言和准备工作
如果你能找到一个要看邮件的女票哈,本文能帮你用程序实现在每天不同时间段给女友定时给女友发消息,不错过早上,中午、晚安!
而你自己却可以玩游戏,不管这回事。
你告诉我看邮件的女生少,别着急,博主下一篇博文再介绍用程序控制个人微信。用微信来骚扰。
不喜欢你的,这样做叫骚扰…。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:961562169
本文主要介绍 自动化办公:邮件篇 。定时问候只是其中一个附带功能
准备工作
以QQ邮件为例说明
1设置QQ邮箱:点击“设置”->“账户”
2. 往下滑 找到下面页面 点击“开启”按钮,开启POP3/SMTP服务,根据提示完成开启操作,开启成功后,生成授权码(授权码用于第三方登录,简单说就是用在你写的python程序里进行登录)
开启前
开启后
授权码图片就不放啦。
1发送普通的文字邮件
使用的库
email :用于写邮件
smtplib 用于操作协议 ,发送文件的
smtp协议的基本命令包括:
HELO 向服务器标识用户身份
MAIL 初始化邮件传输 mail from:
RCPT 标识单个的邮件接收人;常在MAIL命令后面,可有多个rcpt to:
DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输,以.结束
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP 查询服务器支持什么命令
NOOP 无操作,服务器应响应OK
QUIT 结束会话
RSET 重置会话,当前传输被取消
MAIL FROM 指定发送者地址
RCPT TO 指明的接收者地址
#!/usr/bin/env python3# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date : 2020/8/2
import smtplib
from smtplib import SMTP_SSL #SMTP_SSL用于加密邮件内容,防止被截获
from email.mime.text import MIMEText #MIMEText用于构造邮件正文
from email.mime.multipart import MIMEMultipart#用于把邮件的各个部分装在一起,容器作用
from email.header import Header#邮件头,包括邮件名 收件人等
#邮件构造
host_server="smtp.qq.com"#QQ邮箱smtp服务器 ,使用什么邮箱就对应输入其服务器 。新浪邮箱:"smtp.sina.com"
sender_email = "1344732766@qq.com" #发件人邮箱
pwd="xxxxxxxxx"#之前得到的授权码。有的邮箱可能没有授权码就直接输入邮箱密码,为了保密,我用x号代替真实的
receivers="1344732766@qq.com"#收件人邮箱
mail_title="余登武的程序测试文件"#邮件名
mail_content="这是一封测试邮件"#邮件正文内容
#主体装载
msg=MIMEMultipart()#初始化邮件主体 ,起容器作用,把各部分装进去
msg["Subject"]=Header(mail_title,"utf-8")#msg["Subject"] 邮件主题,使用header将题目处理成能识别的格式
msg["From"]=sender_email#寄件人
#msg["From"]=Header("发送邮箱","utf-8")#这一行和上面一行是等价的,都可以运行
#msg["To"]=Header("测试邮箱","utf-8")#收件人,和下面一行等效的
msg["To"]=receivers#收件人
msg.attach(MIMEText(mail_content,"plain","utf-8"))#邮件正文内容,plain 无格式,以无格式添加内容。第一个参数为邮件内容,第二个参数为设置文本格式,第三个参数为编码设置
#登录发生邮件
smtp=SMTP_SSL(host_server)#登录服务器
smtp.login(sender_email,pwd)#输入用户名,密码 登录寄件人邮箱
smtp.sendmail(sender_email,receivers,msg.as_string())#发生邮件 。参数 :发生人,收件人,邮件主体
smtp.quit()#退出
结果
2发送具有HTML格式的邮件
import smtplibfrom smtplib import SMTP_SSL #SMTP_SSL用于加密邮件内容,防止被截获
from email.mime.text import MIMEText #MIMEText用于构造邮件正文
from email.mime.multipart import MIMEMultipart#用于把邮件的各个部分装在一起,容器作用
from email.header import Header#邮件头,包括邮件名 收件人等
#邮件构造
host_server="smtp.qq.com"#QQ邮箱smtp服务器 ,使用什么邮箱就对应输入其服务器 。新浪邮箱:"smtp.sina.com"
sender_email = "1344732766@qq.com" #发件人邮箱
pwd="xxxxxxxxx"#之前得到的授权码。有的邮箱可能没有授权码就直接输入邮箱密码
receivers="1344732766@qq.com"#收件人邮箱
mail_title="余登武的程序测试文件2"#邮件名
mail_content="这是一封测试邮件 <p>这是一封带有html格式的邮件</P><p><a href="https://blog.csdn.net/KOBEYU652453">点击进入kobeyu652453的博客</a> </p>"#邮件正文内容
#主体装载
msg=MIMEMultipart()#初始化邮件主体 ,起容器作用,把各部分装进去
msg["Subject"]=Header(mail_title,"utf-8")#msg["Subject"] 邮件主题,使用header将题目处理成能识别的格式
msg["From"]=sender_email#寄件人
#msg["From"]=Header("发送邮箱","utf-8")#这一行和上面一行是等价的,都可以运行
#msg["To"]=Header("测试邮箱","utf-8")#收件人,和下面一行等效的
msg["To"]=receivers#收件人
msg.attach(MIMEText(mail_content,"html","utf-8"))#邮件正文内容,plain 无格式, html 为html格式。以无格式添加内容。第一个参数为邮件内容,第二个参数为设置文本格式,第三个参数为编码设置
#登录发生邮件
try:
smtp = SMTP_SSL(host_server) # 登录服务器
smtp.set_debuglevel(1)#1是开启smtp debug,0关闭
smtp.ehlo(host_server)#向服务器答招呼,表明身份
smtp.login(sender_email,pwd)#输入用户名,密码 登录寄件人邮箱
smtp.sendmail(sender_email,receivers,msg.as_string())#发生邮件 。参数 :发生人,收件人,邮件主体
smtp.quit()#退出
print("发送成功")
except smtplib.SMTPException:#捕捉异常
print("发送失败")
结果:
3发送带附件的邮件
比前文多一个导入
from email.mime.application import MIMEApplication#用于添加附件
#!/usr/bin/env python3# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date : 2020/8/2
import smtplib
from smtplib import SMTP_SSL #SMTP_SSL用于加密邮件内容,防止被截获
from email.mime.text import MIMEText #MIMEText用于构造邮件正文
from email.mime.multipart import MIMEMultipart#用于把邮件的各个部分装在一起,容器作用
from email.header import Header#邮件头,包括邮件名 收件人等
from email.mime.application import MIMEApplication#用于添加附件
#邮件构造
host_server="smtp.qq.com"#QQ邮箱smtp服务器 ,使用什么邮箱就对应输入其服务器 。新浪邮箱:"smtp.sina.com"
sender_email = "1344732766@qq.com" #发件人邮箱
pwd="********8"#之前得到的授权码。有的邮箱可能没有授权码就直接输入邮箱密码
receivers="1344732766@qq.com"#收件人邮箱
mail_title="余登武的程序测试文件2"#邮件名
mail_content="这是一封测试邮件 <p>这是一封带有html格式的邮件</P><p><a href="https://blog.csdn.net/KOBEYU652453">点击进入kobeyu652453的博客</a> </p>"#邮件正文内容
#主体装载
msg=MIMEMultipart()#初始化邮件主体 ,起容器作用,把各部分装进去
msg["Subject"]=Header(mail_title,"utf-8")#msg["Subject"] 邮件主题,使用header将题目处理成能识别的格式
msg["From"]=sender_email#寄件人
#msg["From"]=Header("发送邮箱","utf-8")#这一行和上面一行是等价的,都可以运行
#msg["To"]=Header("测试邮箱","utf-8")#收件人,和下面一行等效的
msg["To"]=receivers#收件人
msg.attach(MIMEText(mail_content,"html","utf-8"))#邮件正文内容,plain 无格式, html 为html格式。以无格式添加内容。第一个参数为邮件内容,第二个参数为设置文本格式,第三个参数为编码设置
attachment=MIMEApplication(open(r"zhenjiang_power.csv","rb").read())#打开附件.
attachment.add_header("Content-Disposition","attacment",filename="zhenjiang_power.csv")#给附件重命名,第一个参数"Content-Disposition":内容设置,第二个参数:附件,第三个参数:文件名
msg.attach(attachment)#把附件添加进主体
#登录发生邮件
try:
smtp = SMTP_SSL(host_server) # 登录服务器
smtp.set_debuglevel(1)#1是开启smtp debug,0关闭
smtp.ehlo(host_server)#向服务器答招呼,表明身份
smtp.login(sender_email,pwd)#输入用户名,密码 登录寄件人邮箱
smtp.sendmail(sender_email,receivers,msg.as_string())#发生邮件 。参数 :发生人,收件人,邮件主体
smtp.quit()#退出
print("发送成功")
except smtplib.SMTPException:#捕捉异常
print("发送失败")
解释:
添加附件 rb为读取二进制文件
attachment=MIMEApplication(open(r’zhenjiang_power.csv’,‘rb’).read())#打开附件.
文件重命名,因为上一行读取结果是二进制文件,如果直接发送,发送的是二进制文件。需要修改回人能看懂的格式
attachment.add_header(‘Content-Disposition’,‘attacment’,filename=‘zhenjiang_power.csv’)#给附件重命名,第一个参数’Content-Disposition’:内容设置,第二个参数:附件,第三个参数:文件名
msg.attach(attachment)#把附件添加进主体
添加绝对路径文件
attachment=MIMEApplication(open(r’C:UsersShineionDesktop样例测试.xls’,‘rb’).read())#打开附件.
绝对路径还是手打,我直接复制过来时显示报错,手打却成功发送。
结果:
4利用 zmail 接收邮件
库:zmail
需要安装
pip install zmail
import zmailserver=zmail.server("1344732766@qq.com","dteqfmouzznhbaba")#输入账户和密码 ,QQ邮箱密码密码为之前得到的授权码
mail=server.get_latest()#获取最新的一份邮件
zmail.show(mail)#查看邮件
结果:
如果只想查看一部分内容
import zmailserver=zmail.server("1344732766@qq.com","******")#输入账户和密码 ,QQ邮箱密码密码为之前得到的授权码
mail=server.get_latest()#获取最新的一份邮件
print(mail["Subject"])
将邮件中的附件保存到本地
参数mail:得到的邮件
target_path:保存路径,None 为保存到工作目录文件夹
overwrite:是否复写,如果有重名文件是否覆盖
zmail.save_attachment(mail,target_path=None,overwrite=True)
结果
邮件中的样例测试.xls保存到工作目录下。
5利用 zmail 发邮件
smtplib发邮件代码复杂,直到今天仍有人在这里遇到问题。而且代码复杂,解释起来很麻烦,今天给大家介绍一个新的发邮件方法——zmail
zmail的优势
自动填充头信息
将一个字典映射为email,构造邮件相当于构造字典
自动寻找邮件服务商端口号地址、自动选择协议
只依赖Python3
import zmailMAIL = {
"subject": "测试邮件",#题目
"content_text": "不知道说些什么,",#正文内容
"attachments": ["zhenjiang_power.csv", "renwu.jpg"],#附件
}
server = zmail.server("1344732766@qq.com", "********")#发送者的邮箱 和授权码
server.send_mail("1344732766@qq.com", MAIL)
结果:
6每天定时发送邮件
她来了。
# coding=utf-8import datetime
import time
import os
def chengxu():
# 把要启动的程序放在这个方法里
os.system("python D:机器学习学习草稿hm_003.py") # 执行hm_003.py文件
os.system("pause")
print("程序已经执行了!")
def main(h=10, m=40):
while True:
now = datetime.datetime.now()
print(now) # 2020-08-03 15:02:19.683783
print(now.hour, now.minute)#15 2
if now.hour == 15 and now.minute == 3:
chengxu()
# 每隔60秒检测一次
time.sleep(60)
main()
说明
当前时间2020-08-03 15:02:19.683783
main()函数每60秒执行一次,当然你也可以设置更长等待
提取出now = datetime.datetime.now()的小时和分钟。
如果小时和分钟等于我们设定的值。
就会执行chengxu() 函数
我把邮件程序hm_003.py 放在了chengxu() 函数 函数里。
只要电脑不关机,到了明天这个时候会继续执行该程序。
结果:
在下午3:03 时收到啦文件
以上是 python自动化办公:邮件篇(定时邮件问候女票soeasy) 的全部内容, 来源链接: utcz.com/z/529928.html