2011-01-06 31 views
5

uso el siguiente código para enviar el mensaje que envía mail.Text está funcionando bien pero el correo con el accesorio no está funcionando da la Exception.How para resolver esteMessagingExceptionIOException al enviar un mensaje en java?

javax.mail.MessagingException: IOException al enviar el mensaje; La excepción anidada es: javax.activation.UnsupportedDataTypeException: ningún objeto DCH para el tipo MIME multipart/mixed; boundary = "---- = _ Part_0_10430987.1294298904906" en com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:676) en javax.mail.Transport.send0 (Transport.java:189) en javax.mail.Transport.send (Transport.java:118) en Gmailer.GMailSender.sendMailAttach (GMailSender.java:114) en SendMail.main (SendMail.java:22) causada por: javax.activation.UnsupportedDataTypeException : ningún objeto DCH para MIME tipo multipart/mixed; límite = "---- = _ Part_0_10430987.1294298904906" en javax.activation.ObjectDataContentHandler.writeTo (origen desconocido) en javax.activation.DataHandler.writeTo (origen desconocido) en javax.mail.internet.MimeBodyPart.writeTo (MimeBodyPart.java:1403) en javax.mail.internet.MimeMessage.writeTo (MimeMessage.java:1745) en com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:636) ... 4 más

correo con código adjuntos:

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()); 
} 
} 

texto de código Enviar correo:

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

Seguimiento de la pila es incompleta, por favor dé la completa. – Kartoch

+0

Duplicado de http://stackoverflow.com/questions/1969667/send-a-mail-from-java5-and-java6 – dkarp

Respuesta

4

En primer lugar, se puede hacer su código es un poco más conciso usando MimeBodyPart.attachFile() en lugar de disputar el código DataSource/DataHandler usted mismo.

En segundo lugar, intente configurar los encabezados Content-Type y Content-Disposition en la parte de su adjunto con los valores apropiados. (attachFile establecerá el Content-Disposición para usted por defecto.) Por ejemplo,

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



EDIT:

Después de pensar un poco, esto tiene que ser algo mal con la carga de clases.Por favor marque this other SO thread para ver si soluciona su situación. (Problema general: Probablemente una activación adicional.jar en su classpath; algunas otras posibilidades también se piensa que lo causan).

+0

Intento esto también .Pero no funciona para mí –

0

creo que su programa no es capaz de encontrar el archivo mail.txt. Por favor, indique la ruta correcta/completa. Un stacktrace de excepción puede dar más idea. Si es posible, responda con eso. e.printStacktrace();

+0

Puedo leer el archivo. Pero no puedo enviarlo –

0

Ajuste este valor:

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

consultar también la ruta del archivo, o escriba por favor ruta completa en el registro de

1

Usa ese código para poner ese código y luego chek que realmente funciona. Frist, importar ese paquete

 
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

¿Podría explicar el código? – Korcholis

0

tratar de definir la ruta exacta de su archivo, la mail.txt.
Por ejemplo si está en C: luego seguir adelante y contempla todo un camino como

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

y tenga en cuenta que en algún momento es posible que experimente problemas con ("c:\users\mail.txt") que tiene una barra invertidas por lo que es seguro simplemente convertirlos en barras invertidas dobles

También siempre asegúrese de utilizar el método .printStackTrace() ya que le ayudará a identificar dónde surgirá exactamente su problema para que cuando busque ese problema estará en una buena posición para saber exactamente lo que va a estar buscando.

0

pls refieren a este enlace: http://forum.spring.io/forum/osgi-related/dm-server-general/61205-problems-sending-mime-multipart-mails

Se explica una causa probable del problema y, en general asesorar en la resolución misma.

Me encontré igual durante el uso de apache camel en fusible jboss. Tuve que modificar mi pom.xml ... ver fragmentos siguientes:

<!-- 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> 
Cuestiones relacionadas