如何使用JavaMail API接收已发送电子邮件的确认?

我正在编写一个程序,它会发送电子邮件,并想知道接收方何时收到我发给他的电子邮件。 如何使用JavaMail API执行此操作?

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

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

没有标准的方法可以全面接受和尊重。 我看到你有一些选择,但是:

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

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

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

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

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

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

您只需要在消息的标题中再添加一个字段。 要实现这一点,您必须使用Part类的方法addHeader ,由Message类实现。 此方法接收2个参数,标头的typevalue

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

 Disposition-Notification-To 

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

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

注意:请注意,现在很多像gmail这样的邮件服务器正在丢弃这个请求,所以这不会有效,但是,如果你确定(像我一样)接收服务器允许这样做,就会像魅力一样工作。

请在这里看到我的答案(当被问及关于轨道上的ruby时)。 这基本上是相同的答案。

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

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

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

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

您可以使用SMTP邮件并请求传递状态(我不知道它是在提供者收到邮件时还是在用户打开邮件时)。 JavaMail不直接直接支持这些function,你必须阅读RFC 3464.我也发现这个post有例子但没试过它javamail

你也可以看看websina