2012-08-01 244 views
-1

Possible Duplicate:
Send email with python試圖與Python發送電子郵件

我想這樣發送電子郵件與Python,但是當我運行該腳本,它需要一兩分鐘,然後我得到這個錯誤:

Traceback (most recent call last): 
File "./emailer", line 19, in <module> 
server = smtplib.SMTP(SERVER) 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__ 
(code, msg) = self.connect(host, port) 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect 
self.sock = self._get_socket(host, port, self.timeout) 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket 
return socket.create_connection((port, host), timeout) 
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection 
raise error, msg 
socket.error: [Errno 60] Operation timed out 

這是腳本:

#!/usr/bin/env python 

import smtplib 

SERVER = 'addisonbean.com' 

FROM = '[email protected]' 
TO = ['[email protected]'] 

SUBJECT = 'Hello!' 

message = """\ 
Bla 
Bla Bla 
Bla Bla Bla 
Bla Bla Bla Bla 
""" 

server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit() 

我也試過我的網站IP地址作爲服務器,但是做了同樣的事情。

有人能告訴我爲什麼這樣做,以及如何解決這個問題?謝謝!

+0

SMTP服務器不需要任何身份驗證嗎?因爲他們通常會做 – BorrajaX 2012-08-01 23:44:34

+0

您需要使用實際的郵件服務器作爲服務器地址。你不能放入任何隨機的主機名。 – geoffspear 2012-08-01 23:46:21

回答

2

這裏的鍵位:

return socket.create_connection((port, host), timeout) 
socket.error: [Errno 60] Operation timed out 

Python的說法:我無法連接到該服務器,我試過,但它似乎並沒有迴應

這裏的第二個鍵位:

SERVER = 'addisonbean.com' 

這不是一個郵件服務器,是嗎?

+0

不是。我真的不知道郵件服務器是什麼... – Addison 2012-08-01 23:49:30

+0

不幸的是,在不知道郵件服務器是什麼的情況下發送電子郵件非常困難。你會認爲這件事今天會很容易,但還沒有完成。你應該從學習電子郵件開始! – slezica 2012-08-02 03:35:18

1

雖然addisonbean.com聽25端口和答案220 accra.dreamhost.com ESMTP - 你似乎是代理或某種防火牆。你能從你的控制檯做telnet addisonbean.com 25嗎?

+0

不會。它說這個addisonbean:節點名稱或服務名稱提供,或不知道 – Addison 2012-08-01 23:54:00

+0

沒關係對不起 – Addison 2012-08-01 23:57:06

+0

沒有。它說:嘗試69.163.221.133 ... telnet:連接到地址69.163.221.133:操作超時 telnet:無法連接到遠程主機 – Addison 2012-08-01 23:58:25

0

它看起來像你託管你的頁面在dreamhost.com,託管服務提供商。

當您設置您的帳戶,他們可能給你創建電子郵件帳戶的機會與您的域名([email protected]

您可能希望創建一個,得到的信息結束:主機SMTP(「郵件服務器」)所在的位置,用戶名,密碼......您必須填寫腳本中的所有內容。

我建議您開始使用另一個常規帳戶(Gmail.com, Hotmail Outlook.com)進行測試,並且您已閱讀(相當多)關於SMTP服務器的內容(您將擁有的服務器以便發送您的電子郵件)

這是一個簡單的腳本,應該使用Gmail帳戶發送電子郵件。填補顯示與您的數據星號的信息,看看它是否工作:

#!/usr/bin/env python 

import traceback 
from smtplib import SMTP 
from email.MIMEText import MIMEText 

smtpHost = "smtp.gmail.com" 
smtpPort = 587 
smtpUsername = "***@gmail.com" 
smtpPassword = "***" 
sender = "***@gmail.com" 

def sendEmail(to, subject, content): 
    retval = 1 
    if not(hasattr(to, "__iter__")): 
     to = [to] 
    destination = to 

    text_subtype = 'plain' 
    try: 
     msg = MIMEText(content, text_subtype) 
     msg['Subject'] = subject 
     msg['From'] = sender # some SMTP servers will do this automatically, not all 

     conn = SMTP(host=smtpHost, port=smtpPort) 
     conn.set_debuglevel(True) 
     #conn.login(smtpUsername, smtpPassword) 
     try: 
      if smtpUsername is not False: 
       conn.ehlo() 
       if smtpPort != 25: 
        conn.starttls() 
        conn.ehlo() 
       if smtpUsername and smtpPassword: 
        conn.login(smtpUsername, smtpPassword) 
       else: 
        print("::sendEmail > Skipping authentication information because smtpUsername: %s, smtpPassword: %s" % (smtpUsername, smtpPassword)) 
      conn.sendmail(sender, destination, msg.as_string()) 
      retval = 0 
     except Exception, e: 
      print("::sendEmail > Got %s %s. Showing traceback:\n%s" % (type(e), e, traceback.format_exc())) 
      retval = 1 
     finally: 
      conn.close() 

    except Exception, e: 
     print("::sendEmail > Got %s %s. Showing traceback:\n%s" % (type(e), e, traceback.format_exc())) 
     retval = 1 
    return retval 

if __name__ == "__main__": 
    sendEmail("***@gmail.com", "Subject: Test", "This is a simple test") 

一旦你擁有了相同的信息爲您的域(smtpHost,SMTPPORT,smtpUsername ...)它可能工作以及(取決於他們正在使用的端口,它可能是25,這是默認的非加密連接...或不...你必須檢查與dreamhost.com爲此)

請注意(因爲您使用的託管服務可能與其他人共享其SMTP服務器),您的「發件人」可能是[email protected]但實際的信息連接到dreamhost的。com SMTP服務器可能會有所不同:我猜'smtpUsername'可能是您用於在您的網站管理員中登錄的用戶名,'smtpHost'可能會更改爲類似smtp.dreamhost.com或類似的內容......我並不真的知道。

你有一個lot of resources如何做到這一點。

也似乎是一個設計師或者攝影師...的事情怎麼看的屏幕上,所有...那麼你可能想調查什麼MiME emails是其中的一個 花花公子 人們所關注。你知道...所以電子郵件不是隻發送文本,但你可以把花哨的HTML放在它... 你知道我在說什麼嗎?