当前位置: 首页 > 面试题库 >

从java5和java6发送邮件

仲孙英才
2023-03-14
问题内容

我知道在此之前已经问过很多类似的问题,但是我认为这个问题有些不同:)

我正在编写一个maven报告插件,它将向用户列表发送电子邮件。我现在遇到的问题是,当我使用java5运行该代码时,该代码似乎运行良好,但使用java6失败。实际上,该插件是用Groovy编写的,并使用commons-email实用程序发送html消息:

HtmlEmail email = new HtmlEmail();
email.setHostName(mailhost);
email.setSmtpPort(mailport);
email.setFrom(args.from);
email.addTo(args.receiver);
email.setSubject(args.subject);
email.setHtmlMsg(args.htmlmessage);
email.setDebug(log.isDebugEnabled());
email.send();

该项目依赖于javax.mail:mail:1.4.1和javax.activation:activation:1.1.1。

如果我使用新插件运行Maven项目,则Java6会出现此异常:

javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
boundary="----=_Part_0_11139111.1262007863993"
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676)
at javax.mail.Transport.send0(Transport.java:189)

使用java5,我没有任何问题。

我尝试了以下解决方法:

以编程方式添加mailcap配置:

// add handlers for main mail MIME types
MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();
mc.getMimeTypes().each{ println "Original MIME-TYPE: $it" }
mc.getAllCommands ("multipart/mixed").each { println "Original COMMAND: $it" }

mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("multipart/mixed;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);

MailcapCommandMap mc2 = (MailcapCommandMap)CommandMap.getDefaultCommandMap();
mc2.getMimeTypes().each{ println "Replaced MIME-TYPE: $it" }
mc2.getAllCommands ("multipart/mixed").each { println "Replaced COMMAND: $it" }

这也不适用于java6,但实际上表明请求的mimetype未在mailcap中注册(请参阅带有“ println”日志语句的循环)。

Original  MIME-TYPE: image/jpeg
Original  MIME-TYPE: image/gif
Original  MIME-TYPE: text/*
Replaced MIME-TYPE: message/rfc822
Replaced MIME-TYPE: multipart/*
Replaced MIME-TYPE: text/plain
Replaced MIME-TYPE: text/xml
Replaced MIME-TYPE: multipart/mixed
Replaced MIME-TYPE: text/html
Replaced MIME-TYPE: image/jpeg
Replaced MIME-TYPE: image/gif
Replaced MIME-TYPE: text/*
Replaced COMMAND: javax.activation.CommandInfo@1e5d007
Replaced COMMAND: javax.activation.CommandInfo@bc8f01

我创建了一个名为“ mailcap”的文件,并将其放置在插件的“ META-INF”目录中(请参阅http://java.sun.com/j2ee/1.4/docs/api/javax/activation/MailcapCommandMap.html) 。但这一点都没有得到解决。

所以我的问题是,是否有人对如何在java5和java6上工作的代码/配置有所了解:)


问题答案:

首先检查以确保没有mail.jar,smtp.jar(旧)或activation.jar的其他副本。(最后一个可能性最大,因为您可能捆绑了activation.jar,因为JDK 1.5中未包含该文件)。

如果这不起作用,或者由于运行插件的环境导致您无法控制它,请在创建邮件实例之前尝试将上下文类加载器显式设置为系统类加载器。



 类似资料:
  • 问题内容: 用Java发送和接收邮件的最简单方法是什么。 问题答案: 不要忘记Jakarta Commons Email 发送邮件。它具有非常易于使用的API。

  • 我正在开发firebase web应用程序。我需要通过我的网络应用发送电子邮件。我看了一些教程,找到了一些代码。使用上述代码,我可以发送电子邮件。它在端口9091中运行。当地址栏上有www.mywebsite时,将发送此消息。com/sendMail。但是,当我将此页面托管到Firebase时,此代码中要做哪些更改,端口号是否必须更改?。请帮助在我的web应用程序中实现此代码。

  • 我可以从主机发送邮件,使用邮件: 但我想使用主机服务器从docker容器发送邮件。在运行命令中,当我尝试将端口映射到25端口时,Docker说“端口已在使用中”: 我怎样才能达到目标?主机是Centos,docker使用Ubuntu。

  • 尽管Python 通过smtplib 模块使得发送邮件很简单,Django 仍然在此基础上提供了几个轻量的封装包。这些封装包使得发送邮件非常快速、让开发中测试发送邮件变得很简单、并且支持不使用SMTP 的平台。 这些代码包含在django.core.mail模块中。 简单例子 两行代码实现: from django.core.mail import send_mail send_mail('Su

  • cmf_send_email($address, $subject, $message) 功能 发送邮件 参数 $address: string 收件人邮箱 $subject: string 邮件标题 $message: string 邮件内容 返回 array 格式 array( "error"=>0|1,//0代表出错 "message"=> "出错信息" );

  • X1.0新增 sp_send_email($address,$subject,$message) 功能: 发送邮件 参数: $address:收件人地址 $subject:邮件主题 $message:邮件内容 返回: 类型数组,发送状态和信息 array( "error"=>"1",//有错误 "message"=>""错误信息 ); array( "error"=>"0