当前位置:编程学习 > JAVA >>

关于 Java 多线程发Email, 454 Throttling failure: Maximum sending rate exceeded.

异常信息:

com.sun.mail.smtp.SMTPSendFailedException: 454 Throttling failure: Maximum sending rate exceeded.

        at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
        at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1215)
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:586)
        at com.amazon.ses.SendMessageRunnable.startSendEmail(SendMessageRunnable.java:122)
        at com.amazon.ses.SendMessageRunnable.run(SendMessageRunnable.java:58)
        at java.lang.Thread.run(Thread.java:722)



代码:

transport = session.getTransport("smtp");
transport.connect("email-smtp.us-east-1.amazonaws.com", UserInformation.emailUser, UserInformation.emailPassword);
for (SObject contact : result.getContacts()) { //可能会有1000 条或3000条.
if (contact.getField("Email") != null) {
if (!transport.isConnected()) {
transport.connect("email-smtp.us-east-1.amazonaws.com", UserInformation.emailUser, UserInformation.emailPassword);
}
Thread thread = new Thread(new SendMessageRunnable(tasks,
transport, sender, emailTemplate,
contact, attachments, documents));
flag = true;
thread.start();
listThread.add(thread);
}
}


请大家帮忙看下。。 --------------------编程问答-------------------- 你用的服务器主机可能对 SMTP 发送邮件的最高频率做了限制:

http://www.emailaddressmanager.com/tips/server-smtp-limit.html --------------------编程问答--------------------
引用 楼主 nihaozhangchao 的回复:
异常信息:
XML/HTML code?12345678910com.sun.mail.smtp.SMTPSendFailedException: 454 Throttling failure: Maximum sending rate exceeded.         at com.sun.mail.smtp.SMTPTransport.issueSendComma……


你用的好像是 Amazon Simple Email Service? 

这里教你怎么看你的 sending limits:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/ManagingActivity.SendingLimits.html

--------------------编程问答--------------------
引用 1 楼 raistlic 的回复:
你用的服务器主机可能对 SMTP 发送邮件的最高频率做了限制:
http://www.emailaddressmanager.com/tips/server-smtp-limit.html

+1 --------------------编程问答-------------------- 就是被限制了。 发送失败。   

其他的就看自己去慢慢找了 --------------------编程问答-------------------- 多谢各位。
下面是各种附件的类型。可是我想传一个zip or rar 文件,再类型表中没有发现。不可能不能传吧?
http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/MIMETypes.html
下面是代码:

