最近,我不得不将我的一个Web应用程序移动到新的托管服务提供商。邮件和Web服务仍然保留在旧的托管站点上,但是,当我尝试从新服务器发送电子邮件时,我收到错误;
“服务器拒绝了一个或多个收件人地址。服务器响应为:
450 <email_address>: Recipient address rejected: Greylisted for 5 minutes
我问我的旧托管服务提供商我需要做些什么来解决这个问题,他们回复了
邮件服务器之前在POP上运行 SMTP。如果没有有效的POP登录 在发送邮件之前收到 服务器,然后是邮件 灰名单并保持5分钟 在重试之前。
要防止这种情况,只需执行接收即可 在发送邮件之前
有没有人知道我如何在C#中使用SMTP之前的POP?
答案 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服务器进行显式身份验证。