2017-01-09 5 views
0

Playメーラー(https://github.com/playframework/play-mailer)を使用してPlayアプリケーションから電子メールを送信する必要があります。Play Framework MailerプロセスがGMailアカウントに接続できません

私のGMailアカウントでは、企業ポリシーである2段階認証が有効になっています。私はオフにできません。だから私のパスワードは私のGMailアカウント(https://support.google.com/mail/answer/185833?hl=en)を通して生成されたアプリケーション特有のパスワードです。

「安全性の低いアプリ」(https://support.google.com/accounts/answer/6010255?hl=en)もオンにできません。

この投稿のメールアドレスとパスワードの値を一般的なものに変更しました。プレイメーラーの場合

、私は私のapplication.confにこれらのパラメータを持っている:

# Mailer 
# ~~~~~ 
play.mailer { 
    host="smtp.gmail.com" 
    port=587 
    ssl=true 
    tls=true 
    user="[email protected]" 
    password="mypassword" # This is the application specific generated password 
    debug=false 
    mock=false 
    from="[email protected]" 
} 

私はこのコードを使用して電子メールを送信しています:

Mail.javaから、このコードを呼び出す
/** 
* Send mail with the new password. 
* 
* @param user 
*   user created 
* @throws EmailException 
*    Exception when sending mail 
*/ 
private void sendPasswordChanged(User user) throws EmailException { 
    String subject = Messages.get("mail.reset.confirm.subject"); 
    String message = Messages.get("mail.reset.confirm.message"); 
    Mail.Envelop envelop = new Mail.Envelop(subject, message, user.getEmail()); 
    Mail mailer = new Mail(mailerClient); 
    mailer.sendMail(envelop); 
} 

クラス:

public void sendMail(Mail.Envelop envelop) { 
    EnvelopJob envelopJob = new EnvelopJob(envelop, mailerClient); 
    final FiniteDuration delay = Duration.create(DELAY, TimeUnit.SECONDS); 
    Akka.system().scheduler().scheduleOnce(delay, envelopJob, Akka.system().dispatcher()); 
} 

static class EnvelopJob implements Runnable { 
    MailerClient mailerClient; 
    Mail.Envelop envelop; 

    @Inject 
    public EnvelopJob(Mail.Envelop envelop, MailerClient mailerClient) { 
     this.envelop = envelop; 
     this.mailerClient = mailerClient; 
    } 

    public void run() { 
     Email email = new Email(); 

     final Configuration root = Configuration.root(); 
     final String mailFrom = root.getString("play.mailer.from"); 
     final String mailSign = root.getString("mail.sign"); 

     email.setFrom(mailFrom); 
     email.setSubject(envelop.subject); 
     email.setBodyText(envelop.message + "\n\n " + mailSign); 
     email.setBodyHtml(envelop.message + "<br><br>--<br>" + mailSign); 
     for (String toEmail : envelop.toEmails) { 
      email.addTo(toEmail); 
      Logger.debug("Mail.sendMail: Mail will be sent to " + toEmail); 
     } 

     mailerClient.send(email); 
     Logger.debug("Mail sent - SMTP:" + root.getString("play.mailer.host") 
       + ":" + root.getString("play.mailer.port") 
       + " SSL:" + root.getString("play.mailer.ssl") 
       + " user:" + root.getString("play.mailer.user") 
       + " password:" + root.getString("play.mailer.password")); 
    } 
} 

application.confにmock=trueを設定すると、電子メールは全て正しい値で正しく作成されている:

port=587 
ssl=false 
tls=true 
:私はのさまざまな組み合わせを試してみました

[error] a.d.TaskInvocation - Sending the email to the following server failed : 
smtp.gmail.com:587 
org.apache.commons.mail.EmailException: Sending the email to the following serve 
r failed : smtp.gmail.com:587 
     at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410) ~[comm 
ons-email-1.3.3.jar:1.3.3] 
     at org.apache.commons.mail.Email.send(Email.java:1437) ~[commons-email-1 
.3.3.jar:1.3.3] 
     at play.api.libs.mailer.CommonsMailer$$anon$2.send(MailerPlugin.scala:10 
2) ~[play-mailer_2.10-3.0.1.jar:3.0.1] 
     at play.api.libs.mailer.SMTPMailer.send(MailerPlugin.scala:127) ~[play-m 
ailer_2.10-3.0.1.jar:3.0.1] 
     at play.api.libs.mailer.CommonsMailer.send(MailerPlugin.scala:109) ~[pla 
y-mailer_2.10-3.0.1.jar:3.0.1] 
     at play.api.libs.mailer.MailerClient$class.send(MailerPlugin.scala:44) ~ 
[play-mailer_2.10-3.0.1.jar:3.0.1] 
     at play.api.libs.mailer.CommonsMailer.send(MailerPlugin.scala:83) ~[play 
-mailer_2.10-3.0.1.jar:3.0.1] 
     at models.utils.Mail$EnvelopJob.run(Mail.java:104) ~[classes/:na] 
     at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) ~[akka- 
actor_2.10-2.3.13.jar:na] 
     at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(Abst 
ractDispatcher.scala:397) [akka-actor_2.10-2.3.13.jar:na] 
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.g 
mail.com, port: 587 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972) ~ 
[mail-1.4.5.jar:1.4.5] 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:64 
2) ~[mail-1.4.5.jar:1.4.5] 
     at javax.mail.Service.connect(Service.java:317) ~[mail-1.4.5.jar:1.4.5] 
     at javax.mail.Service.connect(Service.java:176) ~[mail-1.4.5.jar:1.4.5] 
     at javax.mail.Service.connect(Service.java:125) ~[mail-1.4.5.jar:1.4.5] 
     at javax.mail.Transport.send0(Transport.java:194) ~[mail-1.4.5.jar:1.4.5 
] 
     at javax.mail.Transport.send(Transport.java:124) ~[mail-1.4.5.jar:1.4.5] 

     at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400) ~[comm 
ons-email-1.3.3.jar:1.3.3] 
     at org.apache.commons.mail.Email.send(Email.java:1437) ~[commons-email-1 
.3.3.jar:1.3.3] 
     at play.api.libs.mailer.CommonsMailer$$anon$2.send(MailerPlugin.scala:10 
2) ~[play-mailer_2.10-3.0.1.jar:3.0.1] 
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext conne 
ction? 
     at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710 
) ~[na:1.8.0_101] 
     at sun.security.ssl.InputRecord.read(InputRecord.java:527) ~[na:1.8.0_10 
1] 
     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) ~[n 
a:1.8.0_101] 
     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl. 
