【发布时间】:2015-05-04 07:55:51
【问题描述】:
我有一个关于邮件的项目并且可以正常工作,但我创建了另一个项目,该项目也是关于邮件的,生成的 MimeMessage 无法在第一个项目中解析。
我研究了这些类,发现 MimeMessage 的头类之间的区别 两个项目都在使用
javax.mail.internet.MimeMessage
但我将标题记录为:
Enumeration enumer = originalUserMessage.getAllHeaders();
while(true){
try{
Object obj = enumer.nextElement();
if(obj == null) {
break;
}
LOGGER.info("Header class: "+obj.getClass().getName());
LOGGER.info("Header super class:" + obj.getClass().getSuperclass().getName());
} catch (NoSuchElementException nsee) {
break;
}
}
打印的第一个项目:
2015-03-03 16:57:16 INFO SmimeWriter:204 - Header class:
javax.mail.Header
2015-03-03 16:57:16 INFO SmimeWriter:205 - Header super class:
java.lang.Object
打印第二个项目
2015-03-03 16:57:39 INFO SmimeWriter:204 - Header class:
javax.mail.internet.InternetHeaders$InternetHeader
2015-03-03 16:57:39 INFO SmimeWriter:205 - Header super class:
javax.mail.Header
所有相关的类似乎都在 mail.jar 中。我正在使用 maven 来获取 jars,两个项目都将 jar 获取为:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.2</version>
</dependency>
可能是什么问题。还有其他依赖的jar吗?
两个项目都使用相同的方法。在设置了 MIME 消息其他部分下方的代码块后,但此处出现问题。 代码:
MimeMessage originalUserMessage = new MimeMessage(session);
originalUserMessage.setFrom(from);
originalUserMessage.setRecipients(Message.RecipientType.TO, to);
if(cc != null && cc.length>0){
originalUserMessage.setRecipients(Message.RecipientType.CC, cc);
}
Enumeration enumer = originalUserMessage.getAllHeaders();
while(true){
try{
Object obj = enumer.nextElement();
if(obj == null) {
break;
}
LOGGER.info("Header class: "+obj.getClass().getName());
LOGGER.info("Header super class: "+obj.getClass().getSuperclass().getName());
} catch (NoSuchElementException nsee) {
break;
}
}
【问题讨论】:
-
如果从 cmets 正确理解您的真正问题:在某些 JavaMail 实现中,调用
setRecipients(Message.RecipientType.TO, addr),其中 addr 是包含两个或多个逗号分隔地址的字符串,结果在多个“To:”标头中,而不是 MimeMessage 中的单个统一“To:”标头。对吗? -
这正是我的问题 :) 很抱歉没有解决这个问题。
-
您说 servlet 容器提供 JavaMail,即使我在我的应用程序 ClassLoader 中放置所需版本的 JavaMail 也可能会忽略它并使用服务器环境提供的版本。在第一个项目中,我们使用定制版本的 tomcat,但在第二个项目中,我们在常规 tomcat 上运行。这可能是实际问题。如何强制 ClassLoader 从包而不是 tomcat 提供的包中加载 JavaMail。
-
顺便说一句,我错过了说 addr is javax.mail.Address[]
-
听起来定制的Tomcat在它的库目录中有一个更新的JavaMail,你的JavaMail可能有bug。考虑将您的依赖项更改为a more recent JavaMail version。
标签: java mime jakarta-mail smime