如何从openshift服务器内部通过gmail-account发送带有javamail的电子邮件?

时间:2014-11-05 19:42:26

标签: email gmail javamail openshift

我在Openshift Free(redhat webhotel)上运行了一个web应用程序。 从这个应用程序,我想通过我的Gmail帐户发送电子邮件与javax.mail-api。 当我尝试从我的开发人员计算机上运行我的代码尝试时,它既可以使用SSL,也可以不使用SSL。 但是当我从openhift服务器中的JSP页面运行它时,它不起作用。我从gmail那里得到了这个回复:

534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbs0N
534-5.7.14 -wfEXm3iqKdenfgsums1_oLzBr3toWk44lKCVSpdKHkI2cJpo5ytmXFAU2LVn_4a3wrT-2
534-5.7.14 YUjbzlo4QJZRTxuWxujUOMJW8m5HMbUgHqZp0cBWjGZH-Nr5CZrHql_uZx_6IaEot3NJ-m
534-5.7.14 pBj85PCczPqx2q7NFQ6faPMgDRp7yEXlDAKOEZZ10gjxhQ3NLGFYV-_n9yS2ae49ZQOFHn
534-5.7.14 VTLSwBg> Please log in via your web browser and then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 g4sm1374527qas.22 - gsmtp

以下是没有SSL的代码:

public static void sendGmail(String to, String subject, String text) throws AddressException, MessagingException
{
    final String SMTP_HOST = "smtp.gmail.com";
    final String SMTP_PORT = "587";
    final String GMAIL_USERNAME = "xxx@gmail.com";
    final String GMAIL_PASSWORD = "xxx";

    System.out.println("Process Started");

    Properties prop = System.getProperties();
    prop.setProperty("mail.smtp.starttls.enable", "true");
    prop.setProperty("mail.smtp.host", SMTP_HOST);
    prop.setProperty("mail.smtp.user", GMAIL_USERNAME);
    prop.setProperty("mail.smtp.password", GMAIL_PASSWORD);
    prop.setProperty("mail.smtp.port", SMTP_PORT);
    prop.setProperty("mail.smtp.auth", "true");

    Session session = Session.getInstance(prop, new Authenticator()
    {
        protected PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(GMAIL_USERNAME,
                    GMAIL_PASSWORD);
        }
    });
    session.setDebug(true);


    MimeMessage message = new MimeMessage(session);

    message.setFrom(new InternetAddress(GMAIL_USERNAME));
    message.addRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
    message.setSubject(subject);
    message.setText(text);
    message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
    Transport transport = session.getTransport("smtp");
    transport.connect(SMTP_HOST, GMAIL_USERNAME, GMAIL_PASSWORD);
    transport.sendMessage(message, message.getAllRecipients());
}

以下是使用SSL的代码:

public static void sendGmail(String to, String subject, String text) throws AddressException, MessagingException
{
    String host = "smtp.gmail.com";
    final String GMAIL_USERNAME = "xxx@gmail.com";
    final String GMAIL_PASSWORD = "xxx";

    Properties props = new Properties();
    props.put("mail.smtps.host", host);
    props.put("mail.smtps.auth", "true");
    Session session = Session.getInstance(props, null);
    session.setDebug(true);
    MimeMessage msg = new MimeMessage(session);
    msg.setSubject(subject);
    msg.setText(text);
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    msg.setFrom(new InternetAddress(username));
    msg.setHeader("X-Mailer", "smtpsend");
        msg.setSentDate(new Date());

        SMTPTransport t = (SMTPTransport)session.getTransport("smtps");

    try
    {
        t.connect(host, username, password);
        t.sendMessage(msg, msg.getAllRecipients());
    } 
    finally
    {
        t.close();
    }
}

正如您所看到的,我在会话的调试模式下运行我的尝试,所以下面是我尝试的输出:

我的开发人员机器使用SSL

的调试输出
DEBUG: setDebug: JavaMail version 1.4.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
220 mx.google.com ESMTP ny6sm229296lbb.2 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465

EHLO fredand
250-mx.google.com at your service, [90.230.21.163]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 
AUTH LOGIN
334 VXNlcm5hbWU6
bm9ycnVkZGVuLnZhZ2ZvcmVuaW5nQGdtYWlsLmNvbQ==
334 UGFzc3dvcmQ6
bm9ycnVkZGVuOTc=
235 2.7.0 Accepted
DEBUG SMTP: use8bit false
MAIL FROM:<xxx@gmail.com>
250 2.1.0 OK ny6sm229296lbb.2 - gsmtp
RCPT TO:<xxx@hotmail.com>
250 2.1.5 OK ny6sm229296lbb.2 - gsmtp
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   xxx@hotmail.com
DATA
354  Go ahead ny6sm229296lbb.2 - gsmtp
Date: Tue, 4 Nov 2014 15:23:48 +0100 (CET)
From: xxx@gmail.com
To: xxx@hotmail.com
Message-ID: <30266940.0.1415111029890.JavaMail.RPS@fredand>
Subject: Subject_Tue Nov 04 15:23:48 CET 2014
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Mailer: smtpsend

text_Tue Nov 04 15:23:48 CET 2014
.
250 2.0.0 OK 1415111029 ny6sm229296lbb.2 - gsmtp
QUIT
221 2.0.0 closing connection ny6sm229296lbb.2 - gsmtp

我的openshift服务器的SSL调试输出

DEBUG: setDebug: JavaMail version 1.4.4
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
220 mx.google.com ESMTP 4sm1230842qax.48 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465

