2016-09-27 44 views
0

我正在開發一個大項目,其中包括一個用於記住用戶的數據庫。我跳過細節,但我的客戶希望我包括一個功能,以便他可以備份所有的用戶數據和其他文件。Python - 發送帶附件的電子郵件

我在想電子郵件,(因爲該項目是一個Android應用程序),我試圖找出如何發送電子郵件中的附件(即.db sqlite3文件)。我知道here附近有很多相似的問題,但this問題的所有答案都給我一個錯誤。這裏要說的是我得到的最接近:

這個程序發送電子郵件沒有附件:

import smtplib 

from email.mime.multipart import MIMEMultipart 

from email.mime.text import MIMEText 

boodskap = MIMEText("Toekomsweb Epos toets", 'plain') 

van_adres = "from adres" 

na_adres = "to adres" 

epos_liggaam = MIMEMultipart('alternatief') 

epos_liggaam['Subject'] = "Toets" 

epos_liggaam['From'] = van_adres 

epos_liggaam['To'] = na_adres 

epos_liggaam.attach(boodskap) 

mail = smtplib.SMTP('smtp.gmail.com',587) 

mail.ehlo() 

mail.starttls() 

mail.login(van_adres,'PASSWORD') 

mail.sendmail(van_adres,na_adres,epos_liggaam.as_string()) 

mail.close() 
print("succes!") 

請原諒我那可憐的變量命名,它不是英語。

發送附件的任何幫助?

謝謝!

+0

爲什麼不將備份文件只是發送給一些專門的FTP服務器?發送這封電子郵件附件似乎是一個非常糟糕的主意 - 至少由於STMP服務器端可能存在一些附件大小限制,因此無法在一天內發送備份(當數據庫快照會放大時)。 –

+0

好的,你已經證明你已經通過顯示代碼並參考了SO的其他問題和答案進行了一些研究。但是你說其他答案會給你錯誤,而不會解釋測試中使用的代碼是什麼以及錯誤是什麼。你應該顯示出來,以獲得調試幫助。 –

+0

我得到的錯誤是:錯誤:[Errno 111]連接被拒絕,但不用擔心,我想出了,由於某種原因,linux有不同的發送電子郵件的方式,所以問題不在於附件,而是與發送...我回答我自己的問題與我用來讓它工作的代碼... –

回答

0

嗨,這是我使用的代碼...事實證明,ubunto使用不同的方式發送電子郵件比窗口。

import smtplib 

from email.mime.multipart import MIMEMultipart 

from email.mime.text import MIMEText 

from email.mime.base import MIMEBase 

from email import encoders 

import os 

boodskap = MIMEText("Toekomsweb Epos toets", 'plain') 

van_adres = 'From adres' 

na_adres = 'To adres' 

epos_liggaam = MIMEMultipart('alternatief') 

epos_liggaam['Subject'] = "Toets" 

epos_liggaam['From'] = van_adres 

epos_liggaam['To'] = na_adres 

epos_liggaam.attach(boodskap) 

f = "toets.db" 
part = MIMEBase('application', "octet-stream") 
part.set_payload(open(f,"rb").read()) 
encoders.encode_base64(part) 
part.add_header('Content-Disposition', 'attachment; filename="{0}"'.format(os.path.basename(f))) 
epos_liggaam.attach(part) 

mail = smtplib.SMTP('smtp.gmail.com',587) 

mail.ehlo() 

mail.starttls() 

mail.login(van_adres,'PASSWORD') 

mail.sendmail(van_adres,na_adres,epos_liggaam.as_string()) 

mail.close() 
print("succes!") 

這個答案是從here(第二個答案)

希望適應這個答案將回答別人的問題藏漢