2011-01-06 2 views
5

나는 그것이 Exception.How이Java에서 메시지를 보내는 동안 MessagingExceptionIOException이 발생합니다.

javax.mail.MessagingException를 해결하기 위해 제공 작동하지 않는 첨부 미세하지만 메일을 작동하고 전송 mail.Text 메시지를 보내려면 다음 코드를 사용 IOException가 메시지를 전송하는 동안; 중첩 예외는 다음과 같습니다. javax.activation.UnsupportedDataTypeException : MIME 유형 multipart/mixed에 대한 개체 DCH가 없습니다. 경계 = "---- = _ Part_0_10430987.1294298904906"javax.mail.Transport.send0 (Transport.java:189)에서 com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:676) 에서 SendMail.main (SendMail.java:22)에서 에있는 javax.mail.Transport.send (Transport.java:118) 에서 Gmailer.GMailSender.sendMailAttach (GMailSender.java:114)에서 발생했습니다. javax.activation.UnsupportedDataTypeException : MIME 유형 multipart/mixed에 대한 객체 DCH 없음; 경계 = "---- = _ Part_0_10430987.1294298904906"javax.mail.internet.MimeBodyPart.writeTo에서 javax.activation.DataHandler.writeTo (알 소스)에 javax.activation.ObjectDataContentHandler.writeTo (알 소스)에 (MimeBodyPart.java:1403) at javax.mail.internet.MimeMessage.writeTo (MimeMessage.java:1745) at com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:636) ... 4 첨부 파일의 코드를 더

메일 :

public synchronized void sendMailAttach(String subject, String body, 
    String sender, String recipients) { 
try { 
    MimeMessage message = new MimeMessage(session); 

    message.setSender(new InternetAddress(sender)); 
    message.setSubject(subject); 

    // Create the message part 
    BodyPart messageBodyPart = new MimeBodyPart(); 

    // Fill the message 
    messageBodyPart.setText("hi Demo"); 

    Multipart multipart = new MimeMultipart(); 
    multipart.addBodyPart(messageBodyPart); 

    // Part two is attachment 
    messageBodyPart = new MimeBodyPart(); 
    String filename = "mail.txt"; 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 
    multipart.addBodyPart(messageBodyPart); 

    // Put parts in message 
    message.setContent(multipart); 

    if (recipients.indexOf(',') > 0) 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse(recipients)); 
    else 
     message.setRecipient(Message.RecipientType.TO, 
       new InternetAddress(recipients)); 
    Transport.send(message); 

} 
catch (MessagingException e) { 
    System.out.println("MessagingException" + e.getMessage()); 
} 
catch (Exception e) { 
    System.out.println("Mail Send Exception " + e.getMessage()); 
} 
} 

텍스트 메일 송신 코드 :

public synchronized void sendMail(String subject, String body, 
    String sender, String recipients) throws Exception { 
try { 
    MimeMessage message = new MimeMessage(session); 
    DataHandler handler = new DataHandler(new ByteArrayDataSource(
      body.getBytes(), "text/plain")); 
    message.setSender(new InternetAddress(sender)); 
    message.setSubject(subject); 
    message.setDataHandler(handler); 
    if (recipients.indexOf(',') > 0) 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse(recipients)); 
    else 
     message.setRecipient(Message.RecipientType.TO, 
       new InternetAddress(recipients)); 
    Transport.send(message); 
} catch (Exception e) { 

} 
} 
+0

스택 추적이 불완전하므로 전체를 제공하십시오. – Kartoch

+0

중복 된 http://stackoverflow.com/questions/1969667/send-a-mail-from-java5-and-java6 – dkarp

답변

4

첫째 로그에 전체 경로를 적어주세요을, 당신은 할 수 있습니다 자신의 코드를 DataSource/DataHandler 코드와 혼동하지 말고 MimeBodyPart.attachFile()을 사용하여 좀 더 간결하게 작성하십시오.

