通过SMTP使用AWS SES发送电子邮件,错误421

时间:2018-03-05 13:22:20

标签: amazon-web-services spring-boot amazon-ses

所以我通过SES购买了一个域名,我已经通过SES验证了。我通过使用workmail网络应用程序登录电子邮件测试了发送/接收工作。我在尝试使用my发送电子邮件时收到以下错误春季应用。 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自动装入我的网络控制器,我在生成密码重置令牌后发送电子邮件

2 个答案:

答案 0 :(得分:1)

首先,您已经按照AWS文档中所述正确完成了所有操作。 您可以正确使用smtp凭据,就像使用他们的smtp界面发送邮件一样,而不是使用他们的aws sdk发送邮件(如果使用aws sdk,则必须使用acces密钥和密码)。

但是,这里还有其他一些问题,可能会帮助您解决文档中没有的我们必须解决的问题。 您必须对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%20routablehttps://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的问题。 25587端口(使用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/

答案 1 :(得分:0)

您正在使用端口25. SES使用端口465或2465.还要记住使用SES SMTP凭据而不是您的IAM凭据(AccessKey)。

Connecting to the Amazon SES SMTP Endpoint

相关问题