我正在编写一个程序,它发送电子邮件并想知道接收者何时收到我发送给他的电子邮件。如何使用 JavaMail API 做到这一点?
如果我使用 SMTPMessage,设置通知选项后如何处理结果?
SMTPMessage smtpMsg = new SMTPMessage(msg);
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);
我正在编写一个程序,它发送电子邮件并想知道接收者何时收到我发送给他的电子邮件。如何使用 JavaMail API 做到这一点?
如果我使用 SMTPMessage,设置通知选项后如何处理结果?
SMTPMessage smtpMsg = new SMTPMessage(msg);
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);
没有标准的方法可以得到全面接受和尊重。不过,我看到您有一些选择:
在值中添加带有您的电子邮件地址的标题“Return-Receipt-To”。如果电子邮件的收件人有一个认可此标头的客户,则在打开电子邮件时会向您发送回执。请注意,这并不可靠,因为用户总是可以决定不发送收据,即使他有一个支持它的客户端。
将图像添加到从服务器加载的电子邮件中,并在图像上放置一个包含用户电子邮件地址的参数。当电子邮件加载时,图像将从您的服务器加载。编写一个脚本来收集电子邮件参数,然后传递一个空白图像。然而,这也不可靠,因为许多邮件客户端会提示用户是否希望下载图像,并且他们总是可以选择不下载。此外,一些(大部分是较旧的)电子邮件客户端不支持图像。
也许最可靠的方法是根本不在您的电子邮件中包含该消息。仅包含指向可以阅读邮件的网站的链接,并在链接中包含他们的电子邮件地址或唯一代码。这样,您就可以确切地知道谁阅读了该消息。当然,这样做的缺点是人们实际上并没有在收件箱中收到邮件,而且他们也可能选择不去网站阅读。
最终,我认为你将不得不想出一个创造性的解决方案来解决这个问题,除非你很高兴得到参差不齐的结果。
好的,这是一个古老的讨论,但是:
您只需要在消息的标题中再添加一个字段。为此,您必须使用类的方法addHeader
,Part
由Message
类实现。此方法接收 2 个参数,type
以及value
header。
要获得确认,您必须添加此标头:
Disposition-Notification-To
这value
是我们要发送确认答案的邮件:
message.addHeader("Disposition-Notification-To","mail@example.com");
注意:请注意,如今,像 gmail 之类的许多邮件服务器都在丢弃此请求,因此这不会生效,但是,如果您确定(像我一样)接收服务器允许这样做,它将像魅力一样工作。
请在此处查看我的答案(当有人问及有关 ruby on rails 的问题时)。这基本上是相同的答案。
还有另一种方法可以查明是否已收到电子邮件,即收到未送达的电子邮件。我在这里看到了一个相当不错的 Java 实现。
他们使用 javax.mail(用于邮件处理)和 guava(用于处理字符串和集合)。
只需在您的消息中添加一个显示设置为无的虚拟图像。然后将此图像的 src 属性设置为您要调用的 url