2016-12-02 22 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を使用していましたが、今度はJavamail API Version 1.5.0以上で上記のコードが正しく動作しています。 API 1.5.0では、添付ファイルを正常に送信できます。

編集: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はい今私はそれを使用しています。 –

関連する問題