// Adds Attachments to the email.
private void addAttachments(Multipart mulp) throws MessagingException, IOException {
log.info("Starting the attachments add to email.");
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
MimeBodyPart mimeBodyPart = null;
for (SObject attachment : attachments) {
mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setDescription(Part.ATTACHMENT);
if(attachment.getField("Body") != null) {
if(attachment.getField("ContentType").toString().contains("text/")) {
mimeBodyPart.setContent(new String(BASE64DeCoderUtils.decode(attachment.getField("Body").toString())), attachment.getField("ContentType").toString());
} else {
mimeBodyPart.setContent(decoder.decodeBuffer(attachment.getField("Body").toString()), attachment.getField("ContentType").toString());
}
}
mimeBodyPart.setFileName(attachment.getField("Name").toString());
mulp.addBodyPart(mimeBodyPart);
}
log.info("Completed the attachments add to email.");
}
--------------------编程问答-------------------- 是不是属于这个Content Type multipart/*? 试试看能不能成功发送

--------------------编程问答-------------------- 错了,multipart是组合使用的意思

按下面的先试试能不能行(至少RAR的content type是存在的)

ZIP的MIME类型用application/x-zip-compressed 
RAR的MIME类型用application/octet-stream 
--------------------编程问答--------------------
引用 7 楼 dracularking 的回复:
错了,multipart是组合使用的意思

按下面的先试试能不能行(至少RAR的content type是存在的)

ZIP的MIME类型用application/x-zip-compressed 
RAR的MIME类型用application/octet-stream


Thanks, I will check it. --------------------编程问答-------------------- Hi dracularking,

下面这些是我测试的结果。
com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal filename 'test rar.rar'.
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1275)
at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1149)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:527)
at com.amazon.ses.SendMessageRunnable.startSendEmail(SendMessageRunnable.java:119)
at com.amazon.ses.SendMessageRunnable.run(SendMessageRunnable.java:56)

com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal content type 'application/x-zip-compressed; name="test zip.zip"; charset=GB2312'.

引用 7 楼 dracularking 的回复:
错了,multipart是组合使用的意思

按下面的先试试能不能行(至少RAR的content type是存在的)

ZIP的MIME类型用application/x-zip-compressed 
RAR的MIME类型用application/octet-stream


--------------------编程问答--------------------
引用 9 楼 nihaozhangchao 的回复:
com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal filename 'test rar.rar'.

为什么文件名还是test rar.rar中间带空格的呢? --------------------编程问答--------------------
引用 10 楼 dracularking 的回复:
引用 9 楼 nihaozhangchao 的回复:com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal filename 'test rar.rar'.
为什么文件名还是test rar.rar中间带空格的呢?


我已经试过了,去掉空格还是报这个错误。。 --------------------编程问答--------------------
引用 11 楼 nihaozhangchao 的回复:
引用 10 楼 dracularking 的回复:
引用 9 楼 nihaozhangchao 的回复:com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal filename 'test rar.rar'.
为什么文件名还是test rar.rar中间带空格的呢?

我已经试过了,去掉空格还是报……


对这个ASES真不太了解,不支持zip/rar怎么也说不过去,要多了解ASES才行。 --------------------编程问答-------------------- 我看普通的java mail发送rar附件,是无须指定mime type的


MimeBodyPart rarAttachment = new MimeBodyPart();               
FileDataSource rarFile = new FileDataSource("C:/my-file.rar");               rarAttachment.setDataHandler(new DataHandler(rarFile));               rarAttachment.setFileName(rarFile.getName());               
multiPart.addBodyPart(rarAttachment);   


直接将文件指定为附件就行,理论上也就应该这样,因为所有信息都已经包含在文件中了,不知道对ASES是不是也是这样。

--------------------编程问答--------------------
引用 13 楼 dracularking 的回复:
我看普通的java mail发送rar附件,是无须指定mime type的

Java code?1234MimeBodyPart rarAttachment = new MimeBodyPart();               FileDataSource rarFile = new FileDataSource("C:/my-file.rar");       ……


有道理。 就是这个文件,
1. 我先试试用本地的文件看能不能上传。
2. 我再试试把读过来的流存到本地再用你这种方法看行不行。

Thanks. --------------------编程问答--------------------
引用 14 楼 nihaozhangchao 的回复:
引用 13 楼 dracularking 的回复:我看普通的java mail发送rar附件,是无须指定mime type的

Java code?1234MimeBodyPart rarAttachment = new MimeBodyPart();               FileDataSource rarFile = new FileDataSource(……

我试了试,本地读也不可以。
com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal filename 'Hello World.zip'.

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1275)
at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1149)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:527)
at com.amazon.ses.SendMessageRunnable.startSendEmail(SendMessageRunnable.java:123)
at com.amazon.ses.SendMessageRunnable.run(SendMessageRunnable.java:59)

at java.lang.Thread.run(Thread.java:680)
即使file name 没有空格还是会出错。
我没有写FileName是可以发送过去的。可是接受到的附件不可能没有文件名和扩展名吗?

求解? --------------------编程问答--------------------
引用 15 楼 nihaozhangchao 的回复:
即使file name 没有空格还是会出错。
我没有写FileName是可以发送过去的。可是接受到的附件不可能没有文件名和扩展名吗?

求解? 

sorry,前两天没看到。

那意思就是比如把这个zip文件改名成比如123.txt是可以成功发送出去的?
如果是这样的话,说明它只是对文件扩展名单纯进行检查了。
--------------------编程问答--------------------
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,