无法从AWS EC2发送SMTP邮件

时间:2017-09-15 10:51:31

标签: java amazon-web-services amazon-ec2

我正在尝试使用SMTP发送电子邮件。 它在我的本地工作正常。但是当我在AWS EC2服务器上构建它时,它不起作用。

这是我配置和发送电子邮件的代码!
对我有什么想法吗?

try{

     Properties props = System.getProperties();
     props.put("mail.smtp.starttls.enable",true);
     props.put("mail.smtp.host","smtp.gmail.com");
     props.put("mail.smtp.user","test@gmail.com");
     props.put("mail.smtp.password","testpassword");
     props.put("mail.smtp.port","587");
     props.put("mail.smtp.auth",true);
     props.put("mail.smtp.ssl.trust", "*");

     String[] to = {toEmail};

     Session session = Session.getDefaultInstance(props, null);
     MimeMessage message = new MimeMessage(session);
     message.setFrom(new InternetAddress("test@gmail.com"));
     InternetAddress[] toAddress = new InternetAddress[to.length];

        // To get the array of addresses
        for( int i=0; i < to.length; i++ ) { // changed from a while loop
            toAddress[i] = new InternetAddress(to[i]);
        }
        System.out.println("EMAIL TO:"+toEmail);

        for( int i=0; i < toAddress.length; i++) { // changed from a while loop
            message.addRecipient(Message.RecipientType.TO, toAddress[i]);
        }
        message.setSubject(subject);
        message.setText(content);
        Transport transport = session.getTransport("smtp");
        transport.connect("smtp.gmail.com","test@gmail.com","testpassword");
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
  }
  catch(Exception ex){
         log.debug("send Email failed", ex);
  }

2 个答案:

答案 0 :(得分:1)

AWS EC2不允许正常使用端口25 - SMTP端口。

受到严重扼杀。

如果您非常轻松地使用它,那么您可能会看到偶尔从AWS账户发送电子邮件。但一般来说它不可靠

要解决此问题,有两个选项

  1. 使用AWS SES简单电子邮件服务。或者SNS用于一些非常简单的用例
  2. 请AWS支持部门删除限制https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request

答案 1 :(得分:0)

我们最近也受到这个问题的困扰。默认情况下,AWS限制可以源自ec2实例的连接数量。该限制是EC2服务本身的一部分。具有讽刺意味的是,它没有在EC2服务的“限制”部分中将其作为“限制”提及。表格中已提及此限制,但该限制已从您的帐户中删除:

  

我无法通过Amazon Elastic Compute Cloud(Amazon EC2)实例的端口25发送电子邮件,或者遇到了频繁的超时错误。如何在EC2实例上卸下端口25节流阀?

在EC2的AWS服务限制页面上也提到了它:

ss#1

将表单提交给AWS后,只需几分钟即可完成删除。

参考文献