【问题标题】:How can I know if my sent email reach the receiver or not java?我如何知道我发送的电子邮件是否到达接收者?
【发布时间】:2013-06-03 15:42:33
【问题描述】:

我正在使用此代码发送电子邮件

Email email = new SimpleEmail();
email.setHostName("smtp.googlemail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setSSLOnConnect(true);
email.setFrom("user@gmail.com");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("foo@bar.com");
email.send();

http://commons.apache.org/proper/commons-email/userguide.html

我如何知道 foo@bar.com 是否是真实的电子邮件并接收到消息?

 email.addTo("foo@bar.com");

【问题讨论】:

  • 一般情况下,您不知道:有些邮件服务器会丢弃电子邮件,尤其是当他们认为这是垃圾邮件时。
  • 您是在谈论运行测试用例以确保电子邮件到达您控制的电子邮件地址,还是在谈论发送多封电子邮件并确保每封电子邮件都到达真实人的通用案例?

标签: java email apache-commons


【解决方案1】:

如果没有专有的 API 和基础架构,就没有可靠的方法来跟踪电子邮件的传递。仅基于 SMTP、POP 和/或 IMAP,无法完全确定电子邮件是否已已阅读

但是,有一些选项可能会为您提供有关地址有效性的一定程度的信息(从电子邮件地址解析器开始),侦听可能从接收服务器发送的错误消息 (Bounce message) 和请求送达通知 (Return receipts)。

此外,您可以发送 HTML 电子邮件并嵌入图像链接并跟踪 URL 是否已被调用。但即使这样也不可靠,因为电子邮件客户端可能不显示图像,该 URL 可能已被病毒扫描程序调用等。这意味着您可能会收到很多误报/误报。

【讨论】:

  • 我认为 1 像素图像 url 方法不再适用于主要电子邮件服务。据我所见,例如,Gmail 会解析电子邮件并提取图像,然后自动将它们上传到他们的服务器(使用他们的 URL)。我不确定每张图片都会发生这种情况,如果有人能证实或证实这一点,那就太好了。
【解决方案2】:

您可以通过执行类似的操作来检查收件人 ID 的有效域

boolean result = true;

try {
  InternetAddress emailAddr = new InternetAddress(email);
  emailAddr.validate();

} catch (AddressException ex) {
  result = false;
}
  return result;

更新
否则,如果您真的想确保这一点,那么有一些解决方法可以在您的 html 电子邮件中添加标题字段,我不记得确切但类似

email.AddHeaderField("Disposition-Notification-To","<abc@xyz.com>");

在这种情况下可以工作。

【讨论】:

  • 这距离确保邮件到达所需的收件人非常远
  • 那么没有办法确保您始终收到交付或打开消息通知。邮件服务器可能会接受邮件并在之后将其丢弃。用户可以阅读邮件但忽略通知。
【解决方案3】:

您需要使用 JavaMail 的 POP3 功能。

这里有一个示例:http://alvinalexander.com/java/javamail-pop-pop3-reader-email-inbox-example

如果没记错的话:服务器是pop.gmail.com,端口是995

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多