python自动化办公:邮件篇 (定时邮件问候女票so easy)
前言和準備工作
如果你能找到一個要看郵件的女票哈,本文能幫你用程序實現在每天不同時間段給女友定時給女友發消息,不錯過早上,中午、晚安!
而你自己卻可以玩游戲,不管這回事。
你告訴我看郵件的女生少,別著急,博主下一篇博文再介紹用程序控制個人微信。用微信來騷擾。
不喜歡你的,這樣做叫騷擾…。
本文主要介紹 自動化辦公:郵件篇 。定時問候只是其中一個附帶功能
準備工作
以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 指明的接收者地址
結果
2發送具有HTML格式的郵件
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'#之前得到的授權碼。有的郵箱可能沒有授權碼就直接輸入郵箱密碼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:\Users\Shineion\Desktop\樣例測試.xls’,‘rb’).read())#打開附件.
絕對路徑還是手打,我直接復制過來時顯示報錯,手打卻成功發送。
結果:
4利用 zmail 接收郵件
庫:zmail
需要安裝
pip install zmail
結果:
如果只想查看一部分內容
import zmailserver=zmail.server('1344732766@qq.com','******')#輸入賬戶和密碼 ,QQ郵箱密碼密碼為之前得到的授權碼mail=server.get_latest()#獲取最新的一份郵件 print(mail['Subject'])將郵件中的附件保存到本地
參數mail:得到的郵件
target_path:保存路徑,None 為保存到工作目錄文件夾
overwrite:是否復寫,如果有重名文件是否覆蓋
結果
郵件中的樣例測試.xls保存到工作目錄下。
5利用 zmail 發郵件
smtplib發郵件代碼復雜,直到今天仍有人在這里遇到問題。而且代碼復雜,解釋起來很麻煩,今天給大家介紹一個新的發郵件方法——zmail
zmail的優勢
自動填充頭信息
將一個字典映射為email,構造郵件相當于構造字典
自動尋找郵件服務商端口號地址、自動選擇協議
只依賴Python3
結果:
6每天定時發送郵件
她來了。
# coding=utf-8 import datetime import time import osdef 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.683783print(now.hour, now.minute)#15 2if 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 時收到啦文件
之前介紹了自動化辦公的word篇和excel篇
有興趣可以看下
python自動化辦公:excel篇,從此做表不加班。
python自動化辦公:word篇。職場高手不是夢。
電氣專業的計算機萌新,寫博文不容易。如果你覺得本文對你有用,請點個贊支持下,謝謝。
總結
以上是生活随笔為你收集整理的python自动化办公:邮件篇 (定时邮件问候女票so easy)的全部內容,希望文章能夠幫你解決所遇到的問題。