MessagingExceptionIOException al enviar un mensaje en Java?

Utilizo el siguiente código para enviar correo. El envío de mensajes de texto funciona bien pero el correo con archivo adjunto no funciona, da la excepción. Cómo resolver esto

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) Causado por: javax.activation.UnsupportedDataTypeException: ningún objeto DCH para el tipo MIME multiparte / mixto; boundary = "---- = _ Part_0_10430987.1294298904906" en javax.activation.ObjectDataContentHandler.writeTo (fuente desconocida) en javax.activation.DataHandler.writeTo (fuente desconocida) en javax.mail.internet.MimeBartPart.BritePody.artime.artime.artime.artimeBody : 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 adjunto:

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

Código de envío de correo de texto:

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) {

}
}

Respuestas a la pregunta(8)

Su respuesta a la pregunta