前言和準備作業
如果你能找到一個要看郵件的女票哈,本文能幫你用程式實作在每天不同時間段給女友定時給女友發訊息,不錯過早上,中午、晚安!
而你自己卻可以玩游戲,不管這回事,
你告訴我看郵件的女生少,別著急,博主下一篇博文再介紹用程式控制個人微信,用微信來騷擾,
不喜歡你的,這樣做叫騷擾…,
很多人學習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 = '[email protected]' #發件人郵箱 pwd='xxxxxxxxx'#之前得到的授權碼,有的郵箱可能沒有授權碼就直接輸入郵箱密碼,為了保密,我用x號代替真實的 receivers='[email protected]'#收件人郵箱 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 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 = '[email protected]' #發件人郵箱 pwd='xxxxxxxxx'#之前得到的授權碼,有的郵箱可能沒有授權碼就直接輸入郵箱密碼 receivers='[email protected]'#收件人郵箱 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 = '[email protected]' #發件人郵箱 pwd='********8'#之前得到的授權碼,有的郵箱可能沒有授權碼就直接輸入郵箱密碼 receivers='[email protected]'#收件人郵箱 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 zmail
server=zmail.server('[email protected]','dteqfmouzznhbaba')#輸入賬戶和密碼 ,QQ郵箱密碼密碼為之前得到的授權碼
mail=server.get_latest()#獲取最新的一份郵件
zmail.show(mail)#查看郵件
結果:
如果只想查看一部分內容
import zmail
server=zmail.server('[email protected]','******')#輸入賬戶和密碼 ,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 zmail
MAIL = {
'subject': '測驗郵件',#題目
'content_text': '不知道說些什么,',#正文內容
'attachments': ['zhenjiang_power.csv', 'renwu.jpg'],#附件
}
server = zmail.server("[email protected]", "********")#發送者的郵箱 和授權碼
server.send_mail("[email protected]", MAIL)
結果:
6每天定時發送郵件
她來了,
# coding=utf-8
import 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 時收到啦檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159496.html
標籤:其他
下一篇:DELPHI 10.3 做的 WINDOWS SERVER 服務應用 在win10運行可以,在windows server 2012 報錯 1053
