2012-08-08 68 views
2

我在Linux下有一個小應用程序,用於接收使用smtpd.SMTPServer的電子郵件。下面是小的測試代碼:用Python中的SMTPServer接收電子郵件:

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) 
     return 

server = CustomSMTPServer(('0.0.0.0', 25), None) 
asyncore.loop() 

我有以下的問題: (1)當使用這一段代碼,發送電子郵件的計算機得到以下信息: 502錯誤:命令「EHLO」不實施了 ,因此服務器無法正確回覆以接收更多數據/與發送電子郵件的計算機(我認爲它是客戶端)進行通信。

不應該像EHLO這樣的基本東西在Ubuntu安裝中首先實現嗎?爲什麼沒有實施? (2)我想通過在Ubuntu中安裝postfix可以安裝EHLO。我這樣做,和相同的測試呼叫繼續,但後來與其他錯誤停止:

Client: RCPT TO: [email protected] 
Server: 554 5.7.1 <[email protected]>: Relay access denied 

(3)在稍後的時間,做一些更多的其他測試之後,我從測試代碼本身的錯誤:

error: [Errno 98] Address already in use 

事實證明,所使用的IP地址已經在使用中如能與

netstat -lnpt 

其中的情況是正在運行的後綴可以看出。停止postfix服務後的地址是不再使用,但當然是回到問題#1:

502 Error: command "EHLO" not implemented 

我想能夠使用SMTPSERVER接收電子郵件 1.無需要安裝postfix 2.使用asyncore

如果有任何關於如何使用python庫以簡單方式實現這個想法的想法,那將是非常棒的!

乾杯 亞歷

回答

3

1)後綴是SMTP服務器,它無關python的smtpd EHLO執行。如果你想要你的自定義SMTP服務器,你不需要後綴,所以隨時刪除它。

2)EHLOESMTP命令,不SMTP,標準smtpd蟒模塊實現SMTP,因此它不具有EHLO實現。

0

試試這個。 當然,它沒有實現EHLO命令,但是使它與HELO命令相同。當然,它可能只會讓你通過第一個絆腳石,但是如果其餘的smtp命令是兼容的,它可能會幫助你:

你可能會在/ usr/lib/python2中找到smtpd.py文件0.7

def smtp_HELO(self, arg): 
    if not arg: 
     self.push('501 Syntax: HELO hostname') 
     return 
    if self.__greeting: 
     self.push('503 Duplicate HELO/EHLO') 
    else: 
     self.__greeting = arg 
     self.push('250 %s' % self.__fqdn) 

#copy the above function and rename it smtp_EHLO 

def smtp_EHLO(self, arg): 
    if not arg: 
     self.push('501 Syntax: HELO hostname') 
     return 
    if self.__greeting: 
     self.push('503 Duplicate HELO/EHLO') 
    else: 
     self.__greeting = arg 
     self.push('250 %s' % self.__fqdn) 

而且,我注意到同一個庫的python3.5版本看起來像它支持EHLO,所以也許你可以嘗試使用python3。但顯然python3似乎不是向後兼容 - 好運。