2014-09-24 1 views
0

포럼에서 도움을 요청한 지 오래되었지만 잠깐 동안 나는이 문제로 며칠 동안 고생했습니다.야후 메일을 통해 멀티 파트 메일을 보내면 javax.activation.UnsupportedDataTypeException이 발생합니다. MIME 유형 multipart/mixed에 대한 개체 DCH가 없습니다.

모든 포럼을 읽으면 모든 ppl이 변경되었지만 변경되지 않았습니다.

여기 내 코드입니다

내가 잘못하고있는 것은 무엇입니까? 나는 텍스트 MSG를 등록

// Get system properties 
    Properties properties = System.getProperties(); 
    // Setup mail server 
    properties.put("mail.smtp.starttls.enable", "true"); 
    properties.put("mail.smtp.host", mailHost); 
    properties.put("mail.smtp.user", mailUserName); 
    properties.put("mail.smtp.password", mailPassword); 
    properties.put("mail.smtp.port", "587"); 
    properties.put("mail.smtp.auth", "true"); 

    // Get the default Session object. 
    Session session = Session.getDefaultInstance(properties); 

    try{ 
     // Create a default MimeMessage object. 
     MimeMessage message = new MimeMessage(session); 

     // Set From: header field of the header. 
     message.setFrom(new InternetAddress(mD.mailUserName)); 

     // Set To: header field of the header. 
     message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); 

     Multipart multiPart = new MimeMultipart(); 
     MimeBodyPart textPart = new MimeBodyPart(); 
     textPart.setText("This is actual message", "text/html; charset=utf-8"); 

     MimeBodyPart htmlPart = new MimeBodyPart(); 
     htmlPart.setContent(html, "text/html; charset=utf-8"); 
     multiPart.addBodyPart(textPart); 
     multiPart.addBodyPart(htmlPart); 
     message.setContent(multiPart); 

     // Send message 
     Transport transport = session.getTransport("smtp"); 
     transport.connect(mD.mailHost,mD.mailUserName,mD.mailPassword); 

     ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
     Thread.currentThread().setContextClassLoader(javax.mail.Session.class.getClassLoader()); 
     try 
     { 
      message.setContent(multiPart); 
      //transport.sendMessage(message, message.getAllRecipients()); 
      Transport.send(message, message.getAllRecipients()); 
     } 
     catch (MessagingException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      Thread.currentThread().setContextClassLoader(classLoader); 
     } 
     transport.close(); 
    } 
    catch (MessagingException mex) 
    { 
     mex.printStackTrace(); 
    } 

답변

0

귀하의 코드는이 common mistakes의 몇 가지를 가지고 너무 문제를 보낼 이미있는 javamail 5.1 및 자바 8을 사용하고있는 방법에 의해

. 그들을 고정 시켜서 시작하십시오.

그러나 문제는 일종의 클래스 로더 문제로 인한 것일 수 있습니다. 프로그램이 실행되는 환경에 대해 자세히 알려주십시오.

+0

와우 빌은 자바 메일의 마스터처럼 보입니다. – amnon

+0

와우 빌은 자바 메일의 마스터처럼 보입니다. 나는 내가 만든 애플리케이션에서이 클래스를 사용하지 않는다. 그것은 하나의 부품을 보내기 위해 그것을 사용하고있을 때 잘 작동합니다. 코어가 문제 (하지만 mybee u r right)로 고통을 겪고 있지만 멀티 파트로 인해 문제가 발생하는 것은 확실하지 않습니다. classLoader 로더없이 실행해도되지만 변경은 필요 없습니다. – amnon

+0

이 명령은 "java"명령을 사용하여 명령 줄에서 실행되는 독립 실행 형 응용 프로그램입니까? 어떻게 CLASSPATH를 설정 했습니까? CLASSPATH에서 JavaMail jar 파일을 변경하지 않았습니까? –

관련 문제