2010-09-08 72 views
3

我想从Grails应用程序发送邮件,但没有任何成功。Grails Mail插件不工作

我使用Gmail和其他SMTP服务器(不使用SSL),但是出现同样的错误:

 
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?; message exceptions (1) are: 
Failed message 1: javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

我使用Config.groovy中(例如为gmail):

 
grails.mail.host = "smtp.gmail.com" 
grails.mail.from = "[email protected]" 
grails.mail.port = "465" 
grails.mail.ssl = "on" 
grails.mail.username = "[email protected]" 
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": "false", 
     "mail.smtp.starttls.enable": "true", 
     "mail.debug": "true"] 

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

但即使我只是复制粘贴相同的配置和相同的发送邮件代码,在我的主项目它仍然给我同样的例外!我认为这可能是由Nimble插件引起的(Mail插件是由它安装的)。 我的配置是:
Grails的版本:1.3.4
Groovy的 版本:1.7.4
JVM版本:1.6.0_21
jQuery的 - 1.4.2.5
邮件 - 0.9
四郎 - 1.0.1
灵活 - 0.4快照

最后编辑: 我解决了这个问题:看来,我有灵活的插件使用相同的设置也,在NimbleConfig.groovy - >邮件{...(必须有“from = ...”)}。
愚蠢的问题,但在它上面花了很多时间。

回答

4

我没有使用SSL和我有以下我的Config.groovy(不是根据环境部)的底部定义:

grails { 
    mail { 
    host = "smtp.gmail.com" 
    port = 465 
    username = "[email protected]" 
    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 

这适用于我。

+0

我正在关闭此主题。我没有找到解决方案,但我发现问题太老了,没有人回答。 – cripox 2010-09-11 11:00:13

+0

这适用于我。 – 2011-04-17 15:56:52

+0

这不适合我。我得到这个错误 - '无法找到有效的证书路径到请求的目标'。请检查我的问题[这里](http://stackoverflow.com/questions/17547949/grails-send-mail-is-not-working).. – 2013-07-15 04:53:57

1

我没有这条线在我的配置

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

和我的连接工作

还端口不应该在报价

grails.mail.port = 465 
+0

仍然是相同的例外。 – cripox 2010-09-08 03:08:08

+0

我也面临同样的问题。还没有成功。看到我的问题[这里](http://stackoverflow.com/questions/17547949/grails-send-mail-is-not-working) – 2013-07-15 04:55:36

2

已启用SSL:

grails.mail.ssl =“on”

,并得到例外

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

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

host = "smtp.gmail.com" 
port = 465 
username = "[email protected]" 
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 - 尝试端口。

也尝试设置

mail.smtp.starttls。要求:“真”

因为如果服务器不支持安全连接或客户不接受服务器的证书,安全连接将无法启动,你会得到你的异常。 但是,在设置starttls.required = true并且安全连接不可能的情况下,整个连接将失败,因此您会收到适当的异常消息。

P.S.请注意,SSL和TLS - 是不同的协议。

+0

尝试你所说的之后也有同样的异常。我没有尝试过端口587,并没有使用ssl =“on”,然后在这里发布在stackoverflow上。有些东西是非常错误的,我很好奇以前是否有其他人有过这个问题。 – cripox 2010-09-08 11:06:38

+0

@cripox您是否按照我的建议尝试从您的端口​​中删除引号?我正在运行一个应用程序使用下面的配置,它工作正常 – 2010-09-08 13:22:08

+0

不幸的是仍然不工作 - 尝试从家用电脑,也部署在一个VPS – cripox 2010-09-08 14:14:43

0

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

NimbleConfig.groovy的设置将出现覆盖那些集Config.groovy(大概是因为NimbleConfigConfig之后执行)。

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

  • 如果您使用灵活的,在grails-app/conf/NimbleConfig.groovy设置邮件的属性;你并不需要将它们设置在grails-app/conf/Config.groovy

  • 如果你不使用敏捷,然后只要按照配置邮件插件指令(或使用Javid詹美回教堂的答案)

这似乎是OP在他/她的编辑中暗示的内容,但我只是认为我会根据对发生的事情的理解来确认编辑内容。

更新:

对于一个参考,这里有NimbleConfig.groovy设置为我工作:

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

感谢您的回答。我发现自己做了很多调整,但最终我放弃了使用Nimble。这个插件非常棒,但我仍然因为它而出现很多类似的错误(邮件只是其中之一,还有引导问题以及尝试部署的很多问题)。所以,无论如何,因为我想要的东西太过于矫枉过正,所以我只写了自己的代码。太糟糕了,因为它是一个不错的书面插件。 – cripox 2010-11-06 23:48:45

0

您可以通过检查 mailService.mailSender性能在运行时验证您的配置设置。像这样: mailService.mailSender.properties.each {println} 它将产生主机,端口,用户名,密码和一些其他值。 如果你确定它们都是正确的,我会怀疑有防火墙问题。即使没有这条线,