4 Stimmen

Grails Mail Plugin funktioniert nicht

Ich versuche, E-Mails von einer Grails-Anwendung zu versenden, aber ohne Erfolg.

Ich habe Gmail und anderen SMTP-Server (ohne SSL!) verwendet, aber der gleiche Fehler tritt auf:

org.springframework.mail.MailSendException: Verbindung zum Mailserver fehlgeschlagen; nested exception is javax.mail.MessagingException: Exception reading response;
  nested exception is:
    javax.net.ssl.SSLException: Nicht erkannte SSL-Nachricht, Klartextverbindung?. Fehlgeschlagene Nachrichten: javax.mail.MessagingException: Exception reading response;
  nested exception is:
    javax.net.ssl.SSLException: Nicht erkannte SSL-Nachricht, Klartextverbindung?; Nachrichtenausnahmen (1) sind:
Fehlgeschlagene Nachricht 1: javax.mail.MessagingException: Exception reading response;
  nested exception is:
    javax.net.ssl.SSLException: Nicht erkannte SSL-Nachricht, Klartextverbindung?

Ich verwende in Config.groovy (Beispiel für 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"\]

EDIT: Ich habe eine einfache App nur mit dem Mail-Plugin und einem Controller erstellt und die von Javid Jamae gepostete Konfiguration funktioniert (3. Antwort, ich denke auch die andere sollte funktionieren).

ABER selbst wenn ich die gleiche Konfiguration und den gleichen Versandmail-Code einfach kopiere und einfüge, bekomme ich in meinem Hauptprojekt immer noch die gleiche Ausnahme! Ich denke, das kann durch das Nimble-Plugin verursacht werden (das Mail-Plugin wurde von ihm installiert). Meine Konfiguration ist:
Grails-Version: 1.3.4
Groovy-Version: 1.7.4
JVM-Version: 1.6.0_21
jquery - 1.4.2.5
mail - 0.9
shiro - 1.0.1
nimble - 0.4-SNAPSHOT

ENDGÜLTIGES EDIT : Ich habe das Problem gelöst: Anscheinend muss ich die gleichen Einstellungen auch im Nimble-Plugin verwenden, in NimbleConfig.groovy -> mail { ... (muss "from = ...") } .
Dummes Problem, aber hat viel Zeit gekostet.

4voto

Javid Jamae Punkte 8333

Ich verwende kein SSL und habe Folgendes am Ende meiner Config.groovy definiert (nicht unter dem Abschnitt "Umgebungen"):

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"]
   }
}

Ich benutze:

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

Dies funktioniert für mich.

3voto

Oleksandr Punkte 3661

Du hast SSL aktiviert:

grails.mail.ssl = "on"

Und eine Ausnahme erhalten

javax.net.ssl.SSLException: Nicht erkannte SSL-Nachricht, Klartextverbindung?

Also deaktiviere SSL (meine Konfiguration):

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']

Wie auch immer, wenn du SSL aktivieren möchtest - versuche den 587 Port.

Versuche auch zu setzen

mail.smtp.starttls.required : 'true'

Denn wenn der Server keine sichere Verbindung unterstützt oder der Client das Zertifikat des Servers nicht akzeptiert, wird keine sichere Verbindung gestartet und du erhältst deine Ausnahme. Aber nachdem du starttls.required = true gesetzt hast und eine sichere Verbindung nicht möglich ist, wird die gesamte Verbindung fehlschlagen, also wirst du eine geeignete Fehlermeldung erhalten.

Nachtrag: Beachte, dass SSL und TLS - verschiedene Protokolle sind.

1voto

Aaron Saunders Punkte 32612

Ich habe diese Zeile nicht in meiner Konfiguration

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

und meine Verbindung funktioniert

auch der Port sollte nicht in Anführungszeichen sein

grails.mail.port = 465

0voto

Rob Hruska Punkte 114761

Ich bin auch auf eine ähnliche Variante dieses Problems gestoßen, daher werde ich meine Erfahrung teilen. Wenn Sie das Nimble-Plugin verwenden (das das Mail-Plugin als Abhängigkeit verwendet), definiert Nimble seine eigenen Mail-Einstellungen in grails-app/conf/NimbleConfig.groovy.

Die Einstellungen in NimbleConfig.groovy scheinen diejenigen zu überschreiben, die in Config.groovy festgelegt sind (vermutlich weil NimbleConfig nach Config ausgeführt wird).

Die Lösung hier ist bedingt:

  • Wenn Sie Nimble verwenden, setzen Sie die Mail-Eigenschaften in grails-app/conf/NimbleConfig.groovy; Sie müssen sie nicht in grails-app/conf/Config.groovy setzen.

  • Wenn Sie Nimble nicht verwenden, folgen Sie einfach den Anweisungen zum Konfigurieren des Mail-Plugins (oder verwenden Sie die Antwort von Javid Jamae).

Dies scheint das zu sein, worauf der/die TE in seinen/ihren Bearbeitungen anspielt, aber ich dachte, ich würde die Bearbeitungen mit meinem Verständnis dessen bestätigen, was passiert.

Aktualisierung:

Zur Referenz, hier sind die Einstellungen von NimbleConfig.groovy, die bei mir funktionierten:

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'
            ]
        }
    }
}

0voto

user3405305 Punkte 89

Sie können Ihre Konfigurationseinstellungen zur Laufzeit überprüfen, indem Sie die Eigenschaften von mailService.mailSender überprüfen. Etwas Ähnliches wie dies: mailService.mailSender.properties.each{println} Es wird den Host, den Port, den Benutzernamen, das Passwort und einige andere Werte ausgeben. Wenn Sie sicher sind, dass diese alle korrekt sind, würde ich auf ein Firewall-Problem tippen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X