2016-12-02 13 views
1

Я получаю исключение во время выполнения UnsupportedDataTypeException при отправке электронной почты в java. Вот подробное исключениеJava: Получение исключения при отправке вложения электронной почты

Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: IOException while sending message; 
    nested exception is: 
    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
    boundary="----=_Part_0_764977973.1480687764115" 

Как я могу устранить это исключение?

Я использую этот кусок кода: полный код

public static void main(String[] args) { 

    String senderMail = "[email protected]"; 
    String recepMail = "[email protected]"; 
    String pass = "*********"; 
    String host = "smtp.gmail.com"; 
    String filePath = "C:\\Users\\Inzimam\\Desktop\\helicopter_final.png"; 

    sendJavaMail(senderMail, pass, recepMail, host, filePath); 
} 

private static void sendJavaMail(String senderMail, String pass, String recepMail, String host, String filePath) { 
    Properties props = new Properties(); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.host", host); 
    props.put("mail.smtp.port", "25"); 
    // Get the Session object. 
    Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
       @Override 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(senderMail, pass); 
       } 
      }); 
    session.setDebug(true); 
    try { 

     Message message = new MimeMessage(session);    
     message.setFrom(new InternetAddress(senderMail));    
     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recepMail));    
     message.setSubject("Subject here");    
     BodyPart messageBodyPart = new MimeBodyPart();    
     messageBodyPart.setText("This is message body");    
     Multipart multipart = new MimeMultipart();    
     multipart.addBodyPart(messageBodyPart);    
     messageBodyPart = new MimeBodyPart(); 


     DataSource source = new FileDataSource(filePath); 
     messageBodyPart.setDataHandler(new DataHandler(source)); 
     multipart.addBodyPart(messageBodyPart);    
     message.setContent(multipart); 
     SMTPTransport t = (SMTPTransport) session.getTransport("smtps"); 
     t.connect("smtp.gmail.com", senderMail, pass); 
     t.sendMessage(message, message.getAllRecipients()); 
     t.close(); 
//   Transport.send(message); 

     JOptionPane.showMessageDialog(null, "Message has been sent successfully!."); 

    } catch (MessagingException e) { 
     throw new RuntimeException(e); 
    } 
} 

Пожалуйста, укажите, что где я ошибаюсь. Спасибо

+0

Вам действительно нужно переписать переменную messageBodyPart – jay

ответ

0

Сначала я использовал Javamail API 1.4.6 Но теперь с API Javamail Version 1.5.0 или выше тот же код, указанный выше, работает правильно. Итак, теперь с API 1.5.0 я могу успешно отправить вложение.

Edit: с API 1.4.6, когда я использовал

Transport.send(message); 

это не работает Но с API 1.5.0 или выше, мы можем также использовать

Transport.send(message); 

вместо

SMTPTransport t = (SMTPTransport) session.getTransport("smtps"); 
      t.connect("smtp.gmail.com", senderMail, pass); 
      t.sendMessage(message, message.getAllRecipients()); 
      t.close(); 
+1

Обратите внимание, что [текущая версия - JavaMail 1.5.6] (https://java.net/projects/javamail/pages/Home). –

+0

@BillShannon да, теперь я использую его. –

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

  • Нет связанных вопросов^_^