【问题标题】:Grails mail plugin issues with Gmail SMTPGmail SMTP 的 Grails 邮件插件问题
【发布时间】:2016-11-10 16:16:36
【问题描述】:

我在 Grails 3.0.7 中使用 grails 邮件插件 (2.0.0.RC2)。这是我的配置:

mail:
        host: smtp.gmail.com
        port: 465
        username: myuser@gmail.com
        password: myPassword
        props:
          - mail.debug: true
          - mail.smtp.auth: true
          - mail.smtp.socketFactory.port: 465
          - mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
          - mail.smtp.socketFactory.fallback: false

当我尝试发送测试邮件时,我收到以下错误:

Caused by: org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
    at grails.plugins.mail.MailMessageBuilder.sendMessage(MailMessageBuilder.groovy:131) ~[mail-2.0.0.RC2.jar:na]
    at grails.plugins.mail.MailService.sendMail(MailService.groovy:55) ~[mail-2.0.0.RC2.jar:na]
    at grails.plugins.mail.MailService.sendMail(MailService.groovy:59) ~[mail-2.0.0.RC2.jar:na]
    at com.eduspace.ClassroomController.$tt__index(ClassroomController.groovy:13) ~[main/:na]
    at grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:93) ~[grails-core-3.0.7.jar:3.0.7]
    at grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:90) ~[grails-core-3.0.7.jar:3.0.7]
    ... 9 common frames omitted
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972) ~[javax.mail-1.5.1.jar:1.5.1]
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:656) ~[javax.mail-1.5.1.jar:1.5.1]
    at javax.mail.Service.connect(Service.java:345) ~[javax.mail-api-1.5.1.jar:1.5.1]
    ... 15 common frames omitted

我在日志中看不到其他调试信息。我将根记录器设置为 INFO,所以应该输出所有内容。我已经验证我可以远程登录到 smtp.gmail.com 端口 465,所以这不是问题。我读到其他人遇到了 SSL 问题,但通常有一些调试信息表明存在 SSL 问题,但我没有得到类似的信息。

【问题讨论】:

  • 这可能是由您的防病毒软件引起的。我遇到了这个问题,原因是 Ava​​st Mail Shield
  • 我目前没有打开任何防病毒软件。我确实尝试在我的 Grails 应用程序的 465 端口上打开一个到 smtp.gmail.com 的套接字并且能够做到这一点,所以我知道它可以连接。
  • 这里使用的冒号是什么?我认为 config.groovy 必须类似于 grails { mail { host = .... } }

标签: email grails grails-3.0


【解决方案1】:

我使用了一个稍微不同的配置,但效果很好:

grails:
    mail:
        host: "smtp.gmail.com"
        port: 465
        username: "<username>@gmail.com"
        password: "<password>"
        props:
            mail.smtp.auth: "true"
            mail.smtp.socketFactory.port: "465"
            mail.smtp.socketFactory.class: "javax.net.ssl.SSLSocketFactory"
            mail.smtp.socketFactory.fallback: "false"

邮件配置位于 grails 占位符中,我没有像您的示例那样使用破折号。也许这对你有帮助。

【讨论】:

  • 奇怪的是,删除破折号有效...但是,我认为这些属性应该是一个列表,而在 YAML 中,列表由破折号表示,所以不确定:) 无论如何,现在可以使用了!
  • 终于帮到了我!我还使用破折号和括号使用了不正确的道具设置。仍然出现无法连接到 gmail 的错误。在我的情况下,我还需要使用 mail.smtp.ssl.enable: "true" 然后我能够连接和发送消息。
  • 谢谢。如上所述修复“道具”后,它现在可以工作了。
【解决方案2】:

由于配置错误,这当然可能是错误的,但此确切错误消息的原因之一是 gmail 配置。为避免垃圾邮件,gmail 已开始阻止来自不符合最新安全准则的应用程序的访问。

避免此错误的一种简单方法是转到您的 gmail 帐户并允许安全性较低的应用程序。-https://www.google.com/settings/security/lesssecureapps

【讨论】:

    【解决方案3】:

    您的配置看起来不错。

    这是我的工作正常:

    grails {
        mail {
            host = "smtp.gmail.com"
            'default' {
                from = "<username>@gmail.com"
            }
            port = 465
            username = "<username>@gmail.com"
            password = "<password>"
            props = ["mail.smtp.auth":"true",                      
              "mail.smtp.socketFactory.port":"465",
              "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
              "mail.smtp.socketFactory.fallback":"false"]
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 2012-12-13
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多