2008-11-11 30 views
2

最近,我不得不將我的一個Web應用程序移動到一個新的託管服務提供商。然而,當我嘗試從新服務器發送電子郵件時,郵件和Web服務仍然保留在舊託管站點上,但出現錯誤;POP-Before-SMTP

「服務器拒絕一個或多個收件人地址的服務器響應爲:

450 <email_address>: Recipient address rejected: Greylisted for 5 minutes 

我問我的舊的託管服務提供商什麼,我需要做什麼來解決這個問題,他們回答與

郵件服務器在 SMTP之前運行POP。如果在通過 發送郵件之前收到的有效POP登錄不是 服務器,那麼郵件是 灰色列表並保留5分鐘重試前。

爲了防止這種情況,根本就發送郵件

之前接收

沒有人有任何想法我如何在C#中的SMTP之前做了POP?

回答

2

我不知道如何C#會處理的細節(插座?),但基本上你只是想做出新的POP服務器的連接。這裏是一個示例POP交易:

$ telnet new-pop-server.com 110 
Connected to new-pop-server.com. 
Escape character is '^]'. 
+OK 
USER <username> 
+OK 
PASS <password> 
+OK    // you're authenticated at this point 
LIST 
+OK 
.     // no new messages! 
QUIT 
+OK 

一旦您被授權,您應該能夠以編程方式發送您的郵件。 (USER,PASS,LIST,QUIT)是您要發送的所有命令(pop3 RFC)。

1

他們greylist你,因爲你從你的新提供者連接,對吧?新提供商是否擁有允許來自服務器IP範圍的連接的SMTP?

另一種方法是做MX-查找自己,並直接連接到了哪個地址你發送郵件到權威的SMTP服務器。但是,這也要求您處理灰名單,意思是對4xx響應進行重試,以獲得可靠的交付。

也許你應該問你的供應商,如果他們提供AUTH SMTP作爲替代藏漢,它是一種與需要POP登錄失敗的另一個可能的點使用SMTP服務之前。

+0

即時,是的灰名單是因爲我試圖從我的新提供者連接到我的郵件和Web服務所在的舊提供者。不知道我的新提供者是否允許來自服務器IP-ranger的連接。我正在學習的一件事是,使用共享主機比它的價值更麻煩。 – Skittles 2008-11-11 22:54:22

1

我很確定POP3沒有內置到.NET Framework中,因此您需要按照Owen的建議自己實現它,或者查找現有的POP3庫(如this one)。

更好的是說服你的新託管服務提供商放寬灰名單規則。

1

我設法爲此編寫代碼。我願意分享解決方案,(如果有人感興趣?)但不知道如何最好地把代碼放在Stackoverflow上?它大約有50行代碼。

+0

也許可以鏈接到你的博客,如果你覺得其他人可能想使用它? – Owen 2008-11-12 22:25:02

1

建議我將代碼添加到我的博客。這不是有史以來最好的博客,但有人可能會發現它有用... POP-Before-SMTP

1

你已經有你要找的代碼,但如果我可以加入我的想法:像其他人已經建議的,我將與舊供應商一起檢查他們是否提供AUTH和SMTP。對我而言,他們所說的是,「只有當你來自同一IP範圍/子網,或者如果你已經通過身份驗證時,才能使用SMTP」。很多ISP都使用他們的SMTP服務器來做這件事。如果您通過特定ISP連接,則可以使用SMTP而不明確提供任何AUTH憑證。如果您切換到另一個ISP並想要使用舊的ISP的SMTP,則必須使用SMTP服務器進行明確的身份驗證。