JavaMail未发送主题或从jetty下发送:运行war
是否有人看到JavaMail没有向SMTP服务器发送正确的MIMEssages,这取决于JVM的启动方式?在一天结束时,我无法发送带有Subject:或From:字段的JavaMail SMTP消息,而且似乎只有在将应用程序作为war运行时,其他标题才会丢失 web项目是用Maven构建的,我正在测试使用浏览器和简单的mail.jsp发送JavaMail,以调试并查看启动应用程序时的不同行为: 1) mvn jetty:运行(邮件发送良好,主题正确,来自字段) 2) mvn jetty:运行war(邮件发送很好,但缺少主题、发件人和其他字段) 我仔细地在(详细的)Maven调试输出(-X)上运行了diff,两者之间的运行时依赖关系没有任何差异。我还比较了系统属性,它们是相同的。在jetty:RunWar案例中还发生了一些改变JavaMail行为方式的事情。还有什么石头需要转动 奇怪的是,我在这两种情况下都尝试了调试器,发现javax.mail.internet.MimeMessage实例的创建方式不同。webapp使用Spring发送从apacheactivemq队列中提取的电子邮件。当以mvn jetty:run运行应用程序时,MimeMessage.contentStream变量用于消息内容。当以mvn jetty:run war运行时,MimeMessage.content变量用于消息内容,而 content=asciuility.getBytes(is); 调用从解析的内容中删除所有标题数据。因为这看起来很奇怪,而且调试Spring/ActiveMQ是一个深入的过程,所以我创建了一个没有任何基础设施的简化测试:只是一个使用mail-1.4.2.jar的JSP,但是缺少相同的头 同样值得注意的是,在Tomcat 5.5.27下运行WAR文件时,这些头文件丢失。Tomcat在运行WAR时的行为就像Jetty一样,缺少相同的头 打开JavaMail调试后,我清楚地看到了不同的输出 好例子:在jetty:run(非WAR)中,日志输出为:JavaMail未发送主题或从jetty下发送:运行war,java,smtp,jakarta-mail,war,Java,Smtp,Jakarta Mail,War,是否有人看到JavaMail没有向SMTP服务器发送正确的MIMEssages,这取决于JVM的启动方式?在一天结束时,我无法发送带有Subject:或From:字段的JavaMail SMTP消息,而且似乎只有在将应用程序作为war运行时,其他标题才会丢失 web项目是用Maven构建的,我正在测试使用浏览器和简单的mail.jsp发送JavaMail,以调试并查看启动应用程序时的不同行为: 1) mvn jetty:运行(邮件发送良好,主题正确,来自字段) 2) mvn jetty:运行wa
DEBUG: JavaMail version 1.4.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "mail.authsmtp.com", port 465, isSSL false
220 mail.authsmtp.com ESMTP Sendmail 8.14.2/8.14.2/Kp; Thu, 18 Jun 2009 01:35:24 +0100 (BST)
DEBUG SMTP: connected to host "mail.authsmtp.com", port: 465
EHLO jmac.local
250-mail.authsmtp.com Hello sul-pubs-3a.Stanford.EDU [171.66.201.2], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 52428800
250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
250-DELIVERBY
250 HELP
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "SIZE", arg "52428800"
DEBUG SMTP: Found extension "AUTH", arg "CRAM-MD5 DIGEST-MD5 LOGIN PLAIN"
DEBUG SMTP: Found extension "DELIVERBY", arg ""
DEBUG SMTP: Found extension "HELP", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5
AUTH LOGIN
334 VXNlcm5hjbt7
YWM0MDkwhi==
334 UGFzc3dvjbt7
YXV0aHNtdHAydog3
235 2.0.0 OK Authenticated
DEBUG SMTP: use8bit false
MAIL FROM:<webmaster@mydomain.org>
250 2.1.0 <webmaster@mydomain.org>... Sender ok
RCPT TO:<jason@mydomain.org>
250 2.1.5 <jason@mydomain.org>... Recipient ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: Jason Thrasher <jason@mydomain.org>
DATA
354 Enter mail, end with "." on a line by itself
From: Webmaster <webmaster@mydomain.org>
To: Jason Thrasher <jason@mydomain.org>
Message-ID: <5158456.0.1245285323633.JavaMail.jason@mail.authsmtp.com>
Subject: non-Spring: Hello World
MIME-Version: 1.0
Content-Type: text/plain;charset=UTF-8
Content-Transfer-Encoding: 7bit
Hello World: message body here
.
250 2.0.0 n5I0ZOkD085654 Message accepted for delivery
QUIT
221 2.0.0 mail.authsmtp.com closing connection
调试:JavaMail版本1.4.2
调试:已成功加载资源:/META-INF/javamail.default.providers
调试:加载的提供程序的表
调试:按类名列出的提供程序:{com.sun.mail.smtpsslttransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.smtpsslttransport,sun Microsystems,Inc],com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtps,com.SMTPTransport,sun Microsystems,Inc],com.sun.mail.imapssltore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,sun Microsystems,Inc],com.sun.mail.pop3.pop3ssstore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.pop3ssstore,sun Microsystems,Inc],com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.mail.imap.IMAPStore,sun Microsystems,Inc],com.sun[商店,pop3,com.sun.mail.pop3.POP3Store,sun Microsystems,Inc]]
调试:协议列出的提供程序:{imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.imapssltore,sun Microsystems,Inc],imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,sun Microsystems,Inc],smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.smtpsslttransport,sun Microsystems,Inc],pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,sun Microsystems,Inc],pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.pop3ssl,sun Microsystems,Inc],smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.SMTPTransport,sun Microsystems,Inc]]
调试:已成功加载资源:/META-INF/javamail.default.address.map
调试:getProvider()返回javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,sun Microsystems,Inc]
调试SMTP:useEhlo true,useAuth true
调试SMTP:尝试连接到主机“mail.authstp.com”,端口465,isSSL false
220 mail.authstp.com ESMTP Sendmail 8.14.2/8.14.2/Kp;周四,2009年6月18日01:35:24+0100(英国夏令时)
调试SMTP:已连接到主机“mail.authstp.com”,端口:465
EHLO jmac.local
250-mail.authstp.com你好sul-pubs-3a.Stanford.EDU[171.66.201.2],很高兴认识你
250-增强状态码
250-流水线
250-8比特
250号52428800
250-AUTH CRAM-MD5摘要-MD5普通登录
250-Deliveerby
250帮助
调试SMTP:找到扩展名“ENHANCEDSTATUSCODES”,arg“”
调试SMTP:找到扩展名“管道”,arg“”
调试SMTP:找到扩展名“8BITMIME”,参数“”
调试SMTP:找到扩展名“SIZE”,arg“52428800”
调试SMTP:找到扩展名“AUTH”,arg“CRAM-MD5 DIGEST-MD5普通登录”
调试SMTP:找到扩展名“DELIVERBY”,arg“”
调试SMTP:找到扩展名“帮助”,参数“”
调试SMTP:尝试进行身份验证
调试SMTP:检查机制:登录普通摘要-MD5
身份验证登录
334 VXNlcm5hjbt7
YWM0MDkwhi==
334 UGFzc3dvjbt7
YXV0aHNtdHAydog3
235 2.0.0正常验证
调试SMTP:use8bit false
邮寄地址:
250 2.1.0…发送器正常
RCPT至:
250 2.1.5…收件人正常
调试SMTP:已验证的地址
调试SMTP:Jason Thrasher
资料
354输入mail,在一行上以“.”结束
发件人:网站管理员
致:杰森·斯拉舍
消息ID:
主题:非春天:你好,世界
MIME版本:1.0
内容类型:文本/普通;字符集=UTF-8
内容传输编码:7bit
你好,世界:这里是消息正文
.
250 2.0.0 n5I0ZOkD085654邮件已接受传递
退出
221 2.0.0 mail.authsmtp.com正在关闭连接
坏情况:作为WAR运行时的日志输出(缺少标题)与此完全不同:
Loading javamail.default.providers from jar:file:/Users/jason/.m2/repository/javax/mail/mail/1.4.2/mail-1.4.2.jar!/META-INF/javamail.default.providers
DEBUG: loading new provider protocol=imap, className=com.sun.mail.imap.IMAPStore, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=imaps, className=com.sun.mail.imap.IMAPSSLStore, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=smtp, className=com.sun.mail.smtp.SMTPTransport, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=smtps, className=com.sun.mail.smtp.SMTPSSLTransport, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=pop3, className=com.sun.mail.pop3.POP3Store, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=pop3s, className=com.sun.mail.pop3.POP3SSLStore, vendor=Sun Microsystems, Inc, version=null
Loading javamail.default.providers from jar:file:/Users/jason/Documents/dev/subscribeatron/software/trunk/web/struts/target/work/webapp/WEB-INF/lib/mail-1.4.2.jar!/META-INF/javamail.default.providers
DEBUG: loading new provider protocol=imap, className=com.sun.mail.imap.IMAPStore, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=imaps, className=com.sun.mail.imap.IMAPSSLStore, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=smtp, className=com.sun.mail.smtp.SMTPTransport, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=smtps, className=com.sun.mail.smtp.SMTPSSLTransport, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=pop3, className=com.sun.mail.pop3.POP3Store, vendor=Sun Microsystems, Inc, version=null
DEBUG: loading new provider protocol=pop3s, className=com.sun.mail.pop3.POP3SSLStore, vendor=Sun Microsystems, Inc, version=null
DEBUG: getProvider() returning provider protocol=smtp; type=javax.mail.Provider$Type@98203f; class=com.sun.mail.smtp.SMTPTransport; vendor=Sun Microsystems, Inc
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "mail.authsmtp.com", port 465, isSSL false
220 mail.authsmtp.com ESMTP Sendmail 8.14.2/8.14.2/Kp; Thu, 18 Jun 2009 01:51:46 +0100 (BST)
DEBUG SMTP: connected to host "mail.authsmtp.com", port: 465
EHLO jmac.local
250-mail.authsmtp.com Hello sul-pubs-3a.Stanford.EDU [171.66.201.2], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 52428800
250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
250-DELIVERBY
250 HELP
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "SIZE", arg "52428800"
DEBUG SMTP: Found extension "AUTH", arg "CRAM-MD5 DIGEST-MD5 LOGIN PLAIN"
DEBUG SMTP: Found extension "DELIVERBY", arg ""
DEBUG SMTP: Found extension "HELP", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5
AUTH LOGIN
334 VXNlcm5hjbt7
YWM0MDkwhi==
334 UGFzc3dvjbt7
YXV0aHNtdHAydog3
235 2.0.0 OK Authenticated
DEBUG SMTP: use8bit false
MAIL FROM:<webmaster@mydomain.org>
250 2.1.0 <webmaster@mydomain.org>... Sender ok
RCPT TO:<jason@mydomain.org>
250 2.1.5 <jason@mydomain.org>... Recipient ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: Jason Thrasher <jason@mydomain.org>
DATA
354 Enter mail, end with "." on a line by itself
Hello World: message body here
.
250 2.0.0 n5I0pkSc090137 Message accepted for delivery
QUIT
221 2.0.0 mail.authsmtp.com closing connection
从jar:file:/Users/jason/.m2/repository/javax/mail/mail/1.4.2/mail-1.4.2.jar!加载javamail.default.providers!/META-INF/javamail.default.providers
调试:加载新的提供程序协议=imap,className=com.sun.mail.imap.IMAPStore,vendor=sun Microsystems,Inc,version=null
调试:加载新的提供程序协议=imaps,类名称=com.sun.mail.imap.IMAPSSLStore,供应商=sun Microsystems,Inc,版本=null
调试:加载新的提供程序协议=smtp,类名
<%@page import="java.util.*"%>
<%@page import="javax.mail.internet.*"%>
<%@page import="javax.mail.*"%>
<%
InternetAddress from = new InternetAddress("webmaster@mydomain.org", "Webmaster");
InternetAddress to = new InternetAddress("jason@mydomain.org", "Jason Thrasher");
String subject = "non-Spring: Hello World";
String content = "Hello World: message body here";
final Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "mail.authsmtp.com");
props.setProperty("mail.port", "465");
props.setProperty("mail.username", "myusername");
props.setProperty("mail.password", "secret");
props.setProperty("mail.debug", "true");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
Session mailSession = Session.getDefaultInstance(props);
Message message = new MimeMessage(mailSession);
message.setFrom(from);
message.setRecipient(Message.RecipientType.TO, to);
message.setSubject(subject);
message.setContent(content, "text/plain;charset=UTF-8");
Transport trans = mailSession.getTransport();
trans.connect(props.getProperty("mail.host"), Integer
.parseInt(props.getProperty("mail.port")), props
.getProperty("mail.username"), props
.getProperty("mail.password"));
trans.sendMessage(message, message
.getRecipients(Message.RecipientType.TO));
trans.close();
%>
email was sent
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.2.6</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-javamail_1.4_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
-com.sun.mail.smtp.SMTPTransport$Authenticator
-com.sun.mail.smtp.SMTPTransport$DigestMD5Authenticator
-com.sun.mail.smtp.SMTPTransport$LoginAuthenticator
-com.sun.mail.smtp.SMTPTransport$PlainAuthenticator
-com.sun.mail.util.FolderClosedIOException
-com.sun.mail.util.MessageRemovedIOException
-com.sun.mail.util.PropUtil
-javax.mail.FolderClosedException
-javax.mail.MessageRemovedException
-javax.mail.Multipart
-javax.mail.internet.ParameterList$MultiValue
-javax.net.SocketFactory
-javax.net.ssl.SSLException
-javax.net.ssl.SSLPeerUnverifiedException
-javax.net.ssl.SSLSocket
+javax.mail.internet.CachedDataHandler
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.3.9</version>
</dependency>
properties.setProperty("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport"); // Fix to prevent Amazon AWS from giving their transport