EHLO ex-std-node449.prod.rhcloud.com
250-mx.google.com at your service, [54.90.46.53]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
AUTH LOGIN
334 VXNlcm5hbWU6
bm9ycnVkZGVuLnZhZ2ZvcmVuaW5nQGdtYWlsLmNvbQ==
334 UGFzc3dvcmQ6
bm9ycnVkZGVuOTc=
534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsvV
534-5.7.14 5K74amuA1WqDS9CFS1UPmuS3XUVU7lq0Agwb5DPcG69Z5fkYe6RUZrzAKPDWy9tQzq2BDg
534-5.7.14 1AxC2MmT1D1UXOXLG8cZuf7yKxKEUtaLo79a-fROXRiwCvMaqdvYXhqiIslXDTWJQZVe5W
534-5.7.14 qYvj9_ov5cziZe3ao5usZ-o58tHCv48yzrRm5SppAESXnvmv35ZLy4U9qF14GLEXHT7Wzj
534-5.7.14 QuIfn6w> Please log in via your web browser and then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 4sm1230842qax.48 - gsmtp

我的开发人员机器没有SSL的调试输出

DEBUG: setDebug: JavaMail version 1.4.2
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 "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP x6sm542099lbj.40 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO fredand
250-mx.google.com at your service, [90.230.21.163]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO fredand
250-mx.google.com at your service, [90.230.21.163]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 
AUTH LOGIN
334 VXNlcm5hbWU6
bm9ycnVkZGVuLnZhZ2ZvcmVuaW5nQGdtYWlsLmNvbQ==
334 UGFzc3dvcmQ6
bm9ycnVkZGVuOTc=
235 2.7.0 Accepted
DEBUG SMTP: use8bit false
MAIL FROM:<xxx@gmail.com>
250 2.1.0 OK x6sm542099lbj.40 - gsmtp
RCPT TO:<xxx@hotmail.com>
250 2.1.5 OK x6sm542099lbj.40 - gsmtp
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   xxx@hotmail.com
DATA
354  Go ahead x6sm542099lbj.40 - gsmtp
From: xxx@gmail.com
To: xxx@hotmail.com
Message-ID: <27966883.0.1415135485593.JavaMail.RPS@fredand>
Subject: Subject_Tue Nov 04 22:11:24 CET 2014
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

text_Tue Nov 04 22:11:24 CET 2014
.
250 2.0.0 OK 1415135486 x6sm542099lbj.40 - gsmtp

我的openshift服务器没有SSL的调试输出

DEBUG: setDebug: JavaMail version 1.4.4
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc.,1.4.4]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP g4sm1374527qas.22 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587

EHLO ex-std-node449.prod.rhcloud.com
250-mx.google.com at your service, [54.90.46.53]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO ex-std-node449.prod.rhcloud.com
250-mx.google.com at your service, [54.90.46.53]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
AUTH LOGIN
334 VXNlcm5hbWU6
bm9ycnVkZGVuLnZhZ2ZvcmVuaW5nQGdtYWlsLmNvbQ==
334 UGFzc3dvcmQ6
bm9ycnVkZGVuOTc=
534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbs0N
534-5.7.14 -wfEXm3iqKdenfgsums1_oLzBr3toWk44lKCVSpdKHkI2cJpo5ytmXFAU2LVn_4a3wrT-2
534-5.7.14 YUjbzlo4QJZRTxuWxujUOMJW8m5HMbUgHqZp0cBWjGZH-Nr5CZrHql_uZx_6IaEot3NJ-m
534-5.7.14 pBj85PCczPqx2q7NFQ6faPMgDRp7yEXlDAKOEZZ10gjxhQ3NLGFYV-_n9yS2ae49ZQOFHn
534-5.7.14 VTLSwBg> Please log in via your web browser and then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 g4sm1374527qas.22 - gsmtp

你们有什么线索为什么我的openhift服务器无法正常工作?

祝你好运 弗雷德里克

2 个答案:

答案 0 :(得分:1)

感谢您的帮助。 好像我需要在我的Gmail帐户中激活IMAP。 之后它运作良好。

祝你好运 弗雷德里克

答案 1 :(得分:0)

我在gmail方面遇到了一些困难,因此我转而使用SendGrid将JavaMail集成到部署在OPENSHIFT上的虚拟项目的Web应用程序中。 我使用了SendGrid试用版。

一些变化 -

           // The SendGrid SMTP server.
             String SMTP_HOST_NAME = "smtp.sendgrid.net";

              Properties   properties = new Properties();
              // Specify SMTP values.
              properties.put("mail.transport.protocol", "smtp");
              properties.put("mail.smtp.host", SMTP_HOST_NAME);
              properties.put("mail.smtp.port", 587);
              properties.put("mail.smtp.auth", "true");

你必须要这两个 -

final String sendGridUser ="NameUChoose"; // Use At SendGrid Registration
   final String sendGridPassword="*****" ; // Use At SendGrid Registration

其余部分与其他JavaMail代码几乎相同。

您还必须验证您的凭据,所以 -

           // Create the authenticator object.
              Authenticator authenticator = new SMTPAuthenticator();

创建一个单独的java类,如 -

package com.rana;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class SMTPAuthenticator   extends Authenticator
{
    final String sendGridUser ="NameUChoose";
    final String sendGridPassword="*******;
       public PasswordAuthentication getPasswordAuthentication()
       {
            String username = sendGridUser;
            String password = sendGridPassword;

            return new PasswordAuthentication(username, password);   
       }


}