2013-10-10 20 views
11

Khi tôi cố gắng để gửi một mail từ scala Playmework, tôi đã lỗi sau,gửi email đến máy chủ sau thất bại: smtp.gmail.com:25

[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 

Làm thế nào để giải quyết lỗi này?

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" 

Trả lời

15

1. Dưới đây là một cấu hình làm việc cho GMail:

smtp.host=smtp.gmail.com 
smtp.port=587 
smtp.ssl=yes 
smtp.user="[email protected]" 
smtp.password="myPassword" 

Bạn phải sử dụng cổng 587 (và do đó kích hoạt SSL)

2. Cũng đảm bảo rằng Hai yếu tố xác thực không được kích hoạt (nếu không bạn phải tạo một mật khẩu ứng dụng mới)

3. Một nguyên nhân khác của kết nối không thành công: có thể có vẻ như là kết nối nghi ngờ .

Vì vậy, kiểm tra mail nhận được từ google vào tài khoản của bạn để đảm bảo kết nối đã không bị chặn bởi google (xảy ra nếu chơi được lưu trữ ở một nước khác so với cái bạn đang sử dụng để kết nối bằng tay)

+0

Không điều này cũng không hoạt động. Bây giờ ứng dụng khung Play của tôi chạy trên VPS (máy chủ riêng ảo của tôi) .Tôi chưa có chứng chỉ SSL cho VPS của mình. Tôi có muốn thêm chứng chỉ SSL để truy cập gmail SMTP bằng SSL không? hoặc cần phải cấu hình bất cứ điều gì trong VPS của tôi? – Ramprasad

+1

@Ram Có một cách giải quyết khác để sử dụng smtp.gmail.com không có SSL ([liên kết nhóm google topic] (http://productforums.google.com/forum/#!topic/gmail/G6rE7PFX4rM)) Nhưng có vẻ phức tạp hơn việc thêm SSL trên máy chủ. –

5

smtp: cổng = 587 không làm việc cho tôi. nhưng cổng 465 đã làm việc cho tôi.

Và bật google kém an toàn ứng dụng thiết enter image description here

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

Trước tiên, bạn nên cho phép truy cập trong Google cho kém an toàn ứng dụng như trong các câu trả lời ở trên. Bây giờ thay đổi cổng thành 465 và đặt ssl = true. Hoặc bạn có thể đặt port = 587 và tls = true. Điều này là do cổng 465 dành cho SSL và cổng 587 dành cho TLS theo các tài liệu chính thức.

port = 465
ssl = true

** Lưu ý rằng cổng = 587 với ssl = true sẽ không làm việc

0

Nếu bạn cảm thấy tất cả các thiết lập là đúng, nhưng vẫn nhận được này thông điệp; Tôi muốn đề nghị xem xét các chấp trước. Tôi đã gửi một tệp tin .JAR mà máy chủ gmail sẽ không cho phép bạn đính kèm và do đó nó đã từ chối email của tôi. Tôi phải đổi tên tệp thành .JARA để làm cho tệp hoạt động.

Các vấn đề liên quan