JavaMail عدم ارسال موضوع أو من تحت رصيف: تشغيل الحرب

StackOverflow https://stackoverflow.com/questions/1010296

  •  06-07-2019
  •  | 
  •  

سؤال

وقد أي شخص ينظر JavaMail عدم ارسال MimeMessages المناسب إلى خادم SMTP، اعتمادا على كيفية JVM في البدء؟ في نهاية اليوم، لا أستطيع إرسال رسائل JavaMail SMTP مع الموضوع: أو من: المجالات، ويبدو رؤوس أخرى مفقودة، فقط عند تشغيل التطبيق على أنها حرب

.

ويتم بناء المشروع على شبكة الإنترنت مع مخضرم وأنا على اختبار إرسال JavaMail باستخدام مستعرض وmail.jsp بسيطة لتصحيح وتشاهد سلوك مختلفة عند إطلاق التطبيق مع:

<اقتباس فقرة>   

1) رصيف mvn: المدى (الرسالة وأعاد على ما يرام، مع موضوع السليم ومن الحقول)

     

2) رصيف mvn: تشغيل الحرب (الرسالة وأعاد على ما يرام، ولكن الموضوع في عداد المفقودين، من، وغيرها من المجالات)

ولقد شغلت بدقة فرق على (المطول) إخراج التصحيح مخضرم (-X)، وهناك الصفر الاختلافات في تبعيات وقت التشغيل بين البلدين. لقد قارن بين خصائص النظام، وكانت متطابقة. شيء آخر يحدث رصيف: حالة تشغيل للحرب بتغيير الطريقة التي يتصرف JavaMail. ما الأحجار الأخرى التي تحتاج إلى تحول؟

والغريب، لقد حاول المصحح في كلتا الحالتين وجدت أن المثال javax.mail.internet.MimeMessage هو الحصول على خلق بشكل مختلف. إلى تطبيق الويب يستخدم الربيع لإرسال البريد الإلكتروني اختار الخروج من قائمة انتظار أباتشي ActiveMQ. عند تشغيل التطبيق كما mvn jetty:run يستخدم المتغير MimeMessage.contentStream لمحتوى الرسالة. عند تشغيل كما mvn jetty:run-war، يتم استخدام متغير MimeMessage.content عن محتويات الرسالة، و     المحتوى = ASCIIUtility.getBytes (هو)؛ دعوة يزيل كافة البيانات رأس من محتوى معرب. وبما أن هذا يبدو غريبا جدا، وتصحيح الأخطاء الربيع / ActiveMQ هو الغوص العميق، أنا خلق اختبار مبسط دون أي من تلك البنية التحتية: مجرد JSP باستخدام الإلكتروني 1.4.2.jar، إلا أن نفس رؤوس مفقودة

وأيضا من ملاحظة، هذه الرؤوس مفقودة عند تشغيل ملف WAR تحت القط 5.5.27. القط يتصرف تماما مثل جيتي عند تشغيل WAR، مع نفس الرؤوس المفقودة.

ومع JavaMail التصحيح قيد التشغيل، أرى بوضوح إخراج مختلف.

CASE جيد: في رصيف: المدى (غير WAR) إخراج السجل:

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

CASE الكريهة: إن إخراج سجل عند تشغيل وحدة 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

وهنا يكمن mail.jsp الفعلية التي أنا على اختبار الحرب / غير الحرب معها.

<%@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

والحل:

نعم، كانت المشكلة تبعيات متعدية من طراز أباتشي CXF 2. اضطررت الى استبعاد جيرونيمو-javamail_1.4_spec من الإنشاء، وتعتمد فقط على البريد الإلكتروني 1.4.jar javax ل.

<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>

وشكرا لجميع من الإجابات.

هل كانت مفيدة؟

المحلول

هل من الممكن أن عند إنشاء أنها WAR أن تبعيات أخرى يتم سحبها في؟ يبدو البعض الآخر قد واجهت هذه المشكلة، وكان السبب خطأ في جيرونيمو (لمزيد من المعلومات، راجع <لأ href = "http://mail-archives.apache.org/mod_mbox/geronimo-user/200902.mbox/٪ 3C21943498.post@talk.nabble.com٪3E "يختلط =" noreferrer "> http://mail-archives.apache.org/mod_mbox/geronimo-user/200902.mbox/٪3C21943498.post@talk.nabble.com ٪ 3E ).

وكان لدينا أيضا جيرونيمو-javamail_1.4_spec 1.2 المدرجة في منتجاتنا وتلك الحزمة لديه علة مع رؤوس. استبعدنا هذا (جنبا إلى جنب مع جيرونيمو-activation_1.1_spec) من تبعيات لدينا وتصحيح المشكلة.

نصائح أخرى

وIt'ss التبعية التي تخلق هذه المشكلة، تأكد من تحميل mail.jar قبل جرة وغيرها والتي تحتوي الطبقة javax.mail.Transport. في حالتي كان الجاني javaee-المعهد-5.0-1.jar

وأنا أواجه نفس هذه المشكلة أيضا. أرى البريد الإلكتروني كسر عند تشغيل في TestNG مع الربيع وفي مجمله مجموعة من الجرار التطبيق. عند تشغيل في الأسلوب الرئيسي جافا عادي، أنه يعمل بشكل جيد. وهنا هي الفوارق الطبقية بين عند تشغيل هذا الرمز داخل TestNG مقابل PSVM

وهذه هي الطبقات البريد التي هي غائبة عند تشغيل في TestNG:

-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

وهذه الفئة الإلكتروني موجود في TestNG ولكن ليس PSVM

 +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

ويجب أن أذكر أنني أيضا تنفيذ الإصلاحات التي قدمها جيسون وفيجاي من أجل استبعاد المكتبات جيرونيمو.

وربما نقل الأمازون SDK وباستخدام رمز جيرونيمو داخليا؟ ...

وشكرا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top