Google App Engine上的JavaMail发送带附件的HTML电子邮件 - 忽略第一个附件

时间:2014-01-26 17:41:54

标签: google-app-engine javamail

我在Google App Engine上使用Java并尝试发送包含多个附件的电子邮件。

我发现的是,由于某种原因,它错过了第一个附件。 基本上如果filesToAttach包含1个文件,那么就没有附件。 如果filesToAttach包含4个文件 - A,B,C和D,那么通过的消息将附加B,C和D.真奇怪。

我使用的代码如下。关于如何纠正这一点的任何建议都非常赞赏。

log.info调用生成的输出似乎显示已附加正确数量的文件。

    Properties props = new Properties();
    Session session = Session.getInstance(props);
    Message message = new MimeMessage(session);
    String fromEmail = "admin@" + ApiProxy.getCurrentEnvironment().getAppId() + ".appspotmail.com";
    message.setFrom(new InternetAddress(fromEmail, "MyApp Admin"));
    message.addRecipients(Message.RecipientType.BCC, addresses);
    message.setSubject(subject);
    MimeMultipart multipart = new MimeMultipart();

    MimeBodyPart htmlPart = new MimeBodyPart();
    htmlPart.setContent(htmlBody, "text/html");
    multipart.addBodyPart(htmlPart);

    for(FileToAttach fileToAttach : filesToAttach) {
      MimeBodyPart fileMimeBodyPart = new MimeBodyPart();
      DataSource dataSource = new ByteArrayDataSource(fileToAttach.getContents(), "application/octet-stream");
      fileMimeBodyPart.setDataHandler(new DataHandler(dataSource));
      fileMimeBodyPart.setFileName(fileToAttach.getFileName());
      log.info("attaching file " + fileToAttach.getFileName() + " of " + fileToAttach.getContents().length + " bytes");
      multipart.addBodyPart(fileMimeBodyPart);
    }

    message.setContent(multipart);
    log.info("the multipart contains " + multipart.getCount() + " parts and isComplete = " + multipart.isComplete());
    Transport.send(message);
    log.info("called Transport.send");

0 个答案:

没有答案