Почтовый плагин Grails не работает - PullRequest
4 голосов
/ 08 сентября 2010

Я пытаюсь отправить почту из приложения Grails, но безуспешно.

Я использовал 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 = "xxx@gmail.com"
grails.mail.port = "465"
grails.mail.ssl = "on"
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": "false",
        "mail.smtp.starttls.enable": "true",
        "mail.debug": "true"]

РЕДАКТИРОВАТЬ: я сделал простое приложение только с почтовым плагином и контроллером, и конфиг, опубликованный Джавидом Джамае, работает (3-й ответ, также я думаю, что другой должен работать).

НО, даже если я просто скопирую и вставлю тот же конфиг и тот же код отправки почты, в моем основном проекте это все равно даст мне то же исключение!Я думаю, что это может быть вызвано плагином Nimble (плагин Mail был установлен им).Моя конфигурация:
Версия Grails: 1.3.4
Версия Groovy: 1.7.4
Версия JVM: 1.6.0_21
jquery - 1.4.2.5
почта - 0.9
shiro -1.0.1
nimble - 0.4-SNAPSHOT

ФИНАЛЬНОЕ РЕДАКТИРОВАНИЕ: Я решил проблему: похоже, мне нужно использовать те же настройки в плагине Nimble, в NimbleConfig.groovy -> mail {... (должен иметь "from = ...")}.
Дурацкая проблема, но затратила на это много времени.

Ответы [ 5 ]

4 голосов
/ 08 сентября 2010

Я не использую 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

Это работает для меня.

3 голосов
/ 08 сентября 2010

Вы включили SSL:

grails.mail.ssl = "on"

И получили исключение

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 и безопасное соединение невозможно, все соединение завершится неудачно, поэтому вы получили правильное сообщение об исключении.

PS Обратите внимание, что SSL и TLS - это разные протоколы.

1 голос
/ 08 сентября 2010

У меня нет этой строки в моей конфигурации

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

и мое соединение работает

также порт не должен быть в кавычках

grails.mail.port = 465
0 голосов
/ 18 марта 2015

Вы можете проверить настройки конфигурации во время выполнения, проверив Свойства mailService.mailSender. Что-то вроде этого: mailService.mailSender.properties.each {Println} Это даст хост, порт, имя пользователя, пароль и несколько других значений. Если вы уверены, что все они верны, я бы заподозрил проблему с брандмауэром.

0 голосов
/ 06 ноября 2010

Я тоже столкнулся с подобной проблемой, поэтому поделюсь своим опытом. При использовании плагина 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 для настройки (или используйте ответ Джавида Джаме)

Кажется, это то, на что ссылался ОП в его / ее правках, но я просто подумал, что смогу подтвердить правки своим пониманием того, что происходит.

Обновление:

Для справки, вот 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'
            ]
        }
    }
}
...