Это может быть немного поздно, но я подумал, что скину, если кто-нибудь еще столкнется с этим.Я думаю, что проблема в том, что вы пытаетесь прикрепить документ в разделе html письма, а не добавлять его в качестве вложения.
Сначала я использую pdfjet для создания pdf в этом методе (я немного отредактировал это без тестирования, но это должно работать)
private byte[] createPDF(String title) throws Exception
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
PDF pdf = new PDF(out);
pdf.setTitle("Title");
Page page = new Page(pdf, Letter.PORTRAIT);
Font f1 = new Font(pdf, CoreFont.HELVETICA);
f1.setSize(16);
TextColumn column = new TextColumn();
column.setLineBetweenParagraphs(true);
column.setLineSpacing(1.0);
//Fill data
Paragraph title = new Paragraph();
title.setAlignment(Align.CENTER);
title.add(new TextLine(f1, text));
column.addParagraph(title);
column.setPosition(90, 90);
column.setSize(470, 100);
column.drawOn(page);
pdf.flush();
byte[] bytes = out.toByteArray();
return bytes;
}
Вот метод, который я использую для отправкиэлектронное письмо с передачей PDF в виде байтового массива.(Это именно тот код, за исключением того, что я изменил адрес электронной почты от. Имейте в виду, что адрес электронной почты от должен следовать приведенным здесь правилам https://developers.google.com/appengine/docs/java/mail/#Java_Sending_mail)
private void sendEmailWithPDF(String recipient, String content, byte[] pdf) throws Exception
{
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
String htmlBody = content;
try {
javax.mail.Message msg = new MimeMessage(session);
MimeMultipart mp = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
MimeBodyPart attachment = new MimeBodyPart();
msg.setFrom(new InternetAddress("myaddress@mydomain.com"));
msg.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(recipient,recipient));
msg.setSubject(content);
//prepare html part
htmlPart.setContent(htmlBody, "text/html");
//prepare attachment using a bytearraydatasource
DataSource src = new ByteArrayDataSource(pdf, "application/pdf");
attachment.setFileName("form " + new Date().toString() + ".pdf");
attachment.setDataHandler(new DataHandler(src));
//put the parts together into a multipart
mp.addBodyPart(htmlPart);
mp.addBodyPart(attachment);
//set the content of the message to be the multipart
msg.setContent(mp);
msg.saveChanges();
Transport.send(msg);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}