我使用下面的代码将pdf文件附加到邮件(JAVAMAIL)。这个位置工作得很好,并添加了我的邮件附件,但这封邮件没有任何正文。
Multipart multipart = new MimeMultipart();
msg.setContent(multipart);
DataSource source = new FileDataSource(pdf);
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(pdf.getName().toString());
multipart.addBodyPart(messageBodyPart);
msg.setContent(multipart);
当我在我的代码中添加以下行时,它会删除附件并向我发送仅包含该文本的邮件。
msg.setText(body);
请帮我将附件和测试体添加到我的邮件中。
答案 0 :(得分:5)
问题在于,如果您要发送带附件的邮件,则需要为邮件添加部分,并为附件添加部分。
通过在邮件中调用setText
,您将丢弃之前设置的多部分。
您的邮件需要具有如下所示的层次结构(如果您想要包含纯文本和HTML消息,则需要更多嵌套):
MimeMessage
+- MimeMultiPart
+- MimeBodyPart (message)
+- MimeBodyPart (attachment)
例如
MimeMessage message = new MimeMessage(session);
MimeMultiPart multiPart = new MimeMultiPart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(body);
multiPart.addBodyPart(messageBodyPart);
MimeBodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(source));
attachment.setDisposition(Part.ATTACHMENT);
attachment.setFileName(pdf.getName().toString());
multipart.addBodyPart(attachment);
message.setContent(multiPart);
答案 1 :(得分:0)
我添加了以下行以使其正常工作。
Multipart multipart = new MimeMultipart();
msg.setContent(multipart);
DataSource source = new FileDataSource(pdf);
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(pdf.getName().toString());
multipart.addBodyPart(messageBodyPart);
msg.setContent(multipart);
BodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(body, "text/html");
multipart.addBodyPart(htmlPart);