【问题标题】:Grails Mail plugin not workingGrails 邮件插件不工作
【发布时间】:2010-09-08 01:30:40
【问题描述】:

我正在尝试从 Grails 应用程序发送邮件,但没有成功。

我使用过 gmail 和其他 smtp 服务器(没有 ssl!),但出现同样的错误:

org.springframework.mail.MailSendException:邮件服务器连接失败;嵌套异常是 javax.mail.MessagingException: 异常读取响应; 嵌套异常是: javax.net.ssl.SSLException:无法识别的 SSL 消息,明文连接?。失败消息:javax.mail.MessagingException:异常读取响应; 嵌套异常是: javax.net.ssl.SSLException:无法识别的 SSL 消息,明文连接?消息异常 (1) 是: 失败消息 1:javax.mail.MessagingException:异常读取响应; 嵌套异常是: javax.net.ssl.SSLException:无法识别的 SSL 消息,明文连接?

我在 Config.groovy 中使用(gmail 的示例):

grails.mail.host = "smtp.gmail.com" grails.mail.from = "xxx@gmail.com" grails.mail.port = "465" grails.mail.ssl = "开" grails.mail.username = "xxx@gmail.com" grails.mail.password = "xxx" grails.mail.props = ["mail.smtp.auth": "true", “mail.smtp.socketFactory.port”:“465”, “mail.smtp.socketFactory.class”:“javax.net.ssl.SSLSocketFactory”, “mail.smtp.socketFactory.fallback”:“假”, “mail.smtp.starttls.enable”:“真”, “mail.debug”:“真”]

编辑:我制作了一个简单的应用程序,只有邮件插件和一个控制器,Javid Jamae 发布的配置有效(第三个答案,我认为另一个应该可以)。

但是即使我只是复制粘贴相同的配置和相同的发送邮件代码,在我的主要项目中它仍然给我同样的异常!我认为这可能是由 Nimble 插件引起的(邮件插件是由它安装的)。 我的配置是:
Grails 版本:1.3.4
Groovy 版本:1.7.4
JVM版本:1.6.0_21
jquery - 1.4.2.5
邮件 - 0.9
shiro - 1.0.1
敏捷 - 0.4-SNAPSHOT

最终编辑: 我解决了这个问题:似乎我也必须在 Nimble 插件中使用相同的设置,在 NimbleConfig.groovy -> mail { ... (must have "from = ...") } .
愚蠢的问题,但浪费了很多时间。

【问题讨论】:

    标签: grails smtp jakarta-mail


    【解决方案1】:

    我没有使用 SSL,我在 Config.groovy 的底部定义了以下内容(不在环境部分下):

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

    我正在使用:

    app.grails.version=1.2.1
    plugins.mail=0.9
    

    这对我有用。

    【讨论】:

    • 我正在关闭这个帖子。我没有找到解决方案,但我发现问题太老了,没有人再回答了。
    • 这对我不起作用。我收到了这个错误——unable to find valid certification path to requested target。请检查我的问题here..
    【解决方案2】:

    您已启用 SSL:

    grails.mail.ssl = "开启"

    遇到异常

    javax.net.ssl.SSLException:无法识别的 SSL 消息,明文连接?

    所以禁用 SSL(我的配置):

    host = "smtp.gmail.com"
    port = 465
    username = "username@gmail.com"
    password = "password"
    javaMailProperties = ['mail.smtp.auth': 'true',
            'mail.smtp.socketFactory.port': '465',
            'mail.smtp.socketFactory.class': 'javax.net.ssl.SSLSocketFactory',
            'mail.smtp.socketFactory.fallback': 'false']
    

    无论如何,如果您想启用 SSL - 请尝试 587 端口。

    也尝试设置

    mail.smtp.starttls.required : 'true'

    因为如果服务器不支持安全连接或客户端不接受服务器的证书,安全连接将不会启动,您将遇到异常。 但是在设置 starttls.required = true 并且安全连接是不可能的之后,整个连接将失败,所以你得到了正确的异常消息。

    附:请注意 SSL 和 TLS - 是不同的协议。

    【讨论】:

    • 尝试您所说的后出现相同的异常。在 stackoverflow 上发布之前,我确实尝试了端口 587 并且没有使用 ssl="on"。出了点问题,我很好奇以前是否有人遇到过这个问题。
    • @cripox 您是否尝试按照我的建议从端口中删除引号?我正在使用下面的配置运行一个应用程序,它工作正常
    • 不幸的是仍然无法正常工作-在家用计算机上尝试过,也部署在 vps 上
    • 你试过 mail.smtp.starttls.required : 'true' 吗?它是否改变了异常消息?
    • @Olexandr :是的,我也试过 starttls.required:"true" 但异常是一样的
    【解决方案3】:

    我的配置中没有这一行

    "mail.smtp.starttls.enable": "true"
    

    我的连接正常

    端口也不应该用引号引起来

    grails.mail.port = 465
    

    【讨论】:

    • 即使没有这一行仍然是同样的异常。
    • 我也面临同样的问题。还没有取得成功。看我的问题here
    【解决方案4】:

    我也遇到过类似的问题,所以我将分享我的经验。当使用 Nimble 插件(它使用 Mail 插件作为依赖项)时,Nimble 在grails-app/conf/NimbleConfig.groovy 中定义了自己的邮件设置。

    NimbleConfig.groovy 中的设置似乎覆盖了Config.groovy 中的设置(可能是因为NimbleConfig 在Config 之后执行)。

    这里的解决方案是有条件的:

    • 如果您使用的是 Nimble,请在 grails-app/conf/NimbleConfig.groovy 中设置邮件属性;你不需要在grails-app/conf/Config.groovy中设置它们

    • 如果您不使用 Nimble,则只需按照 Mail 插件说明进行配置(或使用 Javid Jamae 的答案)

    这似乎是 OP 在他/她的编辑中提到的,但我只是想我会根据我对正在发生的事情的理解来确认编辑。

    更新:

    作为参考,以下是对我有用的 NimbleConfig.groovy 设置:

    nimble {
        ...
        messaging {
            ...
            mail {
                host = 'smtp.gmail.com'
                port = 465
                username = '...@gmail.com'
                password = '...'
                props = [
                    'mail.smtp.auth': 'true',
                    'mail.smtp.socketFactory.port': '465',
                    'mail.smtp.socketFactory.class': 'javax.net.ssl.SSLSocketFactory',
                    'mail.smtp.socketFactory.fallback': 'false'
                ]
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答。我发现自己做了很多调整,但最后我放弃了使用 Nimble。该插件非常棒,但由于它,我不断收到很多这样的错误(邮件只是其中之一,还有引导问题,还有很多尝试部署的问题)。所以,无论如何,对于我想要的东西来说,它太矫枉过正而且太大了,所以我只是编写了自己的代码。太糟糕了,因为它是一个很好的书面插件。
    【解决方案5】:

    您可以在运行时通过检查 mailService.mailSender properties.Something 像这样: mailService.mailSender.properties.each{println} 它将产生主机、端口、用户名、密码和一些其他值。 如果您确定它们都是正确的,我会怀疑是防火墙问题。

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2016-05-25
      • 2023-03-19
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多