异常信息: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);
}
}
请大家帮忙看下。。

解决方案 »

  1.   

    你用的服务器主机可能对 SMTP 发送邮件的最高频率做了限制:http://www.emailaddressmanager.com/tips/server-smtp-limit.html
      

  2.   


    你用的好像是 Amazon Simple Email Service? 这里教你怎么看你的 sending limits:http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/ManagingActivity.SendingLimits.html
      

  3.   

    多谢各位。
    下面是各种附件的类型。可是我想传一个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.");
    }
      

  4.   

    是不是属于这个Content Type multipart/*? 试试看能不能成功发送
      

  5.   

    错了,multipart是组合使用的意思按下面的先试试能不能行(至少RAR的content type是存在的)ZIP的MIME类型用application/x-zip-compressed 
    RAR的MIME类型用application/octet-stream 
      

  6.   


    Thanks, I will check it.
      

  7.   

    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'.
      

  8.   

    为什么文件名还是test rar.rar中间带空格的呢?
      

  9.   


    对这个ASES真不太了解,不支持zip/rar怎么也说不过去,要多了解ASES才行。
      

  10.   

    我看普通的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是不是也是这样。
      

  11.   


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

  12.   

    我试了试,本地读也不可以。
    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是可以发送过去的。可是接受到的附件不可能没有文件名和扩展名吗?求解?
      

  13.   

    sorry,前两天没看到。那意思就是比如把这个zip文件改名成比如123.txt是可以成功发送出去的?
    如果是这样的话,说明它只是对文件扩展名单纯进行检查了。