scala Playmeworkからメールを送信しようとすると、次のエラーが発生しました。
[ERROR] [10/10/2013 13:31:16.263] [play-akka.actor.default-dispatcher-75] [TaskInvocation] Sending the email to the following server failed : smtp.gmail.com:25
org.Apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:25
at org.Apache.commons.mail.Email.sendMimeMessage(Email.Java:1242)
at org.Apache.commons.mail.Email.send(Email.Java:1267)
at com.typesafe.plugin.CommonsMailer.send(MailerPlugin.scala:241)
at com.typesafe.plugin.MailerBuilder$class.sendHtml(MailerPlugin.scala:204)
at com.typesafe.plugin.CommonsMailer.sendHtml(MailerPlugin.scala:215)
at models.SignUpProcess$$anonfun$models$SignUpProcess$$sendEmail$1.apply$mcV$sp(SignUpProcess.scala:261)
at akka.actor.DefaultScheduler$$anon$8.run(Scheduler.scala:193)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:137)
at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.Java:1417)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.Java:262)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.Java:975)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.Java:1478)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.Java:104)
Caused by: javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.Java:319)
at javax.mail.Service.connect(Service.Java:169)
at javax.mail.Service.connect(Service.Java:118)
at javax.mail.Transport.send0(Transport.Java:188)
at javax.mail.Transport.send(Transport.Java:118)
at org.Apache.commons.mail.Email.sendMimeMessage(Email.Java:1232)
... 12 more
このエラーを解決する方法は?
SignUpProcess.scala
private def sendEmail(subject: String, recipient: String, bodyString:Html) {
import scala.concurrent.duration._
import play.api.libs.concurrent.Execution.Implicits._
Akka.system.scheduler.scheduleOnce(1 seconds) {
val mail = use[MailerPlugin].email
mail.setSubject(subject)
mail.addRecipient(recipient)
mail.addFrom("[email protected]")
println(bodyString)
mail.sendHtml(bodyString.toString)
}
}
application.conf
smtp.Host = smtp.gmail.com
smtp.port = 465
smtp.ssl = true
smtp.tls = no
smtp.user = "[email protected]"
smtp.password = "mypassword"
1。これはGMailの動作する設定です:
smtp.Host=smtp.gmail.com
smtp.port=587
smtp.ssl=yes
smtp.user="[email protected]"
smtp.password="myPassword"
port 587を使用する必要があります(したがって、[〜#〜] ssl [〜#〜])
2。また、2要素認証がアクティブ化されていないことも確認してください(それ以外の場合は、新しいアプリケーションパスワードを生成する必要があります)
3。接続が失敗するもう1つの原因:疑わしい接続。
アカウントでgoogleから受信したメールをチェックして、接続がgoogleによってブロックされていないことを確認してください(手動で接続するために使用されている国とは別の国でPlayがホストされている場合に発生します)
上記の回答に示すように、まず安全性の低いアプリのGoogleでのアクセスを有効にする必要があります。次に、ポートを465に変更し、ssl = trueを設定します。または、port = 587とtls = trueを設定できます。これは、公式ドキュメントによると、ポート465がSSL用であり、ポート587がTLS用であるためです。
ポート= 465
ssl = true
** ssl = trueを指定したport = 587は機能しないことに注意してください
私はここへのすべてのコメントを読み、成功しました。このため、これは完全に機能する私のコードです。
smtp.Host=smtp.gmail.com
smtp.port=465
smtp.ssl=true
smtp.auth=true
smtp.user="[email protected]"
smtp.password=xxxxxxx
すべての設定が正しいと感じても、このメッセージが表示される場合は、添付ファイルを見ることをお勧めします。私は。JARファイルを送信していましたが、このファイルをGmailサーバーで添付できないため、メールを拒否していました。ファイル名を。JARAに変更して機能させる必要がありました。