當前位置:首頁 » 編程語言 » python郵件附件

python郵件附件

發布時間: 2022-11-27 23:46:37

A. 如何使用python發送帶附件的郵件

importsmtplib
fromos.pathimportbasename
fromemail.mime.
fromemail.mime.multipartimportMIMEMultipart
fromemail.mime.textimportMIMEText
fromemail.utilsimportCOMMASPACE,formatdate


defsend_mail(send_from,send_to,subject,text,files=None,
server="127.0.0.1"):
assertisinstance(send_to,list)

msg=MIMEMultipart(
From=send_from,
To=COMMASPACE.join(send_to),
Date=formatdate(localtime=True),
Subject=subject
)
msg.attach(MIMEText(text))

forfinfilesor[]:
withopen(f,"rb")asfil:
msg.attach(MIMEApplication(
fil.read(),
Content_Disposition='attachment;filename="%s"'%basename(f)
))

smtp=smtplib.SMTP(server)
smtp.sendmail(send_from,send_to,msg.as_string())
smtp.close()

B. 如何使用Python發送帶附件的郵件

直接用python自帶的郵件發送LIB就可以。不過發送中文郵件時標題需要單獨編碼。另外有些郵箱的MIME格式也有些特殊,需要自己寫message的格式。不過都不難,試驗一下,找幾個例子就可以。

C. python電子郵件系列(三)之POP接收郵件

由上篇文章我們已經得知郵件從發送到接收的過程:

發件人->MUA->MTA->若干MTA->MDA->MUA->收件人

本節接收郵件主要就是編寫一個 MUA 客戶端,從 MDA 將郵件取回本地。

收取郵件最常用的是 POP協議 ,目前版本是第三版,也稱 POP3 。python內置了 poplib 模塊,支持POP3協議。

回想上一節 SMTP ,我們對要發送的郵件內容進行了各種編碼,包括添加MIME header,編碼之後再進行發送。

因此,我們通過POP3協議接收的也不是原內容,而是經過一系列編碼等處理的文本。

所以,要想把POP3收取的文本變為可閱讀的郵件對象,就需要利用 email 模塊對原始郵件進行解析。

所以,郵件收取的流程就是:

由上一篇 文章 最後總結部分可知。郵件由字元到發送到網路經歷了如下的格式轉化:

純文本:

str->bytes->base64->str->bytes

二進制文件:

binary code->base64->str->bytes

我們解析郵件也是按這個思路,逆序解析出內容。

這里的 decode('utf-8') 先把位元組流轉化為字元串,再將字元串轉化為 message 結構的對象。這步與發送郵件的 as_string 函數相反。

先從上一節結構化的 msg 中取出信件頭,列印出來。

如果是 multipart 結構, get_payload 函數會返回一個包含不同part的list,然後對每一part遞歸調用 print_info ,列印子信件頭和子信件內容。

不是 multipart 時,之後再依據 Content-Type 作不同處理:

如果是 text :

利用 get_payload(decode = Ture) 取出子信件的內容, decode 為True,則按照 Content-Transfer-Type 將 base64 或 QP 解碼為 bytes 。

再 guess_charset 猜出編碼方式,之後將其解碼為字元顯示。

如果不是 Text 對象,則為附件:

列印出附件的 Content-Type 。

D. python,如何發送帶附件的郵件

可以通過以下代碼實現:

importsmtplib
fromemail.mime.textimportMIMEText
importemail.mime.multipart
fromemail.
fromemail.MIMEBaseimportMIMEBase
fromemailimportEncoders

defsend_mail():
mailto_list=['xxxx','xxx']#收件人
mail_host="xxxxx"#設置伺服器
mail_user="xxxx"#用戶名
mail_pass="xxxxxx"#口令
mail_postfix="xxxx.xxx"#發件箱的後綴
me="hello"+"<"+mail_user+"@"+mail_postfix+">"#這里的hello可以任意設置,收到信後,將按照設置顯示
content='Thisistestmail!'#郵件正文
msg=MIMEMultipart()
body=MIMEText(content,_subtype='html',_charset='gb2312')#創建一個實例,這里設置為html格式郵件
msg.attach(body)
msg['Subject']="SubjectTest"#設置主題
msg['From']=me
msg['To']=";".join(mailto_list)
#附件內容,若有多個附件,就添加多個part,如part1,part2,part3
part=MIMEBase('application','octet-stream')
#讀入文件內容並格式化,此處文件為當前目錄下,也可指定目錄例如:open(r'/tmp/123.txt','rb')
part.set_payload(open('test.txt','rb').read())
Encoders.encode_base64(part)
##設置附件頭
part.add_header('Content-Disposition','attachment;filename="test.txt"')
msg.attach(part)

