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

SambaGao 2012-11-27 11:57:34
异常信息:

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);
}
}


请大家帮忙看下。。
...全文
306 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hown 2013-01-24
  • 打赏
  • 举报
回复
dracularking 2012-12-03
  • 打赏
  • 举报
回复
引用 15 楼 nihaozhangchao 的回复:
即使file name 没有空格还是会出错。 我没有写FileName是可以发送过去的。可是接受到的附件不可能没有文件名和扩展名吗? 求解?
sorry,前两天没看到。 那意思就是比如把这个zip文件改名成比如123.txt是可以成功发送出去的? 如果是这样的话,说明它只是对文件扩展名单纯进行检查了。
SambaGao 2012-11-29
  • 打赏
  • 举报
回复
引用 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是可以发送过去的。可是接受到的附件不可能没有文件名和扩展名吗? 求解?
SambaGao 2012-11-28
  • 打赏
  • 举报
回复
引用 13 楼 dracularking 的回复:
我看普通的java mail发送rar附件,是无须指定mime type的 Java code?1234MimeBodyPart rarAttachment = new MimeBodyPart(); FileDataSource rarFile = new FileDataSource("C:/my-file.rar"); ……
有道理。 就是这个文件, 1. 我先试试用本地的文件看能不能上传。 2. 我再试试把读过来的流存到本地再用你这种方法看行不行。 Thanks.
dracularking 2012-11-28
  • 打赏
  • 举报
回复
我看普通的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是不是也是这样。
dracularking 2012-11-28
  • 打赏
  • 举报
回复
引用 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才行。
SambaGao 2012-11-28
  • 打赏
  • 举报
回复
引用 10 楼 dracularking 的回复:
引用 9 楼 nihaozhangchao 的回复:com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal filename 'test rar.rar'. 为什么文件名还是test rar.rar中间带空格的呢?
我已经试过了,去掉空格还是报这个错误。。
dracularking 2012-11-28
  • 打赏
  • 举报
回复
引用 9 楼 nihaozhangchao 的回复:
com.sun.mail.smtp.SMTPSendFailedException: 554 Transaction failed: Illegal filename 'test rar.rar'.
为什么文件名还是test rar.rar中间带空格的呢?
SambaGao 2012-11-27
  • 打赏
  • 举报
回复
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
SambaGao 2012-11-27
  • 打赏
  • 举报
回复
引用 7 楼 dracularking 的回复:
错了,multipart是组合使用的意思 按下面的先试试能不能行(至少RAR的content type是存在的) ZIP的MIME类型用application/x-zip-compressed RAR的MIME类型用application/octet-stream
Thanks, I will check it.
dracularking 2012-11-27
  • 打赏
  • 举报
回复
错了,multipart是组合使用的意思 按下面的先试试能不能行(至少RAR的content type是存在的) ZIP的MIME类型用application/x-zip-compressed RAR的MIME类型用application/octet-stream
dracularking 2012-11-27
  • 打赏
  • 举报
回复
是不是属于这个Content Type multipart/*? 试试看能不能成功发送
SambaGao 2012-11-27
  • 打赏
  • 举报
回复
多谢各位。 下面是各种附件的类型。可是我想传一个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.");
	}
yjflinchong 2012-11-27
  • 打赏
  • 举报
回复
就是被限制了。 发送失败。 其他的就看自己去慢慢找了
dracularking 2012-11-27
  • 打赏
  • 举报
回复
引用 1 楼 raistlic 的回复:
你用的服务器主机可能对 SMTP 发送邮件的最高频率做了限制: http://www.emailaddressmanager.com/tips/server-smtp-limit.html
+1
raistlic 2012-11-27
  • 打赏
  • 举报
回复
引用 楼主 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
raistlic 2012-11-27
  • 打赏
  • 举报
回复
你用的服务器主机可能对 SMTP 发送邮件的最高频率做了限制: http://www.emailaddressmanager.com/tips/server-smtp-limit.html

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