上星期接到任務要完成乙個自動寫郵件的指令碼,基本功能是每兩小時執行一次程式跑出統計**,並將統計**的summary傳送到領導的郵箱。由於公司是做數字貨幣的,每兩小時實時監測策略交易情況較為必要。下面來實現自動寫郵件的功能部分
import smtplib
from email.mime.text import mimetext
from email import encoders
from email.mime.multipart import mimemultipart
from email.utils import formataddr
import pandas as pd
要使用smtp服務,需要登陸郵箱並進行設定。登陸郵箱後在設定-客戶端設定-開啟smtp服務。
傳送郵件通常有發件人(名字),收件人(名字),標題,正文,,附件。下面將演示如何一步步傳送帶,附件的郵件。
首先在函式裡定義發件人收件人,標題。其中若收件人為多人,需要注意一下,初始定義為以』,』或』;』連線的字串,而在sendmail函式裡需要利用split進行分割傳入乙個列表引數,具體見**
def
mail
(): sender = '******@163.com'
#發件人
password = '***'
#密碼 receiver = '***[email protected],[email protected]'
#多個收件人
subject = '測試郵件'
#標題 msg = mimemultipart('mixed') #初始化定義,mixed為含多種功能的郵件
msg['from'] = sender
msg['to'] = receiver
msg['subject'] = subject
新增正文有兩種方式,一種是通過html語言,一種是直接傳入字串。而作為監控郵件,通常需要看的是一張**中的資料,這時利用html調整格式較為美觀且方便。這裡將演示讀入資料框df後如何傳送
def create_df():
'''隨意定義乙個資料框作測試,此函式可更改為pd.read_csv來讀取想要傳送的資料'
'' df = pd.dataframe()
return df
def attach_text(msg):
df = create_df()
col = df.columns
d = ''
for i in range(df.shape[0]):
d = d + """
""" + str(df.iloc[i][0]) + """
""" + str(df.iloc[i][1]) + """
"""html = """/
測試**:
ab
+ d + """
"""%(df.columns
context = mimetext(html,_subtype='html', _charset='utf-8')
msg.attach(context)
print('新增正文**完成')
def
attach_enclosure
(msg):
file = 'c:/users/19470/desktop/test.xlsx'
#傳送附件的檔案路徑
attach = mimetext(open(file, 'rb').read(), 'base64', 'utf-8')
attach_name = "attachment;filename='test_enclosure'"
attach['content-disposition'] = attach_name
msg.attach(attach)
print('新增附件完成')
要把嵌入到郵件正文中,我們只需按照傳送附件的方式,先把郵件作為附件新增進去,然後,在html中通過引用src=」cid:0」就可以把附件作為嵌入了。如果有多個,給它們依次編號,然後引用不同的cid:x即可。
這裡不再演示。
def
mail
(): sender = '******@163.com'
#發件人
password = '***'
#密碼 receiver = '***[email protected],[email protected]'
#多個收件人
subject = '測試郵件'
#標題 msg = mimemultipart('mixed') #初始化定義,mixed為含多種功能的郵件
msg['from'] = sender
msg['to'] = receiver
msg['subject'] = subject
msg = mimemultipart('mixed')
attach_enclosure(msg) #新增附件
attach_text(msg) #新增正文
smtp = smtplib.smtp() #建立smtp物件
smtp.connect('smtp.exmail.qq.com') #可在郵箱客戶端檢視,smtp服務位址
smtp.set_debuglevel(1) #輸出程式執行log
smtp.login(sender, password) #登陸
smtp.sendmail(sender, receiver.split(','), msg.as_string()) #傳送郵件,需要將收件人split成列表
print('%s 傳送成功'%subject)
smtp.quit()
最後效果如圖
自動發郵件在監控系統運營情況時較為有效,通過datetime模組設定自動發郵件的時間,再定時執行相關檔案輸出**,最後再傳送郵件,可以在非上班時間實時監測系統運營情況。
Python實現自動傳送郵件功能
簡單郵件傳輸協議 smtp 是一種協議,用於在郵件伺服器之間傳送電子郵件和路由電子郵件。python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。smtp通訊的基本流程可以概括為以下幾點 1.連線smtp伺服器...
python簡單實現註冊自動傳送郵件
def register if request.method post username request.form.get username none password request.form.get password none 當所有的資訊遍歷結束,都沒有發現註冊的使用者存在,則將註冊的使用者新...
python 自動傳送郵件
測試環境 python3.4 發件伺服器 網易yeah 收件伺服器 移動139郵箱 注意 一定要在發件的郵箱裡面設定pop3 smtp imap為開啟狀態,要不然會報錯 535 error authentication failed 通過本程式,可以自動給自己的手機郵箱傳送郵件,在手機郵箱中把發件位...