当我发送电子邮件时,有没有检查电子邮件状态的方法?我知道至少有3种状态:发送、延迟、拒绝,我想要做一些逻辑上的依赖于它。我尝试过很多库,比如javax.mail、simpejavamail,但是没有找到任何获得状态的方法。
我最后一次尝试是:
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上排队
如果我将电子邮件发送到无效地址,则不会更改。
所以,我有几个问题
发布于 2022-07-29 12:02:08
发送电子邮件是异步的,SMTP服务器接受邮件,并尝试传递邮件。如果传递失败(从SMTP发送到下一个SMTP服务器,或从中间SMTP服务器传递到最终SMTP服务器),则将生成一条反弹消息,该消息将被发送到邮件的信封发件人地址。
如果您想知道传递失败,您需要监视信封发件人地址的邮箱,并解析接收到的邮件(例如使用JakartaMail的dsn.jar,特别是com.sun.mail.dsn.DeliveryStatus)。另见RFC 3464。
理论上,您可以通过请求传递状态通知(基本上是“正面”的反弹,以同样的方式传递)来跟踪成功的传递,但根据我的经验,许多邮件服务器并不满足对DSNs的请求。因此,通常情况下,只要你还没有收到回弹,就最好简单地假设成功的交货。
https://stackoverflow.com/questions/72831962
复制相似问题