JavaMail附件和正文问题

时间:2016-12-12 15:38:17

标签: java javamail

我使用下面的代码将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);

请帮我将附件和测试体添加到我的邮件中。

2 个答案:

答案 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);