使用javax.mail以Java发送电子邮件时出现异常

时间:2014-04-14 18:24:24

标签: java android email javax.mail

我试图安装自动发送图片的Android应用,而无需用户干预。

我正在使用javax.mail jar(以及activation.jaradditional.jar)来执行此操作。 我正在做以下事情

Properties props = new Properties();
props.put("mail.smtp.auth", true);
props.put("mail.smtp.starttls.enable", true);
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.ssl.enable",true);
props.put("mail.smtp.port", "465");

Session session = Session.getInstance(props,new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(USER,PASS);
    }
});

MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("*******@gmail.com"));
message.setSubject("Email Subject");

message.addRecipient(Message.RecipientType.TO, 
                     new InternetAddress("******@gmail.com"));

MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent("<img src=\"image.gif\"/>","text/html");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
FileDataSource source = new FileDataSource(new File(ruta));
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("picture.gif");
messageBodyPart.setDisposition("inline");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);

当我执行此代码时,出现以下错误

  

W / System.err(24907):javax.mail.MessagingException:发送消息时发生IOException;
  W / System.err(24907):嵌套异常是:
  W / System.err(24907):javax.activation.UnsupportedDataTypeException:没有MIME类型multipart / mixed的对象DCH;
  W / System.err(24907):boundary =&#34; ---- = _ Part_0_1095625208.1397499270313&#34;
  W / System.err(24907):at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1182)
  W / System.err(24907):at javax.mail.Transport.send0(Transport.java:254)
  W / System.err(24907):at javax.mail.Transport.send(Transport.java:124)

有关如何解决此问题的任何想法?

我正在使用Debian 64-bits计算机和Eclipse Java EE IDE for Web Developers - Kepler。如果解决方案需要......

2 个答案:

答案 0 :(得分:1)

DCH是数据内容处理程序。 MimeType处理程序似乎配置不正确。

如果您可以下载并使用最新的1.5.*版本的java mail api,则应该解决此错误。

否则,在代码中,您可以执行一些语句来设置MimeType处理程序。

将以下代码段添加到您的邮件模块,并可用于邮件Session

MailcapCommandMap mailcapCommandMap = new MailcapCommandMap(); 
mailcapCommandMap.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed; x-java-fallback-entry=true"); 
CommandMap.setDefaultCommandMap(mailcapCommandMap); 

您可以针对其他MimeTypes

进行扩展
mailcapCommandMap.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
mailcapCommandMap.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
mailcapCommandMap.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
mailcapCommandMap.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 

参阅

除此方法外,请阅读此课程的完整文档。

答案 1 :(得分:0)

我的发布模式android应用程序也遇到了同样的问题,它在调试模式下可以正常工作。

在proguard文件中添加以下行将解决此问题:

-keep class com.sun.mail.handlers.**
-dontwarn com.sun.mail.handlers.handler_base