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

标签 java android email jakarta-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 while sending message;
W/System.err(24907): nested exception is:
W/System.err(24907): javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed;
W/System.err(24907): boundary="----=_Part_0_1095625208.1397499270313"
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 位 计算机和 Eclipse Java EE IDE for Web Developers - Kepler。如果解决方案需要它...

最佳答案

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

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

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

将以下代码 fragment 添加到您的邮件模块,并可用于邮件 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 - 使用 javax.mail 在 Java 中发送电子邮件时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23067408/

相关文章:

java - 如何使用 JMapProjLib、Proj4j 或 Proj4js 在不同坐标系之间转换坐标?

java - 获取数组中项目的索引

java - 安卓 : Google API inside a custom adapter

android - 无法替换 fragment 。找不到 fragment ID 的 View

html - Outlook 在表格上更改边框 css

r - 如何在电子邮件正文中发送 R Markdown 报告?

java - for 循环中 Thread.sleep(x) 的问题 - Java

java - DWR - Jetty 9 中的 splinter 反射异常

android - 如何检测 TextView 中的键盘语言?

email - 站点核心 8 EXM : Create Custom Email Campaign