首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查电子邮件状态

问检查电子邮件状态
EN

Stack Overflow用户
提问于 2022-07-01 16:06:14
回答 1查看 132关注 0票数 0

当我发送电子邮件时,有没有检查电子邮件状态的方法?我知道至少有3种状态:发送、延迟、拒绝,我想要做一些逻辑上的依赖于它。我尝试过很多库,比如javax.mail、simpejavamail,但是没有找到任何获得状态的方法。

我最后一次尝试是:

代码语言:javascript
复制
  String from = "********";
    String pass = "*********";
//    String[] to = { "to_mail_address@****.com" };
    String host = "smtp.yandex.ru";
    Properties props = System.getProperties();
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.user", from);
    props.put("mail.smtp.password", pass);
    props.put("mail.smtp.port", "465");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.ssl.enable", "true");
    props.put("mail.smtp.quitwait", "false");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.debug", "true");

    Session session = Session.getDefaultInstance(props, null);

    SMTPTransport transport = (SMTPTransport) session.getTransport("smtp");
    transport.connect(from,pass);
    SMTPMessage message = new SMTPMessage(session);
    message.setReturnOption(2);
    message.setNotifyOptions(7);
    message.setFrom(new InternetAddress("******"));
    message.setRecipients(
      Message.RecipientType.TO, InternetAddress.parse("******"));
    message.setSubject("Test mail");

    String msg = "This is my first email using JavaMailer";

    MimeBodyPart mimeBodyPart = new MimeBodyPart();
    mimeBodyPart.setContent(msg, "text/html; charset=utf-8");

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(mimeBodyPart);

    message.setContent(multipart);
    transport.sendMessage(message,InternetAddress.parse("zcaxc@inbox.ua"));
    var i1 = transport.getLastReturnCode();
    var i2 = transport.getReportSuccess();
    return transport.getLastServerResponse();
  }

我从服务器那里得到这样的响应:

250 2.0.0 Ok:在vla5-3832771863b8.q头-c.yandex.net 1656683490-NIUBgcx5PS-pUSKMoc1上排队

如果我将电子邮件发送到无效地址,则不会更改。

所以,我有几个问题

  1. 做这件事最好的方法是什么
  2. 所有SMTP服务器都做响应吗?如果它们不响应怎么办?
EN

回答 1

Stack Overflow用户

发布于 2022-07-29 12:02:08

发送电子邮件是异步的,SMTP服务器接受邮件,并尝试传递邮件。如果传递失败(从SMTP发送到下一个SMTP服务器,或从中间SMTP服务器传递到最终SMTP服务器),则将生成一条反弹消息,该消息将被发送到邮件的信封发件人地址。

如果您想知道传递失败,您需要监视信封发件人地址的邮箱,并解析接收到的邮件(例如使用JakartaMail的dsn.jar,特别是com.sun.mail.dsn.DeliveryStatus)。另见RFC 3464。

理论上,您可以通过请求传递状态通知(基本上是“正面”的反弹,以同样的方式传递)来跟踪成功的传递,但根据我的经验,许多邮件服务器并不满足对DSNs的请求。因此,通常情况下,只要你还没有收到回弹,就最好简单地假设成功的交货。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72831962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档