我有一个Spring4.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语句上关闭的,所以不应该挂起连接,但我还是碰到了这个异常。
我上网查过了,但我想不出提高这个限额的办法。
我是不是做错了传递信息的事?有办法监控电子邮件连接吗?还是电子邮件服务器的问题?
发布于 2015-03-20 18:31:38
您的服务器告诉您,您在太短的时间内建立了太多的连接。它的速度限制了你防止你滥用服务器。您可能需要支付更高质量的服务才能发送更多的消息。有关详细信息,请与ISP联系。
顺便说一下,您说您使用的是javax.mail-api-1.5.2.jar和mail-1.5.0-b01.jar。你不应该混合和匹配这样的版本。您只需要一个jar文件- javax.mail-1.5.2.jar文件。你可以在JavaMail项目页面上找到它。
https://stackoverflow.com/questions/29171247
复制相似问题