首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用javax.mail在Java中发送电子邮件时出现异常

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

Stack Overflow用户
提问于 2014-04-15 02:24:24
回答 2查看 1.9K关注 0票数 1

我正在尝试做一个Android应用程序,它可以自动发送图像,而不需要用户的任何干预。

为此,我使用了javax.mail jar (以及activation.jaradditional.jar)。我正在做以下事情

代码语言:javascript
复制
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):MIME类型multipart/mixed的javax.activation.UnsupportedDataTypeException:无对象DCH;

带系统错误(24907):boundary="----=_Part__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。如果解决方案需要它...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-15 03:18:25

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

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

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

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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"); 

请参阅

    • 将条目添加到注册表。以编程方式添加的条目将在其他entries.

之前进行搜索

除了这个方法之外,请阅读关于这个类的完整文档。

票数 1
EN

Stack Overflow用户

发布于 2018-07-20 09:56:44

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

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

代码语言:javascript
复制
-keep class com.sun.mail.handlers.**
-dontwarn com.sun.mail.handlers.handler_base
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23067408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档