2

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

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

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

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

邮件服务器在 SMTP 之前在 POP 上运行。如果在通过服务器发送邮件之前未收到有效的 POP 登录,则邮件将被列入灰名单并保留 5 分钟,然后重试。

为了防止这种情况,只需在发送邮件之前进行接收

有谁知道我如何在 C# 中的 SMTP 之前执行 POP?

4

6 回答 6

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

于 2008-11-11T22:40:43.063 回答
1

我很确定 POP3 没有内置到 .NET Framework 中,因此您需要按照 Owen 的建议自己实现它,或者寻找现有的 POP3 库,例如这个.NET Framework 。

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

于 2008-11-12T00:02:40.997 回答
1

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

于 2008-11-18T01:47:26.907 回答
1

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

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

也许您应该询问您的提供商他们是否也提供身份验证 SMTP 作为替代方案,这是另一个可能的故障点,在使用 SMTP 服务之前需要 POP 登录。

于 2008-11-11T22:47:48.307 回答
1

你已经有了你要找的代码,但是如果我可以补充一下我的想法:就像其他人已经建议的那样,我会与旧的提供商核实他们是否提供带有 SMTP 的 AUTH。对我来说,他们的意思是,“只有当您来自相同的 IP 范围/子网,或者您已经通过身份验证时,您才能使用 SMTP”。许多 ISP 使用他们的 SMTP 服务器执行此操作。如果您通过特定的 ISP 连接,则可以使用 SMTP 而无需明确提供任何 AUTH 凭据。如果您切换到另一个 ISP 并想使用旧 ISP 的 SMTP,则必须明确地通过 SMTP 服务器进行身份验证。

于 2008-11-18T05:58:09.990 回答
1

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

于 2008-11-12T22:08:46.980 回答