通过POP3自动检查退信电子邮件?

10

有人能推荐一个软件或.NET库,可以检查退信邮件和退信原因吗?我会将退信邮件收到一个可以读取的POP3帐户中。

我需要它来保持我的用户数据库不受无效电子邮件地址的影响,并希望自动化此过程(将用户标记为无效电子邮件)。


我发现Github上的这个工具非常好用,它很轻便,而且功能齐全。链接为https://github.com/rgl/MailBounceDetector - Guru Kara
5个回答

6

我曾经处理过很多反弹邮件和不同种类的反弹邮件。如果你想要完全确信你正在查看的电子邮件确实是某种特定类型的反弹邮件,我强烈推荐使用一个好的过滤器。我曾经使用过Boogie Tools,效果非常好。它可以告诉你这是什么样的反弹邮件,硬反弹、软反弹、暂时性反弹或者甚至是有人试图取消订阅。它拥有多个API,包括.Net,并且我发现使用非常容易。


我发现这个Github上的工具非常好用,它很轻便,而且功能齐全。https://github.com/rgl/MailBounceDetector - Guru Kara

2

使用TcpClient很容易实现。打开服务器:

TcpClient tcpClient = new TcpClient();
tcpClient.Connect(POP3Server, POP3Port);
NetworkStream stream = tcpClient.GetStream();

阅读欢迎消息:

int read = stream.Read(inBuffer, 0, inBuffer.Length);
string response = Encoding.ASCII.GetString(inBuffer, 0, read);
if (response.IndexOf("+OK") != 0) throw new ...;

向服务器写回数据:
byte[] outBuffer = Encoding.ASCII.GetBytes("USER " + account + "\r\n");
stream.Write(outBuffer, 0, outBuffer.Length);

这是发送USER命令的步骤。您需要登录,然后才能开始获取消息 - 请参阅POP3 RFC以获取完整的命令列表。如果您不想自己编写,请查看此CodeProject文章


2
根据abfo的说法,POP3协议非常简单,获取邮件很容易。 但解析邮件以获取失败原因更难,可靠地解析出哪个电子邮件导致了失败以及为什么失败真的很难。问题在于退信消息没有标准格式,缺省表单因MTA而异。然后,网站管理员可以调整故障原因,使其更难识别,并且网站管理员可以修改失败消息模板,这使得它几乎不可能。
请查找.NET邮件列表管理器,看能否重用退信处理代码。如果无法实现,请尝试更改发送邮件的工具,以便从唯一(可逆)的发件人发送每封电子邮件(我认为称之为VERP?)。这样,您无需扫描电子邮件正文,就可以通过检查失败消息的收件人地址来确定哪个收件人失败。

0

你的问题让我意识到我原本要使用的 Wordpress Newsletter 插件没有反弹管理功能,我需要找一个有这个功能的替代品。

我找了一段时间,最终选择了免费开源的 PHPlist newsletter manager

他们详细描述了处理反弹的设置,并且还有一个实验性的高级反弹处理功能,可以让你按照自己的需求定制反弹处理方式。

即使你决定不使用 PHPlist,了解他们的做法也会对你有所帮助。


0

感谢答复,非常好! 我自己也做了一些研究并发现 ListNanny - 也非常简单易用,能够告诉你反弹的类型。我将写一些概念证明并看看哪个更好...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接