2012-11-06 85 views
3

我正在開發一個應用程序使用python,我需要通過郵件發送文件。我寫了一個程序發送郵件,但不知道有什麼問題。該代碼發佈如下。請任何人幫我用這個smtp庫。有什麼我失蹤?也有人可以告訴我什麼將在smtp主機!我正在使用smtp.gmail.com。 也可以告訴我如何通過電子郵件發送文件(.csv文件)。謝謝您的幫助!不能發送電子郵件與蟒蛇smtp

#!/usr/bin/python 

import smtplib 

sender = '[email protected]' 
receivers = ['[email protected]'] 

message = """From: From Person <[email protected]> 
To: To Person <[email protected]> 
Subject: SMTP e-mail test 

This is a test e-mail message. 
""" 

try: 
    smtpObj = smtplib.SMTP('smtp.gmail.com') 
    smtpObj.sendmail(sender, receivers, message)   
    print "Successfully sent email" 
except: 
    print "Error: unable to send email" 
+0

你會得到什麼錯誤? – 2012-11-06 07:41:15

+0

請提供錯誤的詳細信息。 – Nilesh

+0

Tichodroma,Lafada,: socket.error:[Errno 10060]連接嘗試失敗,因爲連接方在一段時間後沒有正確響應,或者由於連接的主機未能響應而建立連接失敗 –

回答

3

您還沒有登錄。也有幾個原因,你可能不通過包括由ISP封鎖令,則Gmail彈跳你,如果它不能讓你一個反向DNS等

try: 
    smtpObj = smtplib.SMTP('smtp.gmail.com', 587) # or 465 
    smtpObj.ehlo() 
    smtpObj.starttls() 
    smtpObj.login(account, password) 
    smtpObj.sendmail(sender, receivers, message)   
    print "Successfully sent email" 
except: 
    print "Error: unable to send email" 

我剛剛注意到您的請求能夠附加文件。自從現在你需要處理編碼以來,這改變了事情。儘管我不這麼認爲,但還是不難。

import os 
import email 
import email.encoders 
import email.mime.text 
import smtplib 

# message/email details 
my_email = '[email protected]gmail.com' 
my_passw = 'asecret!' 
recipients = ['[email protected]', '[email protected]'] 
subject = 'This is an email' 
message = 'This is the body of the email.' 
file_name = 'C:\\temp\\test.txt' 

# build the message 
msg = email.MIMEMultipart.MIMEMultipart() 
msg['From'] = my_email 
msg['To'] = ', '.join(recipients) 
msg['Date'] = email.Utils.formatdate(localtime=True) 
msg['Subject'] = subject 
msg.attach(email.MIMEText.MIMEText(message)) 

# build the attachment 
att = email.MIMEBase.MIMEBase('application', 'octet-stream') 
att.set_payload(open(file_name, 'rb').read()) 
email.Encoders.encode_base64(att) 
att.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file_name)) 
msg.attach(att) 

# send the message 
srv = smtplib.SMTP('smtp.gmail.com', 587) 
srv.ehlo() 
srv.starttls() 
srv.login(my_email, my_passw) 
srv.sendmail(my_email, recipients, msg.as_string()) 
+0

感謝您的幫助!我試過這個,但我得到一個錯誤,用戶名和密碼不被接受。我對登錄(帳戶,密碼)有點困惑。這個賬戶是什麼意思。這是一個發件人的郵件帳戶或其他東西。 –

+0

帳戶是您要發送電子郵件的gmail帳戶([email protected]),密碼是該帳戶的密碼。我只注意到你的附件請求。很快就會更新我的答案。 – Omnikrys

+0

非常感謝!你會盡快發佈你的更新...(: –