2016-12-02 147 views
1

在java中发送电子邮件时出现运行时异常UnsupportedDataTypeException。这里是详细例外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但现在使用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现在我正在使用它。 –