try:
s=smtplib.SMTP()
s.connect(mail_host)#連接smtp伺服器
s.login(mail_user,mail_pass)#登陸伺服器
s.sendmail(me,mailto_list,msg.as_string())#發送郵件
s.close()
print'sendmailsucess'
returnTrue
exceptException,e:
printstr(e)
returnFalse

E. 基於Python的數據導出和郵件發送

由於運維工作需要,經常需要將一些數據從資料庫中導出,發送給運營和需求部門,天天去手動查詢,又有點太費時間了,於是研究學習了Python的基本功能,通過Python腳本和Linux 的crontab命令實現了每天自動化的數據查詢和郵件發送。

定義了以下幾個代碼模塊實現了配置文件讀取、日誌記錄、資料庫連接訪問查詢、導出到xlsx和帶附件的郵件發送功能。
1、demo.py 示例文件
2、config.yml 配置文件
3、common_log.py 實現日誌記錄
4、common_db.py 實現資料庫連接和訪問
5、common_xlsx.py 實現數據表格的處理
6、common_email.py 實現帶附件的郵件發送

F. Python向多人發送、抄送帶附件的郵件(含詳細代碼)

python要發送帶附件的郵件,首先要創建MIMEMultipart()實例,然後構造附件,如果有多個附件,可依次構造,最後使用smtplib.smtp發送。

步驟:

(1)設置伺服器所需信息(ps:部門郵箱密碼為授權碼,需自行登錄相應郵箱設置授權碼)

(2)設置email信息

(3)附件部分

(4)登錄郵箱並發送郵件

附上源碼

G. 如何使用python發送包含正文和附件的郵件

fromemail.HeaderimportHeader
fromemail.MIMETextimportMIMEText
fromemail.
importsmtplib,datetime

#創建一個帶附件的實例
msg=MIMEMultipart()

#構造附件
att=MIMEText(open('d:\tc201.rar','rb').read(),'base64','gb2312')
att["Content-Type"]='application/octet-stream'
att["Content-Disposition"]='attachment;filename="tc201.rar"'
msg.attach(att)

#加郵件頭
msg['to']='[email protected]'
msg['from']='[email protected]'
msg['subject']=Header('冒煙測試結果('+str(datetime.date.today())+')',
'gb2312')
#發送郵件
server=smtplib.SMTP('smtp.xxx.com')
server.sendmail(msg['from'],msg['to'],
msg.as_string())
server.close

H. python中如何實現發送郵件及附件功能的具體詳解

思路如下:
1. 構造MIMEMultipart對象做為根容器
2. 構造MIMEText對象做為郵件顯示內容並附加到根容器
3. 構造MIMEBase對象做為文件附件內容並附加到根容器
a. 讀入文件內容並格式化
b. 設置附件頭
4. 設置根容器屬性
5. 得到格式化後的完整文本
6. 用smtp發送郵件

I. 用Python發送郵件,可以群發,帶有多個附件

'''''
函數說明:Send_email_text()函數實現發送帶有附件的郵件,可以群發,附件格式包括:xlsx,pdf,txt,jpg,mp3等
參數說明:
1.subject:郵件主題
2.content:郵件正文
3.filepath:附件的地址,輸入格式為["","",...]
4.receive_email:收件人地址,輸入格式為["","",...]
'''
defSend_email_text(subject,content,filepath,receive_email):
importsmtplib
fromemail.mime.multipartimportMIMEMultipart
fromemail.mime.textimportMIMEText
fromemail.mime.
sender="發送方郵箱"
passwd="填入發送方密碼"
receivers=receive_email#收件人郵箱

msgRoot=MIMEMultipart()
msgRoot['Subject']=subject
msgRoot['From']=sender

iflen(receivers)>1:
msgRoot['To']=','.join(receivers)#群發郵件
else:
msgRoot['To']=receivers[0]

part=MIMEText(content)
msgRoot.attach(part)

##添加附件部分
forpathinfilepath:
if".jpg"inpath:
#jpg類型附件
jpg_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=jpg_name)
msgRoot.attach(part)

if".pdf"inpath:
#pdf類型附件
pdf_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=pdf_name)
msgRoot.attach(part)

