Javamail error: SMTPAddressFailedException: 450 too many connections from your IP (rate controlled)

Javamail error: SMTPAddressFailedException: 450 too many connections from your IP (rate controlled)

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

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

电子邮件一开始是正确发送的,但是当任务的频率最终上升时,我开始出现以下异常,所有后续电子邮件都失败了。我可以在 10 分钟内发送大约 30 封电子邮件 window。

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 语句中关闭,因此不应挂起任何连接,但我仍然遇到此异常。

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

我是不是在发送消息时做错了什么?有没有办法监控电子邮件连接?或者是电子邮件服务器问题?

您的服务器告诉您,您在太短的时间内建立了太多的连接。它对您进行限速,以防止您滥用服务器。您可能需要支付更高质量的服务才能发送更多消息。有关详细信息,请联系您的 ISP。

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

上获取