我如何知道我发送的电子邮件是否到达接收者或不是java?

时间:2013-06-07 10:49:19

标签: java email apache-commons

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

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");

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您需要使用JavaMail的 POP3 功能。

您在此处有一个示例:http://alvinalexander.com/java/javamail-pop-pop3-reader-email-inbox-example

我记得很清楚:服务器是 pop.gmail.com ,端口是 995

答案 2 :(得分:1)

您可以通过执行类似

的操作来检查收件人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>");

可能适用于这种情况。