if".xlsx"inpath:
#xlsx類型附件
xlsx_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=xlsx_name)
msgRoot.attach(part)

if".txt"inpath:
#txt類型附件
txt_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=txt_name)
msgRoot.attach(part)

if".mp3"inpath:
#mp3類型附件
mp3_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=mp3_name)
msgRoot.attach(part)

try:
s=smtplib.SMTP()
s.connect("smtp.mail.aliyun.com")#這里我使用的是阿里雲郵箱,也可以使用163郵箱:smtp.163.com
s.login(sender,passwd)
s.sendmail(sender,receivers,msgRoot.as_string())
print("郵件發送成功")
exceptsmtplib.SMTPExceptionase:
print("Error,發送失敗")
finally:
s.quit()

J. python批量發送郵件--包括批量不同附件

小豬在公司做出納,乾的活卻包括了出納、會計、結算專員等工作,周末都要被無奈在家加班,主要還沒有加班費,簡直是被公司嚴重壓榨。每個月初都要給每個工長發預付款賬單郵件,月中發結算款賬單。重復性機械工作。
一個及格線上的程序員,最起碼的覺悟就是將重復性的機械工作自動化,於是,在我花了一個多小時,幫她給一部分工長發了一次郵箱後,默默的回來寫了這個腳本。
所以,設計要點就是一個字——
恩,就醬。

經過我觀察,郵件內容分為兩種,這里先說第一種,「結算款」:
(1) 郵件內容(content)不變,為固定的txt文本
(2) 附件(attch)為每個工長的結算賬單(excel文件.xlsx),此文件命名為總賬單中自動分割出來的名字(暫時不懂怎麼分割出來的=.=),格式為:

(3) 郵件主題(Subject)為附件名(不帶後綴名)
(4) 郵件接收對象(工長)的名單及其郵箱地址基本不變,偶爾變動
(5)

(1) 將工長及其郵箱地址存為CSV文件的兩列,python中將其讀取為字典形式,存儲以供後續查詢郵箱地址。

(2) 遍歷文件夾中的附件(.xlsx類型文件),對其進行兩種操作,一方面將其名字(不帶路徑和後綴)提取出來,作為郵件主題(Subject),並對Subject進一步劃分,得到其中的人名(工長);另一方面,將其傳入MIMEbase模塊中轉為郵件附件對象。

(3) 由上述得到的人名(name),在字典形式的通訊錄中,查找相應的地址(value),即為收件人名稱和地址
(4) 利用python中的email模塊和smtp模塊,登錄自己的郵箱賬號,再對每個附件,得到的收件人名和地址,添加附件,發送郵件。done

在設計過程中有幾點需要注意
(1) 有時一個郵件地址對應兩個人名,此時應該在CSV文件中分為兩行存儲,而不是將兩個人名存為同一個鍵;
(2)有賬單.xlsx文件,通訊錄里卻沒存儲此人記錄,程序應該列印提示沒有通訊記錄的人名,且不能直接退出,要保證員工看到此提示,此第一版程序還有解決此問題;
(3)此程序發送的郵件內容為純文本,若要求郵件內容有不同格式(如部分加粗,部分紅色),還有小部分需要每次更改的地方(如郵件內容包含當前月份),如何解決?(這就是第二種郵件內容,「預算款」);
(4)重名的,暫時還沒碰到,程序中也沒給出解決方案。

第一版到此,20180830,待更新
第二版更新,20180904

第三版更新,20180909

轉戰CSDN博客,更多博客見傳送門《 xiaozhou的博客主頁 》

熱點內容
php上傳word 發布:2023-02-09 11:50:27 瀏覽:616
linux多線程socket編程 發布:2023-02-09 11:47:20 瀏覽:559
日歷存儲可以刪除 發布:2023-02-09 11:47:20 瀏覽:353
android尺子 發布:2023-02-09 11:44:16 瀏覽:732
邁銳寶壓縮機多少錢 發布:2023-02-09 11:44:11 瀏覽:934
五菱的obd介面可以升級什麼配置 發布:2023-02-09 11:24:52 瀏覽:506
英雄聯盟手游安卓系統怎麼轉換蘋果系統 發布:2023-02-09 11:23:51 瀏覽:167
預編譯頭文件c 發布:2023-02-09 11:23:49 瀏覽:124
安卓老款機型密碼忘記如何解釋 發布:2023-02-09 11:14:27 瀏覽:348
ftp錯誤無法訪問伺服器 發布:2023-02-09 11:11:44 瀏覽:724