2016-12-12 2 views
1

Я использую ниже код, чтобы прикрепить файл PDF к почте (JAVAMAIL). эта позиция отлично работает и добавляет привязанность к моей почте, но эта почта не имеет никакого тела.Вложение 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

Я думаю, вы должны найти какой-то TextBodyPart и вызвать multipart.addBodyPart (textBodyPart). Не могу сейчас это понять, hth anyways – rob

+0

да, я сделал это. я просто должен добавить новые тела. Спасибо, в любом случае. :) –

ответ

3

Проблема в том, что если вы хотите отправить сообщение с прикрепленными файлами, вам необходимо предоставить часть своего сообщения и часть для вашего приложения.

Вызывая в сообщении сообщение setText, вы выбрасываете многократный набор, который вы установили ранее.

Ваше сообщение должно иметь иерархию, которая выглядит следующим образом (более вложенности необходимо, если вы хотите иметь простой текст и HTML сообщение):

MimeMessage 
+- MimeMultiPart 
    +- MimeBodyPart (message) 
    +- MimeBodyPart (attachment) 

Например

MimeMessage message = new MimeMessage(session); 
MimeMultiPart multiPart = new MimeMultiPart(); 

MimeBodyPart messageBodyPart = new MimeBodyPart(); 
messageBodyPart.setText(body); 
mimeMultiPart.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(mimeMultipart); 
+0

да, я настроил его по комментарию Роба. но все равно спасибо. :) –

+1

@ShariarImtiaz Да, для ввода полного ответа всегда требуется больше времени, чем быстрый комментарий. –

0

I добавили ниже строки, чтобы заставить его работать.

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); 
+2

Некоторые советы: добавьте часть html перед вложением (это не обязательно, но некоторые почтовые клиенты могут запутаться) и используйте 'htmlPart.setText (body," UTF-8 "," html ")' вместо ' setContent (body, "text/html") '. –

Смежные вопросы