gpt4 book ai didi

java - 使用 Spring Boot 发出有关退回邮件的警报

转载 作者:太空宇宙 更新时间:2023-11-04 09:28:35 24 4
gpt4 key购买 nike

我有一个发送电子邮件的 Spring Boot 应用程序。对于任何需要通知的操作,都会在数据库中创建一个状态为 PENDINGMail 实例,并运行一个作业以每分钟发送待处理的电子邮件。 Mail 实例的状态设置为 PENDINGSENTFAILED

try {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.from", myEmailAddress);
props.put("mail.smtp.timeout", 2000);

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});

MimeMessage message = new MimeMessage(session);
MimeMultipart content = getContent(mail, message, username);
message.setContent(content);
Transport.send(message);
mail.setStatus(MailStatus.SENT);
mailService.save(mail);
} catch (MailConnectException mce) {
mail.setStatus(MailStatus.FAILED);
mailService.save(mail);
} catch (Exception e) {
// other actions
}

现在,如果提供了有效的电子邮件 ID,则可以正常工作。但是,当接收电子邮件地址不存在(例如 somerandomname@gmail.com)时,不会引发异常。从我从 SO 和其他地方的类似问题中读到的内容来看,我知道邮件发送是一个异步过程,因此无法确定给定的电子邮件是否存在(或收件箱已满等其他问题)。这就是为什么在 Transport.send(message); 语句之后,无论电子邮件地址是否存在,mail.setStatus(MailStatus.SENT); 语句都将始终执行。稍后,将实际尝试发送邮件,并且我在 myEmailAddress 中收到一封电子邮件,内容如下:

The response from the remote server was: 550 5.1.1 somerandomname@gmail.com User unknown

好的,到目前为止已接受。但现在我需要一种方法来提醒用户电子邮件无法发送,因为他们输入了无效的电子邮件,以便他们可以更新电子邮件。更具体地说,我需要将 Mail 实例的状态设置为 FAILED。实现这一目标的最佳方法是什么?

最佳答案

如果您使用 AWS SES 等服务发送邮件,您可以接收有关退回邮件(和投诉)的通知,既可以简单地作为供人阅读的通知,也可以作为可用于调用 Spring Boot 服务器上的警报端点的编程触发器(例如通过 AWS Lambda)。还有其他服务可以执行相同的操作,例如 SendGrid。

关于java - 使用 Spring Boot 发出有关退回邮件的警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com