2008-09-29 119 views
16

使用Java邮件,我想发送电子邮件并检查状态。可能的状态包括:发送电子邮件并检查状态

  • 硬反弹:没有邮件服务器发现
  • 软反弹:邮件服务器中,但找不到帐户
  • 成功

它甚至有可能发送电子邮件,并以我上面描述的方式获得关于交付尝试的一些反馈?

编辑:一位受访者建议寻找一个Java库,该库提供与ListNanny相同的功能。我四处搜寻,但还没有找到任何东西。任何想法,如果这样的图书馆存在?

干杯, 唐

回答

5

你不能这样做可靠或一致。如果您的本地邮件服务器将其传递到企业外出邮件服务器上,然后当该服务器尝试将其传递时它会反弹,会发生什么情况?如果邮件服务器无法与其他邮件服务器通信,并且邮件在4天后超时,会发生什么情况?

1

查找邮件服务器和连接:很简单。检查帐户:可能。但这取决于您是否能够首先访问邮件服务器。它可能会拒绝你的连接尝试(例如,因为您的网络被列入黑名单)

最复杂的事情就是你所谓的“成功”:

简短的回答:第

龙答:理论上这将是可能的,但是如果不知道状态,你将不得不等待几个小时。使用重名列表,白名单,阻止垃圾邮件的邮件服务器很多只会在多次投递尝试后才接受邮件。只有当邮件终于送达或放弃时,您才会知道送达的成功。并且取决于邮件服务器负载,发送电子邮件可能被推迟一段任意的时间。

1

我不是专门用Javamail做的,但我会这样说:即使“成功”也许不会成功。

你对软硬故障的定义应该足够简单来检查。如果你找不到服务器很难,如果你connet和服务器说“找不到邮箱”它是“软”。但是如果服务器接受该消息然后稍后反弹呢?许多前端服务器通过设计或必要性接受未知消息(“真实”后端服务器的前端中继),并且如果稍后发现该消息被发送到无效地址,则该消息被反弹回发送方。在这种情况下,如果真的不成功,你会发送“成功”的发送。

确保交付几乎不可能,而不会出现某种嵌入消息中的“点击此处”。

3

您需要做的是将信封SMTP发件人设置为您监控NDR邮件的地址。你必须解析他们进来的电子邮件,并弄清楚出了什么问题。这通常用于邮件列表,像ListNanny这样的产品用于处理邮件(这是一个.NET产品,但我确定有一个Java等价物,或者你可以自己写)。

信封“来自”不同于“来自”地址的信息。它是您的代码和MTA之间发生的SMTP对话的一部分。所有NDR将被发送到该地址。

+0

ListNanny听起来像我所需要的。尽管如此,我还没有找到一个等效的Java库。 – 2008-09-29 20:11:45

+0

至少在基础层面上,你自己并不太难做到。如果您可以找到NDR来查看,您会发现一些易于解析的半标准数据块。知道你有NDR就足够了。 – 2008-09-29 21:32:16

+0

我对它进行了快速的研究,看起来NDR的具体格式不是标准化的,或者如果是的话,就有很多不兼容的实现。 – 2008-09-29 23:09:28

1

不要依赖于你从服务器返回的信息(如果你回来的话)。

许多邮件服务器现在设置为而不是由于它创建的安全漏洞,表明收件人是否存在。 (例如,如果一个给定的域名正在报告(“是”/“否”)是否存在电子邮件地址,黑客就会简单地在服务器上释放字典攻击以确定所有有效的用户,从而他们得到即时垃圾邮件列表

4

如果您发送的是HTML电子邮件,您可能需要在电子邮件中嵌入一个像素透明图像,图像URL实际上会引用一个返回图像的servlet,该URL也会有某种形式消息ID作为参数 这个想法背后是当用户读取消息时,他/她显示图像,这会触发你的servlet,它向db写入消息已经被读取。

1

你可以使用http://www.mailcounter.info免费服务,以检查您的电子邮件是否已被阅读,以及用户阅读了多少次。它是一项免费服务。

1

您应该做的是实际检查收件人的电子邮件的MX记录(电子邮件地址的域部分的DNS MX查询),并通过已解决的SMTP服务器发送邮件。

这样,如果MX记录没有找到,你会得到一个“Hard Bounce”,如果发现它但send方法抛出一个异常,你会得到一个“Soft Bounce”,如果它通过了 - 你获得“成功”。

您可以使用dnsjava项目来解析MX记录。 http://www.dnsjava.org/

0

link可能会帮助你。这是一个使用RFC 3642和RFC 3464的实验性jar文件。它有一些基本的类,可以让您获得邮件传递状态。还需要Javamail jar文件。