Отправка Multipart MimeMessage отправляет пустое письмо
Я работаю над этим проектом, который требует от нас посылать ежедневные отчеты по почте в форматах pdf и xlsx. Я читал об использовании сообщений Multipart для такой задачи, поэтому я написал код ниже, чтобы выполнить его:
public void sendEmail(String toEmail, String subject, String body, ByteArrayOutputStream pdfBaos, ByteArrayOutputStream xlsBaos) {
System.out.println("TLSEmail Start");
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); // SMTP Host
props.put("mail.smtp.port", "587"); // TLS Port
props.put("mail.smtp.auth", "true"); // enable authentication
props.put("mail.smtp.starttls.enable", "true"); // enable STARTTLS
Authenticator auth = new Authenticator() {
// override the getPasswordAuthentication method
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
Session session = Session.getInstance(props, auth);
try {
MimeMessage msg = new MimeMessage(session);
// set message headers
msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
msg.addHeader("format", "flowed");
msg.addHeader("Content-Transfer-Encoding", "8bit");
msg.setFrom(new InternetAddress(Config
.getProperty("reporter.mail.username"), "DailyReport"));
msg.setReplyTo(InternetAddress.parse(
Config.getProperty("reporter.mail.username"), false));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(toEmail, false));
msg.setSubject(subject, "UTF-8");
msg.setSentDate(new Date());
// Create a multipart message for attachment
Multipart multipart = new MimeMultipart();
// Create the message body part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setText(body);
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Second part is attachment
MimeBodyPart pdfAttachmentBodyPart = new MimeBodyPart();
DataSource pdfAttachment = new ByteArrayDataSource(pdfBaos.toByteArray(), "application/pdf");
String pdfFileName = "report.pdf";
pdfAttachmentBodyPart.setDataHandler(new DataHandler(pdfAttachment));
pdfAttachmentBodyPart.setFileName(pdfFileName);
MimeBodyPart xlsAttachmentBodyPart = new MimeBodyPart();
DataSource xlsAttachment = new ByteArrayDataSource(xlsBaos.toByteArray(), "application/vnd.ms-excel");
String xlsFileName = "report.xls";
xlsAttachmentBodyPart.setDataHandler(new DataHandler(xlsAttachment));
xlsAttachmentBodyPart.setFileName(xlsFileName);
multipart.addBodyPart(pdfAttachmentBodyPart);
multipart.addBodyPart(xlsAttachmentBodyPart);
// Send the complete message parts
msg.setContent(multipart);
// msg.setText(body, "UTF-8");
System.out.println("Message is ready");
Transport.send(msg);
System.out.println("EMail Sent Successfully!!");
} catch (Exception e) {
e.printStackTrace();
}
}
Но при этом отправляется только пустое письмо на нужный адрес. Теперь я подозревал, что с отправкой файлов что-то не так, поэтому я попытался просто отправить текст bodyPart, но доставленная почта также была пустой. Я также пытался создать MimeMultipart с параметром "mixed", но это ничего не исправило.
Установка текста в MimeMessage с помощью метода setText работает нормально, но это оставляет меня с проблемой, как отправлять вложения.pdf и.xlsx вместе с ним.
Я использую javax.mail 1.5.0-b01 и apache TomEE 7.0. Отчеты генерируются через jasperreports.
Заранее спасибо!
1 ответ
Я не нахожу никаких проблем с кодом.
- Убедитесь, что у вас есть соответствующие версии mail.jar активации.jar
Еще одна вещь, если вы можете попробовать это:
String pdfFileName = "report.pdf"; DataSource source = new FileDataSource(pdfFilename); // DataSource pdfAttachment = new ByteArrayDataSource(pdfBaos.toByteArray(), "application/pdf");