2016-09-27 91 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(第二个答案)

希望适应这个答案将回答别人的问题藏汉

相关问题