POP-before-SMTP相关

时间:2008-11-11 22:31:57

标签: c# email smtp pop3

最近,我不得不将我的一个Web应用程序移动到新的托管服务提供商。邮件和Web服务仍然保留在旧的托管站点上,但是,当我尝试从新服务器发送电子邮件时,我收到错误;

“服务器拒绝了一个或多个收件人地址。服务器响应为:

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

我问我的旧托管服务提供商我需要做些什么来解决这个问题,他们回复了

  

邮件服务器之前在POP上运行   SMTP。如果没有有效的POP登录   在发送邮件之前收到   服务器,然后是邮件   灰名单并保持5分钟   在重试之前。

     

要防止这种情况,只需执行接收即可   在发送邮件之前

有没有人知道我如何在C#中使用SMTP之前的POP?

6 个答案:

答案 0 :(得分: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 :(得分:1)

他们为您提供灰名单,因为您从新的提供商处连接,对吗?新提供商是否具有允许来自服务器IP范围的连接的SMTP?

另一种方法是自己进行MX查找,并直接连接到您要向其发送电子邮件地址的授权SMTP服务器。但是,这也要求您处理灰名单,即4xx响应的重试,以便获得可靠的交付。

也许您应该询问您的提供商是否提供auth SMTP作为替代方案,这是在使用SMTP服务之前需要POP登录的另一种可能的失败点。

答案 2 :(得分:1)

我很确定POP3没有内置到.NET Framework中,因此您需要自己实现它,就像Owen建议的那样,或者寻找现有的POP3库,例如this one

更好的是说服您的新托管服务提供商放宽该灰名单规则。

答案 3 :(得分:1)

我设法为此编写代码。我愿意分享解决方案,(如果有人有兴趣?)但不确定如何最好地将代码放在Stackoverflow上?它大约有50行代码。

答案 4 :(得分:1)

根据建议我将代码添加到我的博客中。这不是有史以来最好的博客,但有人可能觉得它很有用...... POP-Before-SMTP

答案 5 :(得分:1)

您已经拥有了您正在寻找的代码,但是如果我可以添加我的想法:就像其他人已经建议的那样,我会向老提供商查询他们是否提供带有SMTP的AUTH。对我而言,他们所说的是,“只有当您来自相同的IP范围/子网,或者您自己进行了身份验证时,才可以使用SMTP”。许多ISP使用他们的SMTP服务器来做这件事。如果通过特定ISP连接,则可以使用SMTP而不显式提供任何AUTH凭据。如果您切换到另一个ISP并想要使用旧ISP的SMTP,则必须使用SMTP服务器进行显式身份验证。