Javamail错误:SMTPAddressFailedException:450与您的IP连接太多(速率控制)

时间:2015-03-20 16:19:51

标签: java spring javamail

我有一个Spring 4.1.1 Web应用程序,用户可以在其中设置一些计划任务。完成这些任务后,管理员将收到使用SMTP方法发送的自动电子邮件。

对于我使用jars的电子邮件:javax.mail-api-1.5.2.jar和mail-1.5.0-b01.jar

首先正确发送电子邮件,但是当任务的频率上升时,我开始获得以下异常,并且所有后续电子邮件都会失败。我可以在10分钟的时间内发送大约30封电子邮件。

com.sun.mail.smtp.SMTPAddressFailedException: 450 too many connections from your IP (rate controlled)

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1862)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1118)
at com.synaptic.email.MessageMail.sendMessage(MessageMail.java:152)
at com.synaptic.email.EmailManagerImpl.sendGeneralEmail(EmailManagerImpl.java:423)

我发送电子邮件的代码段是:

    public void sendMessage(Brand brand, String timeout) throws MessagingException
{
    try {
        // Prepare message
        Properties props = new Properties();

        props.put("mail.smtp.host", mailHost);
        props.put("mail.smtp.connectiontimeout", timeout);
        props.put("mail.smtp.timeout", timeout);
        props.put("mail.smtp.writetimeout", timeout);
        props.put("mail.smtp.port", Integer.parseInt(brand.getBrandProperties().getEmailPort()));

        Session session = Session.getInstance(props);
        message = new MimeMessage(session);
        createMessage();

        if (brand.getBrandProperties().getEmailUsername().isEmpty() && brand.getBrandProperties().getEmailPassword().isEmpty()) {
            // Send email message to SMTP server without auth
            Transport.send(message);
        } else {
            // Send message with auth
            Transport.send(message,brand.getBrandProperties().getEmailUsername(),brand.getBrandProperties().getEmailPassword());
        }
    } catch (MessagingException e) {
        log.error("Failed to send email message.", e);
        throw e;
    }
}

从javamail文档和源代码中可以看出,传输连接在finally语句中是关闭的,因此没有连接应该挂起,但我仍然遇到了这个异常。

我在网上查了但是我找不到增加此限制的方法。

发错时我做错了吗?有没有办法监控电子邮件连接?或者是电子邮件服务器问题?

1 个答案:

答案 0 :(得分:2)

您的服务器告诉您,您在太短的时间内建立了太多连接。这是限制你阻止你滥用服务器的速度。您可能需要支付更高质量的服务才能发送更多消息。有关详细信息,请与您的ISP联系。

顺便说一下,你说你正在使用javax.mail-api-1.5.2.jar和mail-1.5.0-b01.jar。你不应该混合和匹配那样的版本。您只需要一个jar文件--javax.mail-1.5.2.jar文件。您可以在JavaMail project page上获取它。