如何使用 JavaMail API 接收已发送电子邮件的确认?我在这里找到了一个简单而有效的解决方案(西班牙语链接)。

2022-09-04 07:08:40

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

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

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

答案 1

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

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

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

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

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


答案 2

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

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

您只需要在邮件标题中再添加一个字段即可。要实现此目的,必须使用由 class 实现的 class 方法。此方法接收 2 个参数、标头的类型addHeaderPartMessage

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

Disposition-Notification-To

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

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

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


推荐