電子メールの添付ファイルとして送信された PDF を開くことができません。PDF は iText と Flying Saucer を使用して作成され、Java の MimeMessage を使用して送信されます。添付ファイルをダウンロードしようとすると、エンコーディングの問題があると確信しています。PDF が作成されたときは問題ないように見えるからです。添付ファイルとして送信されたときに、開くときに問題が発生しました。たとえば、Chrome では「PDF ドキュメントの読み込みに失敗しました」というエラーが送信されます。他のブラウザや Adobe Reader で同様のエラーを送信します。ありがとう。
//creates the pdf
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
byte[] bytes = buf.toString().getBytes("iso-8859-1");
ByteArrayInputStream baos = new ByteArrayInputStream(bytes);
Document doc = builder.parse(baos);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
OutputStream os = new ByteArrayOutputStream();
os = response.getOutputStream();
renderer.createPDF(os);
os.close();
//email
MimeMessage msg = new MimeMessage(session);
Multipart multipart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("This is a test");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
//construct the pdf body part
DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
messageBodyPart.setHeader("Content-Transfer-Encoding", "base64");
messageBodyPart.setDataHandler(new DataHandler(dataSource));
messageBodyPart.setFileName("test.pdf");
multipart.addBodyPart(messageBodyPart);
//construct message
msg.setHeader("Content-Type", "multipart/mixed");
msg.setFrom(new InternetAddress(user));
msg.setReplyTo(InternetAddress.parse(replyEmail,false));
msg.setSubject("Test");
msg.setRecipients(Message.RecipientType.TO, to);
msg.setSentDate(new java.util.Date());
msg.setContent(multipart);
//send email
Transport.send(msg);