通过 SMTP 使用 AWS SES 发送电子邮件,错误 421
Posted
技术标签:
【中文标题】通过 SMTP 使用 AWS SES 发送电子邮件,错误 421【英文标题】:Sending email with AWS SES via SMTP,error 421 【发布时间】:2018-08-13 04:00:18 【问题描述】:所以我有一个通过 SES 购买的域,我已经通过 SES 验证了该域。我已经通过使用 workmail Web 应用程序登录电子邮件来测试发送/接收是否有效。尝试使用我的电子邮件发送电子邮件时出现以下错误春天应用。 javax.mail.MessagingException:无法连接到 SMTP 主机:email-smtp.eu-west-1.amazonaws.com,端口:25,响应:421
Appconfig.Java
@Configuration
@PropertySource("app.properties")
@EnableTransactionManagement
public class AppConfig
@Autowired
private Environment env;
@Bean
public JavaMailSender getJavaMailSender()
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("email-smtp.eu-west-1.amazonaws.com");
mailSender.setPort(25);
mailSender.setUsername("noreply@mydomain.com");
mailSender.setPassword("mypassword");
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.starttls.required", "true");
props.put("mail.debug", "true");
return mailSender;
EmailServiceImpl.java
@Component
public class EmailServiceImpl
@Autowired
public JavaMailSender emailSender;
public void sendSimpleMessage(String toAddress, String subject, String text)
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(toAddress);
message.setSubject(subject);
message.setText(text);
emailSender.send(message);
EmailServiceImpl 自动连接到我的 Web 控制器中,我在生成密码重置令牌后发送电子邮件
【问题讨论】:
【参考方案1】:首先,您已按照 AWS 文档中的说明正确完成了所有操作。 您使用 smtp 凭据是正确的,因为您使用他们的 smtp 接口发送邮件,而不是他们的 aws sdk(如果您使用 aws sdk,则必须使用访问密钥和密码)。
但是,这里有一些其他问题可能会帮助您解决我们必须做的问题,因为文档中没有。 您必须对 smtp 发送的错误代码进行故障排除。 大多数情况下,SMTP 错误代码 421 会在收件人邮件服务器非常繁忙时出现,因为它正在接收大量邮件,因此它会通过提供此错误代码暂时延迟您的邮件,或者您的收件人客户端有一些问题。 你可以在这里学习。 https://sendgrid.com/blog/smtp-server-response-codes-explained/#:~:text=421%20%E2%80%93%20Your%20message%20was%20temporarily,locked%20or%20is%20not%20routable。 https://www.arclab.com/en/kb/email/smtp-response-codes-error-messages.html#:~:text=The%20SMTP%20error%20421%20is,see%20SMTP%20Error%20451%20below)。 您可以尝试稍后发送邮件,也可以尝试使用不同的端口发送。
我的事件: 我使用 AWS SES 从我的 Springboot 应用程序发送邮件。 我也像你一样使用 AWS ses 的 SMTP 接口。 AWS 管理控制台上列出了 3 个端口用于发送邮件。 但是,当我使用端口 465 时,它无法正常工作。 但是,当我使用端口 25 或端口 587 时,它正在工作。 但是,即便如此,始终建议使用 587,因为它是 IETF 推荐的,并且与 TLS 一起使用是最安全的。 最不推荐使用465端口。你可以在这里学习,但是AWS支持它。有很多客户仍然支持它,但它没有广泛使用。 正如,我告诉过你在我的情况下它失败了。 您可以在此处了解所有 3 个端口以及端口 465 的功能与端口 25 和 587 的不同之处 但是,您可以通过使用 smtps 协议来解决端口 465 的问题。 端口 25,587(使用 smtp 作为协议) 端口 465(使用 smtps 作为协议,因为在这种情况下客户端必须启动 tls 加密) https://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-connect.html 您可以从哪里获得选择端口的指南。 https://pepipost.com/blog/25-465-587-2525-choose-the-right-smtp-port/
【讨论】:
【参考方案2】:您正在使用端口 25。SES 使用端口 465 或 2465。另外请记住使用 SES SMTP 凭证,而不是您的 IAM 凭证 (AccessKey)。
Connecting to the Amazon SES SMTP Endpoint
【讨论】:
以上是关于通过 SMTP 使用 AWS SES 发送电子邮件,错误 421的主要内容,如果未能解决你的问题,请参考以下文章
使用 django 和 AWS SES 签名 V4 发送电子邮件