【问题标题】:Exception while sending an email in Java with javax.mail使用 javax.mail 在 Java 中发送电子邮件时出现异常
【发布时间】:2014-04-14 18:24:24
【问题描述】:

我正在尝试制作一个无需用户干预即可自动发送图像的 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): 边界="----=_Part_0_1095625208.1397499270313"
W/System.err(24907):在 com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1182)
W/System.err(24907):在 javax.mail.Transport.send0(Transport.java:254)
W/System.err(24907): 在 javax.mail.Transport.send(Transport.java:124)

关于如何解决这个问题的任何想法?

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

【问题讨论】:

  • 你使用的java mail api是什么版本。

标签: java android email jakarta-mail


【解决方案1】:

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

如果您可以下载和使用最新的1.5.* 版本的java mail api,这个错误应该会得到解决。

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

将以下代码 sn-p 添加到您的邮件模块,可用于邮件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"); 

参考

除了这个方法,阅读这个类的整个文档。

【讨论】:

  • 谢谢,这段代码终于成功了。我使用的是 java 邮件版本 1.5.1,但没有该代码它不起作用
【解决方案2】:

我的发布模式 android 应用程序遇到了同样的问题,它在调试模式下按预期工作。

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

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

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 2018-10-17
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多