2013-07-02 5 views
1

Мой сценарий заключается в следующем:Java Отправка электронной почты с приложением, ошибка на DataContentHandler

У меня есть веб-приложение, пользователь записывает сообщение, прикрепляет файл и отправляет по электронной почте.

Я использую JavaMail для отправки почты, как это, но у меня есть проблема прикреплять файл к сообщению (мой файл находится на сессии):

 if (request.getSession().getAttribute("EMAIL_ATTACHMENT") != null) { 
      UploadFile file = (UploadFile) request.getSession().getAttribute("EMAIL_ATTACHMENT"); 
      MimeBodyPart mbp1 = new MimeBodyPart(); 
      mbp1.setContent(text, "text/html;charset=UTF-8"); 
      MimeMultipart mp = new MimeMultipart(); 
      mp.addBodyPart(mbp1); 
      MimeBodyPart mbp2 = new MimeBodyPart(); 
      // attach the file to the message 
      MyMailAttachmentDataSource fds = new MyMailAttachmentDataSource(file); 
      mbp2.setDataHandler(new DataHandler(fds)); 
      mbp2.setFileName(fds.getName()); 
      mp.addBodyPart(mbp2); 
      msg.setContent(mp, "text/plain"); 

     } 

Код для MyMailAttachmentDataSource заключается в следующем:

public class MyMailAttachmentDataSource implements DataSource{ 
    private UploadFile file; 
    public MyMailAttachmentDataSource(UploadFile file){ 
     this.file=file; 
    } 
    @Override 
    public InputStream getInputStream() throws IOException { 
     return file.getInpuStream(); 
    } 
    @Override 
    public OutputStream getOutputStream() throws IOException { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
    @Override 
    public String getContentType() { 
     return file.getContentType(); 
    } 
    @Override 
    public String getName() { 
     return file.getFileName(); 
    } 
} 

Когда я пытаюсь отправить по электронной почте, я получаю это исключение

java.io.IOException: "text/plain" DataContentHandler requires String object, was given object of type class javax.mail.internet.MimeMultipart 
at com.sun.mail.handlers.text_plain.writeTo(text_plain.java:97) 
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:884) 
at javax.activation.DataHandler.writeTo(DataHandler.java:317) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1089) 
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1527) 
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:321) 
at admin.email.JavaMail.SendEmail(JavaMail.java:403) 
at admin.email.MailSend.SendMail(MailSend.java:86) 

Я пытался сп Анж msg.contentType в «текст/html», но все еще получаю вышеуказанное исключение

"text/html" DataContentHandler requires String object, was given object of type class javax.mail.internet.MimeMultipart 

Кто-нибудь знает, что вызывает эту ошибку и как я могу это исправить?

ответ

4

E-mail с приложением не может быть text/plain или text/html, он должен быть multipart/mixed.

Кажется, что это будет достаточно, чтобы изменить строку кода msg.setContent(mp, "text/plain"); в только msg.setContent(mp);

+0

как глупо .... спасибо – MaVRoSCy

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