13

我正在编写一个程序,它发送电子邮件并想知道接收者何时收到我发送给他的电子邮件。如何使用 JavaMail API 做到这一点?

如果我使用 SMTPMessage,设置通知选项后如何处理结果?

SMTPMessage smtpMsg = new SMTPMessage(msg);
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);
4

6 回答 6

23

没有标准的方法可以得到全面接受和尊重。不过,我看到您有一些选择:

  • 在值中添加带有您的电子邮件地址的标题“Return-Receipt-To”。如果电子邮件的收件人有一个认可此标头的客户,则在打开电子邮件时会向您发送回执。请注意,这并不可靠,因为用户总是可以决定不发送收据,即使他有一个支持它的客户端。

  • 将图像添加到从服务器加载的电子邮件中,并在图像上放置一个包含用户电子邮件地址的参数。当电子邮件加载时,图像将从您的服务器加载。编写一个脚本来收集电子邮件参数,然后传递一个空白图像。然而,这也不可靠,因为许多邮件客户端会提示用户是否希望下载图像,并且他们总是可以选择不下载。此外,一些(大部分是较旧的)电子邮件客户端不支持图像。

  • 也许最可靠的方法是根本不在您的电子邮件中包含该消息。仅包含指向可以阅读邮件的网站的链接,并在链接中包含他们的电子邮件地址或唯一代码。这样,您就可以确切地知道谁阅读了该消息。当然,这样做的缺点是人们实际上并没有在收件箱中收到邮件,而且他们也可能选择不去网站阅读。

最终,我认为你将不得不想出一个创造性的解决方案来解决这个问题,除非你很高兴得到参差不齐的结果。

于 2010-09-09T13:41:29.980 回答
3

好的,这是一个古老的讨论,但是:

我在这里找到了一个简单且有效的解决方案(西班牙语链接)。

您只需要在消息的标题中再添加一个字段。为此,您必须使用类的方法addHeaderPartMessage类实现。此方法接收 2 个参数,type以及valueheader。

要获得确认,您必须添加此标头:

Disposition-Notification-To

value是我们要发送确认答案的邮件:

message.addHeader("Disposition-Notification-To","mail@example.com");

注意:请注意,如今,像 gmail 之类的许多邮件服务器都在丢弃此请求,因此这不会生效,但是,如果您确定(像我一样)接收服务器允许这样做,它将像魅力一样工作。

于 2016-01-20T12:54:25.520 回答
1

请在此处查看我的答案(当有人问及有关 ruby​​ on rails 的问题时)。这基本上是相同的答案。

电子邮件打开通知 - ruby​​ on rails

于 2010-09-09T13:26:37.717 回答
1

还有另一种方法可以查明是否已收到电子邮件,即收到未送达的电子邮件。我在这里看到了一个相当不错的 Java 实现。

他们使用 javax.mail(用于邮件处理)和 guava(用于处理字符串和集合)。

于 2014-02-04T06:32:01.090 回答
1

只需在您的消息中添加一个显示设置为无的虚拟图像。然后将此图像的 src 属性设置为您要调用的 url

于 2017-01-19T07:47:11.510 回答
0

您可以使用 SMTP 消息并请求传递状态(我不知道它是在提供商收到邮件时到来还是在用户打开邮件时到来)。JavaMail 不直接直接支持这些功能,您必须阅读 RFC 3464。我也找到了这个带有示例的线程,但没有尝试javamail

你也可以看看websina

于 2010-09-09T14:13:01.943 回答