Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaMail API接收已发送电子邮件的确认?_Java_Email_Smtp_Email Confirmation - Fatal编程技术网

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

如何使用JavaMail API接收已发送电子邮件的确认?,java,email,smtp,email-confirmation,Java,Email,Smtp,Email Confirmation,我正在编写一个程序,它发送电子邮件,并想知道接收者何时收到我发送给他的电子邮件。如何使用JavaMail API实现这一点 如果我使用SMTPMessage,在设置了notify选项后,如何准确地处理结果 SMTPMessage smtpMsg = new SMTPMessage(msg); smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS); 请看我的回答(当被问及RubyonRails时)。答案基本相同 没有一种标准的方法能被所有人接受

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

如果我使用SMTPMessage,在设置了notify选项后,如何准确地处理结果

SMTPMessage smtpMsg = new SMTPMessage(msg);
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);
请看我的回答(当被问及RubyonRails时)。答案基本相同


没有一种标准的方法能被所有人接受和尊重。不过,我看到您有一些选择:

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

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

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


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

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


您还可以查看

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


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

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

我找到了一个简单有效的解决方案(西班牙语链接)。 您只需要在消息的标题中再添加一个字段。要实现这一点,必须使用
Part
类的方法
addHeader
,该方法由
Message
类实现此方法接收两个参数,标题的
类型

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

Disposition-Notification-To
是我们要发送确认答案的邮件:

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

注意:请注意,现在很多邮件服务器(如gmail)都在丢弃此请求,因此这不会产生效果,但是,如果您确信(如我)接收方服务器允许这样做,将像一个符咒一样工作。

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

SMTPMessage上的通知将通知您已成功传递到收件人的邮箱服务器,而不是他们的桌面,或者他们已阅读该图像。哦,对不起,我搞错了。我的意思是我需要一个通知,当信息被传递。然后我认为你已经找到了你的解决方案。这几乎应该立即发生。对于MS Office Outlook 2007,如果希望它提示收件人阅读回执,请使用“处置通知收件人”标题。