python自动化办公:邮件篇 (定时邮件问候女票so easy)
前言和準(zhǔn)備工作
如果你能找到一個(gè)要看郵件的女票哈,本文能幫你用程序?qū)崿F(xiàn)在每天不同時(shí)間段給女友定時(shí)給女友發(fā)消息,不錯(cuò)過(guò)早上,中午、晚安!
而你自己卻可以玩游戲,不管這回事。
你告訴我看郵件的女生少,別著急,博主下一篇博文再介紹用程序控制個(gè)人微信。用微信來(lái)騷擾。
不喜歡你的,這樣做叫騷擾…。
本文主要介紹 自動(dòng)化辦公:郵件篇 。定時(shí)問(wèn)候只是其中一個(gè)附帶功能
準(zhǔn)備工作
以QQ郵件為例說(shuō)明
1設(shè)置QQ郵箱:點(diǎn)擊“設(shè)置”->“賬戶(hù)”
2. 往下滑 找到下面頁(yè)面 點(diǎn)擊“開(kāi)啟”按鈕,開(kāi)啟POP3/SMTP服務(wù),根據(jù)提示完成開(kāi)啟操作,開(kāi)啟成功后,生成授權(quán)碼(授權(quán)碼用于第三方登錄,簡(jiǎn)單說(shuō)就是用在你寫(xiě)的python程序里進(jìn)行登錄)
開(kāi)啟前
開(kāi)啟后
授權(quán)碼圖片就不放啦。
1發(fā)送普通的文字郵件
使用的庫(kù)
email :用于寫(xiě)郵件
smtplib 用于操作協(xié)議 ,發(fā)送文件的
smtp協(xié)議的基本命令包括:
HELO 向服務(wù)器標(biāo)識(shí)用戶(hù)身份
MAIL 初始化郵件傳輸 mail from:
RCPT 標(biāo)識(shí)單個(gè)的郵件接收人;常在MAIL命令后面,可有多個(gè)rcpt to:
DATA 在單個(gè)或多個(gè)RCPT命令后,表示所有的郵件接收人已標(biāo)識(shí),并初始化數(shù)據(jù)傳輸,以.結(jié)束
VRFY 用于驗(yàn)證指定的用戶(hù)/郵箱是否存在;由于安全方面的原因,服務(wù)器常禁止此命令
EXPN 驗(yàn)證給定的郵箱列表是否存在,擴(kuò)充郵箱列表,也常被禁用
HELP 查詢(xún)服務(wù)器支持什么命令
NOOP 無(wú)操作,服務(wù)器應(yīng)響應(yīng)OK
QUIT 結(jié)束會(huì)話
RSET 重置會(huì)話,當(dāng)前傳輸被取消
MAIL FROM 指定發(fā)送者地址
RCPT TO 指明的接收者地址
結(jié)果
2發(fā)送具有HTML格式的郵件
import smtplib from smtplib import SMTP_SSL #SMTP_SSL用于加密郵件內(nèi)容,防止被截獲from email.mime.text import MIMEText #MIMEText用于構(gòu)造郵件正文 from email.mime.multipart import MIMEMultipart#用于把郵件的各個(gè)部分裝在一起,容器作用 from email.header import Header#郵件頭,包括郵件名 收件人等#郵件構(gòu)造 host_server="smtp.qq.com"#QQ郵箱smtp服務(wù)器 ,使用什么郵箱就對(duì)應(yīng)輸入其服務(wù)器 。新浪郵箱:"smtp.sina.com" sender_email = '1344732766@qq.com' #發(fā)件人郵箱 pwd='xxxxxxxxx'#之前得到的授權(quán)碼。有的郵箱可能沒(méi)有授權(quán)碼就直接輸入郵箱密碼receivers='1344732766@qq.com'#收件人郵箱 mail_title='余登武的程序測(cè)試文件2'#郵件名 mail_content='這是一封測(cè)試郵件 <p>這是一封帶有html格式的郵件</P><p><a href="https://blog.csdn.net/KOBEYU652453">點(diǎn)擊進(jìn)入kobeyu652453的博客</a> </p>'#郵件正文內(nèi)容#主體裝載 msg=MIMEMultipart()#初始化郵件主體 ,起容器作用,把各部分裝進(jìn)去 msg['Subject']=Header(mail_title,'utf-8')#msg['Subject'] 郵件主題,使用header將題目處理成能識(shí)別的格式 msg['From']=sender_email#寄件人 #msg['From']=Header('發(fā)送郵箱','utf-8')#這一行和上面一行是等價(jià)的,都可以運(yùn)行 #msg['To']=Header('測(cè)試郵箱','utf-8')#收件人,和下面一行等效的 msg['To']=receivers#收件人msg.attach(MIMEText(mail_content,'html','utf-8'))#郵件正文內(nèi)容,plain 無(wú)格式, html 為html格式。以無(wú)格式添加內(nèi)容。第一個(gè)參數(shù)為郵件內(nèi)容,第二個(gè)參數(shù)為設(shè)置文本格式,第三個(gè)參數(shù)為編碼設(shè)置#登錄發(fā)生郵件 try:smtp = SMTP_SSL(host_server) # 登錄服務(wù)器smtp.set_debuglevel(1)#1是開(kāi)啟smtp debug,0關(guān)閉smtp.ehlo(host_server)#向服務(wù)器答招呼,表明身份smtp.login(sender_email,pwd)#輸入用戶(hù)名,密碼 登錄寄件人郵箱smtp.sendmail(sender_email,receivers,msg.as_string())#發(fā)生郵件 。參數(shù) :發(fā)生人,收件人,郵件主體smtp.quit()#退出print('發(fā)送成功') except smtplib.SMTPException:#捕捉異常print('發(fā)送失敗')結(jié)果:
3發(fā)送帶附件的郵件
比前文多一個(gè)導(dǎo)入
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用于加密郵件內(nèi)容,防止被截獲from email.mime.text import MIMEText #MIMEText用于構(gòu)造郵件正文 from email.mime.multipart import MIMEMultipart#用于把郵件的各個(gè)部分裝在一起,容器作用 from email.header import Header#郵件頭,包括郵件名 收件人等 from email.mime.application import MIMEApplication#用于添加附件#郵件構(gòu)造 host_server="smtp.qq.com"#QQ郵箱smtp服務(wù)器 ,使用什么郵箱就對(duì)應(yīng)輸入其服務(wù)器 。新浪郵箱:"smtp.sina.com" sender_email = '1344732766@qq.com' #發(fā)件人郵箱 pwd='********8'#之前得到的授權(quán)碼。有的郵箱可能沒(méi)有授權(quán)碼就直接輸入郵箱密碼receivers='1344732766@qq.com'#收件人郵箱 mail_title='余登武的程序測(cè)試文件2'#郵件名 mail_content='這是一封測(cè)試郵件 <p>這是一封帶有html格式的郵件</P><p><a href="https://blog.csdn.net/KOBEYU652453">點(diǎn)擊進(jìn)入kobeyu652453的博客</a> </p>'#郵件正文內(nèi)容#主體裝載 msg=MIMEMultipart()#初始化郵件主體 ,起容器作用,把各部分裝進(jìn)去 msg['Subject']=Header(mail_title,'utf-8')#msg['Subject'] 郵件主題,使用header將題目處理成能識(shí)別的格式 msg['From']=sender_email#寄件人 #msg['From']=Header('發(fā)送郵箱','utf-8')#這一行和上面一行是等價(jià)的,都可以運(yùn)行 #msg['To']=Header('測(cè)試郵箱','utf-8')#收件人,和下面一行等效的 msg['To']=receivers#收件人msg.attach(MIMEText(mail_content,'html','utf-8'))#郵件正文內(nèi)容,plain 無(wú)格式, html 為html格式。以無(wú)格式添加內(nèi)容。第一個(gè)參數(shù)為郵件內(nèi)容,第二個(gè)參數(shù)為設(shè)置文本格式,第三個(gè)參數(shù)為編碼設(shè)置 attachment=MIMEApplication(open(r'zhenjiang_power.csv','rb').read())#打開(kāi)附件. attachment.add_header('Content-Disposition','attacment',filename='zhenjiang_power.csv')#給附件重命名,第一個(gè)參數(shù)'Content-Disposition':內(nèi)容設(shè)置,第二個(gè)參數(shù):附件,第三個(gè)參數(shù):文件名 msg.attach(attachment)#把附件添加進(jìn)主體#登錄發(fā)生郵件 try:smtp = SMTP_SSL(host_server) # 登錄服務(wù)器smtp.set_debuglevel(1)#1是開(kāi)啟smtp debug,0關(guān)閉smtp.ehlo(host_server)#向服務(wù)器答招呼,表明身份smtp.login(sender_email,pwd)#輸入用戶(hù)名,密碼 登錄寄件人郵箱smtp.sendmail(sender_email,receivers,msg.as_string())#發(fā)生郵件 。參數(shù) :發(fā)生人,收件人,郵件主體smtp.quit()#退出print('發(fā)送成功') except smtplib.SMTPException:#捕捉異常print('發(fā)送失敗')解釋:
添加附件 rb為讀取二進(jìn)制文件
attachment=MIMEApplication(open(r’zhenjiang_power.csv’,‘rb’).read())#打開(kāi)附件.
文件重命名,因?yàn)樯弦恍凶x取結(jié)果是二進(jìn)制文件,如果直接發(fā)送,發(fā)送的是二進(jìn)制文件。需要修改回人能看懂的格式
attachment.add_header(‘Content-Disposition’,‘a(chǎn)ttacment’,filename=‘zhenjiang_power.csv’)#給附件重命名,第一個(gè)參數(shù)’Content-Disposition’:內(nèi)容設(shè)置,第二個(gè)參數(shù):附件,第三個(gè)參數(shù):文件名
msg.attach(attachment)#把附件添加進(jìn)主體
添加絕對(duì)路徑文件
attachment=MIMEApplication(open(r’C:\Users\Shineion\Desktop\樣例測(cè)試.xls’,‘rb’).read())#打開(kāi)附件.
絕對(duì)路徑還是手打,我直接復(fù)制過(guò)來(lái)時(shí)顯示報(bào)錯(cuò),手打卻成功發(fā)送。
結(jié)果:
4利用 zmail 接收郵件
庫(kù):zmail
需要安裝
pip install zmail
結(jié)果:
如果只想查看一部分內(nèi)容
import zmailserver=zmail.server('1344732766@qq.com','******')#輸入賬戶(hù)和密碼 ,QQ郵箱密碼密碼為之前得到的授權(quán)碼mail=server.get_latest()#獲取最新的一份郵件 print(mail['Subject'])將郵件中的附件保存到本地
參數(shù)mail:得到的郵件
target_path:保存路徑,None 為保存到工作目錄文件夾
overwrite:是否復(fù)寫(xiě),如果有重名文件是否覆蓋
結(jié)果
郵件中的樣例測(cè)試.xls保存到工作目錄下。
5利用 zmail 發(fā)郵件
smtplib發(fā)郵件代碼復(fù)雜,直到今天仍有人在這里遇到問(wèn)題。而且代碼復(fù)雜,解釋起來(lái)很麻煩,今天給大家介紹一個(gè)新的發(fā)郵件方法——zmail
zmail的優(yōu)勢(shì)
自動(dòng)填充頭信息
將一個(gè)字典映射為email,構(gòu)造郵件相當(dāng)于構(gòu)造字典
自動(dòng)尋找郵件服務(wù)商端口號(hào)地址、自動(dòng)選擇協(xié)議
只依賴(lài)Python3
結(jié)果:
6每天定時(shí)發(fā)送郵件
她來(lái)了。
# coding=utf-8 import datetime import time import osdef chengxu():# 把要啟動(dòng)的程序放在這個(gè)方法里os.system("python D:\\機(jī)器學(xué)習(xí)\\學(xué)習(xí)草稿\\hm_003.py") # 執(zhí)行hm_003.py文件os.system("pause")print("程序已經(jīng)執(zhí)行了!")def main(h=10, m=40):while True:now = datetime.datetime.now()print(now) # 2020-08-03 15:02:19.683783print(now.hour, now.minute)#15 2if now.hour == 15 and now.minute == 3:chengxu()# 每隔60秒檢測(cè)一次time.sleep(60) main()說(shuō)明
當(dāng)前時(shí)間2020-08-03 15:02:19.683783
main()函數(shù)每60秒執(zhí)行一次,當(dāng)然你也可以設(shè)置更長(zhǎng)等待
提取出now = datetime.datetime.now()的小時(shí)和分鐘。
如果小時(shí)和分鐘等于我們?cè)O(shè)定的值。
就會(huì)執(zhí)行chengxu() 函數(shù)
我把郵件程序hm_003.py 放在了chengxu() 函數(shù) 函數(shù)里。
只要電腦不關(guān)機(jī),到了明天這個(gè)時(shí)候會(huì)繼續(xù)執(zhí)行該程序。
結(jié)果:
在下午3:03 時(shí)收到啦文件
之前介紹了自動(dòng)化辦公的word篇和excel篇
有興趣可以看下
python自動(dòng)化辦公:excel篇,從此做表不加班。
python自動(dòng)化辦公:word篇。職場(chǎng)高手不是夢(mèng)。
電氣專(zhuān)業(yè)的計(jì)算機(jī)萌新,寫(xiě)博文不容易。如果你覺(jué)得本文對(duì)你有用,請(qǐng)點(diǎn)個(gè)贊支持下,謝謝。
總結(jié)
以上是生活随笔為你收集整理的python自动化办公:邮件篇 (定时邮件问候女票so easy)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 当升科技是国企吗
- 下一篇: python 安装第三方包