【问题标题】:How can I recieive confirmation for delivered email with JavaMail API?如何使用 JavaMail API 接收已发送电子邮件的确认?
【发布时间】:2011-04-10 06:24:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: java email smtp email-confirmation


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • SMTPMessage 上的通知将通知您成功发送到收件人的邮箱服务器,而不是发送到他们的桌面,或者他们已阅读。
    • 哦,我弄错了,对不起。我的意思是当消息传递时我需要通知。
    • 那我想你已经找到了解决方案。这应该几乎立即发生。
    • 对于 MS Office Outlook 2007,如果您希望它提示收件人提供已读回执,请使用“Disposition-Notification-To”标题。
    【解决方案2】:

    好的,这是一个老话题,但是:

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

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

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

    Disposition-Notification-To
    

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

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

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

    【讨论】:

      【解决方案3】:

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

      Email open notification - ruby on rails

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            你也可以看看websina

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-12-18
              • 2012-10-29
              • 2012-03-16
              • 1970-01-01
              • 2013-06-13
              • 1970-01-01
              相关资源
              最近更新 更多