두 번째로 적절한 값을 사용하여 첨부 파일 부분에 Content-TypeContent-Disposition 헤더를 설정해보십시오. (attachFile 기본적으로 당신을 위해 내용 - 처리를 설정합니다.) 예를 들어,

messageBodyPart = new MimeBodyPart(); 
messageBodyPart.attachFile(new File("mail.txt")); 
messageBodyPart.setHeader("Content-Type", "text/plain; charset=\"us-ascii\"; name=\"mail.txt\""); 



편집 :

조금 생각하면,이 클래스 로딩과 어긋 나서 뭔가 있어야한다.귀하의 상황을 해결하는지 보려면 this other SO thread을 확인하십시오. (일반적인 문제 : 아마도 classpath에 추가 activation.jar가있을 것이며, 다른 가능성이 있기도합니다.)

+0

시도해 보겠습니다. . 그러나 그것은 나를 위해 작동하지 않는다 –

0

나는 당신의 프로그램이 파일 mail.txt을 찾을 수 없습니다 생각합니다. 정확한 경로를 입력하십시오. 예외 스택 추적은 더 많은 아이디어를 줄 수 있습니다. 가능한 경우 회신하십시오. e.printStacktrace();

+0

파일을 읽을 수 있습니다.하지만 보낼 수 없습니다. –

0

설정이 값 구글 :

message.setContent(body, "text/html; charset=UTF-8");  
messageBodyPart.setContent(body, "text/html; charset=UTF-8"); 

는 또한 파일 경로를 확인하거나

1

그 코드를 사용하여 실제로 작동하는지 확인하십시오. 프리스트, 파일의 mail.txt의 정확한 경로를 정의하는 데 그 패키지를

 
import javax.activation.CommandMap; 
import javax.activation.MailcapCommandMap; 

MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
     mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
     mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
     mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
     mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
     mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
     CommandMap.setDefaultCommandMap(mc); 
0
static { 
    // add handlers for main MIME types 
    MailcapCommandMap mcap = new MailcapCommandMap(); 
    mcap.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
    mcap.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
    mcap.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
    mcap.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed; x-java-fallback-entry=true"); 
    mcap.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
    CommandMap.setDefaultCommandMap(mcap); 
} 
+0

코드를 설명해 주시겠습니까? – Korcholis

0

시도를 가져옵니다. 예를 들어
는 그 다음 단지 만들기 때문에 안전을 위해 가서

String filename = ("c:\\users\\mail.txt"); 

같은 전체 경로를 포함하고 언젠가 당신이 하나의 백 슬래시를 가지고 ("c:\users\mail.txt")에 문제가 발생할 수 있음을 유의하시기 바랍니다 C:에있는 경우이를 이중 백 슬래시

항상 정확하게 .printStackTrace() 방법을 사용하십시오. 문제가 정확히 어디에서 발생했는지 파악하면 도움이되므로 문제를 검색 할 때 찾고있는 정보를 정확하게 알 수 있습니다.

0

Pls는이 링크를 참조하십시오 http://forum.spring.io/forum/osgi-related/dm-server-general/61205-problems-sending-mime-multipart-mails

그것은 문제의 가능한 원인을 설명하고 일반적으로 같은 해결에 대한 조언.

jboss 퓨즈에서 apache camel을 사용하는 동안 동일한 문제가 발생했습니다. 내 pom.xml을 수정해야했습니다 ... 아래 스 니펫을 참조하십시오.

<!-- add a depency on javax.mail, in addition to the dependency on camel-mail --> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-mail</artifactId> 
     <version>2.10.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.mail</groupId> 
     <artifactId>javax.mail</artifactId> 
     <version>1.5.1</version> 
    </dependency> 

    <!-- explicitly import the com.sun.mail.handlers package under the Import-Package section of the pom.xml --> 

    <Import-Package>com.sun.mail.handlers, *</Import-Package> 
관련 문제