2014-02-27 81 views
0

我有一個python腳本在本地主機上運行SMTP服務器。這是我非常簡單的代碼:python SMTP - 套接字錯誤

import smtpd 
import asyncore 

class CustomSMTPServer (smtpd.SMTPServer): 

    def process_message(self, peer, mailfrom, rcpttos, data): 
     print 'Receiving message from:', peer 
     print 'Message addressed from:', mailfrom 
     print 'Message addressed to :', rcpttos 
     print 'Message length  :', len(data) 

server = CustomSMTPServer(('127.0.0.1', 25), None) 

asyncore.loop() 

如果我從本地主機上的電子郵件中STMP服務器成功到達運行的電子郵件客戶端發送電子郵件。但是,如果我從位於同一本地網絡(192.168.1.1/24)的計算機上運行的電子郵件客戶端發送電子郵件,它將不會成功。這裏下面的錯誤,我從Outlook Express中得到:

The connection to the server has failed. Account 'localhost', Server '192.168.1.115'.   
Protocol SMTP, Port: 25, Secure(SSL): No, Socket Error: 10061, Error Number: 0x800CCC0E 

以防萬一,我停用邁克菲防火牆在兩臺PC,但我仍然得到同樣的錯誤。

哪裏可以解決問題?它與asyncore.loop()方法有什麼關係?謝謝!

回答

3

您的服務器回送接口上運行:

server = CustomSMTPServer(('127.0.0.1', 25), None) 

這個接口是不是來自任何外部網絡訪問,只能從本地機器。

您將需要在真實的網絡接口(例如基於錯誤消息的192.168.1.115)上啓動電子郵件服務器。

另外,我懷疑你能夠檢索任何消息。您正在運行SMTP服務器:它通過SMTP接受郵件,但不提供POP3/IMAP服務,因此您無法使用遠程電子郵件客戶端檢索郵件。雖然SMTP服務器可用於在本地基於文件的消息存儲中存儲消息(如果格式正確,並且運行在同一臺計算機上的電子郵件客戶端可以從該文件中檢索消息)。