Sending the email to the following server failed :

2020-05-20 09:46发布

问题:

When I try to send a mail from scala Playmework, I got following error,

[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

How to solve this error?

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("innodeagcm@gmail.com")
          println(bodyString)


          mail.sendHtml(bodyString.toString)
        }
}

application.conf

smtp.host = smtp.gmail.com
smtp.port = 465
smtp.ssl = true
smtp.tls = no
smtp.user = "companymail@gmail.com"
smtp.password = "mypassword"

回答1:

1. Here is a working configuration for GMail :

smtp.host=smtp.gmail.com
smtp.port=587
smtp.ssl=yes
smtp.user="me@gmail.com"
smtp.password="myPassword"

You must use port 587 (and so activate SSL)

2. Also ensure that Two factor authentication is not activated (otherwise you must generate a new application password)

3. Another cause of connection fail : it can be seemed like a suspect connection.

So check mails received from google on your account to ensure the connection has not been blocked by google (happens if play is hosted in another country than the one you are used to connect manually)



回答2:

smtp:port=587 didn't work for me. but port 465 worked for me.

And turn on google less secure app setting

smtp.host=smtp.gmail.com
smtp.port=465
smtp.ssl=true


回答3:

You should first enable the access in Google for less secure App as shown in the above answer. Now Change the port to 465 and set ssl=true. Or you can set port=587 and tls=true. This is because port 465 is for SSL and port 587 is for TLS according to the official documentations.

port=465
ssl=true

**Note that port=587 with ssl=true won't work



回答4:

If you feel all settings are correct, but still getting this message; I'd suggest to look at the attachments. I was sending a .JAR file which gmail servers won't allow you to attach and hence it was rejecting my email. I had to rename the file to .JARA to make it work.



回答5:

I've read all comment to here and I've had success. For this reason: this is my code that It could work perfectly.

smtp.host=smtp.gmail.com
smtp.port=465
smtp.ssl=true
smtp.auth=true
smtp.user="xxxxxx@gmail.com"
smtp.password=xxxxxxx