java:1375) ~[na:1.8.0_101] 
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403 
) ~[na:1.8.0_101] 
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387 
) ~[na:1.8.0_101] 
     at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java 
:548) ~[mail-1.4.5.jar:1.4.5] 
     at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:352) 
~[mail-1.4.5.jar:1.4.5] 
     at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:207) ~[m 
ail-1.4.5.jar:1.4.5] 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938) ~ 
[mail-1.4.5.jar:1.4.5] 

:私はmock=falseを設定するとき

[info] play.api.Play - Application started (Dev) 
[info] application - mock implementation, send email 
[info] application - subject: Account Access Attempted 
[info] application - from: [email protected] 
[info] application - bodyText: You (or someone else) entered this email address 
when trying to change the password. However, this email address is not on our l 
ist of registered users, and so the attempted password reset has failed. 

null 
[info] application - bodyHtml: You (or someone else) entered this email address 
when trying to change the password. However, this email address is not on our l 
ist of registered users, and so the attempted password reset has failed.<br><br> 
--<br>null 
[info] application - to: [email protected] 

しかし、私はこのエラーを受け取ります

および

port=465 
ssl=true 
tls=false 

しかし、それらはすべて私に同じエラーを与えます。

GmailアカウントでIMAPまたはPOP3を有効にすることはできません。ポリシーでは許可されていません。

Mail.javaクラスで使用しているものよりも優れたサンプルやサンプルがありますか?

答えて

1

それはssl=falseを設定するのと同じくらい簡単だったように見えます...

私の更新play.mailerの設定...

# Mailer 
# ~~~~~ 
play.mailer { 
    host="smtp.gmail.com" 
    port=587 
    ssl=false 
    tls=true 
    user="[email protected]" 
    password="mypassword" # This is the application specific generated password 
    debug=false 
    mock=false 
    from="[email protected]" 
} 
関連する問題