Có ai đã xem JavaMail không gửi MimeMessages phù hợp đến máy chủ SMTP, tùy thuộc vào cách JVM bắt đầu? Vào cuối ngày, tôi không thể gửi tin nhắn JavaMail SMTP với các trường Chủ đề: hoặc Từ: và xuất hiện các tiêu đề khác bị thiếu, chỉ khi chạy ứng dụng dưới dạng chiến tranh.JavaMail không gửi Chủ đề hoặc Từ dưới cầu cảng: chạy chiến tranh
Các dự án web được xây dựng với Maven và tôi đang thử nghiệm gửi JavaMail sử dụng một trình duyệt và một mail.jsp đơn giản để gỡ lỗi và thấy hành vi khác nhau khi khởi chạy ứng dụng với:
1) cầu cảng mvn: chạy (mail gửi tốt, với Chủ đề phù hợp và Từ lĩnh vực)
2) mvn jetty: chạy chiến tranh (mail gửi tốt, nhưng thiếu Chủ đề, Từ, và các lĩnh vực khác)
tôi đã tỉ mỉ chạy khác biệt trên đầu ra gỡ lỗi Maven (verbose) (-X) và không có sự khác biệt về phụ thuộc thời gian chạy giữa hai. Tôi cũng đã so sánh các thuộc tính hệ thống và chúng giống hệt nhau. Một cái gì đó khác đang xảy ra cầu cảng: trường hợp chạy chiến tranh thay đổi cách JavaMail hoạt động. Những loại đá nào khác cần quay?
Thật kỳ lạ, tôi đã thử một trình gỡ lỗi trong cả hai trường hợp và nhận thấy rằng cá thể javax.mail.internet.MimeMessage đang được tạo khác nhau. Webapp đang sử dụng Spring để gửi email được chọn của hàng đợi Apache ActiveMQ. Khi chạy ứng dụng dưới dạng mvn jetty:run
biến MimeMessage.contentStream được sử dụng cho nội dung tin nhắn. Khi chạy dưới dạng mvn jetty:run-war
, biến MimeMessage.content được sử dụng cho nội dung thư và content = ASCIIUtility.getBytes (is); Cuộc gọi xóa tất cả dữ liệu tiêu đề khỏi nội dung được phân tích cú pháp. Vì điều này có vẻ rất kỳ quặc, và việc gỡ lỗi Spring/ActiveMQ là một bước nhảy sâu, tôi đã tạo ra một bài kiểm tra đơn giản mà không cần bất kỳ cơ sở hạ tầng nào: chỉ cần một JSP bằng cách sử dụng mail-1.4.2.jar, nhưng vẫn thiếu các tiêu đề tương tự.
Ngoài ra lưu ý, các tiêu đề này bị thiếu khi chạy tệp WAR theo Tomcat 5.5.27. Tomcat hoạt động giống như Jetty khi chạy WAR, với cùng một tiêu đề bị thiếu.
Khi bật tính năng gỡ lỗi JavaMail, tôi thấy rõ đầu ra khác nhau.
TRƯỜNG HỢP TỐT: Trong cầu cảng: chạy (không WAR) các dữ liệu ghi nhận là:
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:<[email protected]>
250 2.1.0 <[email protected]>... Sender ok
RCPT TO:<[email protected]>
250 2.1.5 <[email protected]>... Recipient ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: Jason Thrasher <[email protected]>
DATA
354 Enter mail, end with "." on a line by itself
From: Webmaster <[email protected]>
To: Jason Thrasher <[email protected]>
Message-ID: <[email protected]>
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
trường hợp xấu: Các dữ liệu ghi nhận khi chạy như một WAR, với tiêu đề mất tích, là khá khác nhau:
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; [email protected]; 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:<[email protected]>
250 2.1.0 <[email protected]>... Sender ok
RCPT TO:<[email protected]>
250 2.1.5 <[email protected]>... Recipient ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: Jason Thrasher <[email protected]>
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
Đây là mail.jsp thực tế mà tôi đang thử nghiệm chiến tranh/không chiến tranh với.
<%@page import="java.util.*"%>
<%@page import="javax.mail.internet.*"%>
<%@page import="javax.mail.*"%>
<%
InternetAddress from = new InternetAddress("[email protected]", "Webmaster");
InternetAddress to = new InternetAddress("[email protected]", "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
SOLUTION:
Vâng, vấn đề là phụ thuộc bắc cầu của Apache CXF 2. Tôi đã phải loại trừ geronimo-javamail_1.4_spec từ việc xây dựng, và chỉ dựa vào mail-1.4.jar javax của.
<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>
Cảm ơn tất cả các câu trả lời.
bạn có thể đăng mã được sử dụng để thực sự gửi thư không? –
Xin chào Matt, chắc chắn, hãy xem mail.jsp của tôi ở trên. Ứng dụng hoàn chỉnh tải các Spring, Struts và Apache jars khác nhau, nhưng vì tôi đã quá bối rối về vấn đề này, tôi đã tạo ra mail.jsp đơn giản này, để kiểm tra nó với. Chỉ mail-1.4.2.jar đang được tải. Tôi đang thua lỗ vì những gì sẽ tăng lên khi gửi email. Cảm ơn. –
Xin chào Jason, bạn đã tìm ra giải pháp chưa? Chúng tôi có trường hợp hơi khác nhau nhưng kết quả là như nhau. –