Senden Sie E-Mails mit Spring durch die Verwendung von Java-Annotationen
Wie könnte ich senden Sie eine E-Mail mit Spring 4 (und Spring Boot) durch, die mit einem reinen annotation-based-Ansatz (gemäß dem Java-Konfigurationen Regeln)?
InformationsquelleAutor der Frage vdenotaris | 2014-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine einfache Lösung (wo Sie über einen SMTP-server ohne Authentifizierung) für die Konfiguration der E-Mail-Dienst würde durch
Frühjahr müssen in der Lage sein zu beheben, die Eigenschaften
email.host
undemail.port
in der üblichen Weise (im Falle von Spring Boot die einfachste ist, um dann in der Anwendung.Eigenschaften)In jeder Klasse, die braucht die Dienste von JavaMailSender, nur Spritzen mit einem der üblichen Wege (wie
@Autowired private JavaMailSender javaMailSender
)UPDATE
Beachten Sie, dass seit version 1.2.0.RC1 Spring-Boot-auto-konfigurieren
JavaMailSender
für Sie. Check-out diese Teil der Dokumentation. Wie Sie sehen können aus der Dokumentation, die nahezu keine Konfiguration erforderlich ist, um aufzustehen und zu laufen!InformationsquelleAutor der Antwort geoand
In
pom.xml
:In
application.properties
:In
Foo.java
:Ich persönlich empfehlen, läuft eine localhost-MTA, und verwenden Sie zur Weiterleitung an Ihre eigentliche MTA (wie Gmail oder SES oder Ihre eigenen). Dies gibt Ihnen eine "Kostenlose" asynchrone queue, und zentralisiert die config. Ich mag OpenSMTP.
InformationsquelleAutor der Antwort Neil McGuigan
Mit Spring-Boot-es war in der Nähe trivial, mit einer Anpassung erforderlich für smtp.office365.com E-mail-server - was ist das, was das Unternehmen mit.
Bevor diese Anpassung der Authentifizierung auf der Office365 SMTP-server gehalten nicht und wir würden eine Fehlermeldung erhalten, entlang der Linien von:
Dieser war, obwohl wir eine Kombination aus Benutzername und Passwort wurden richtig abgeholt Spring MailProperties Klasse.
Stellt sich heraus, Office365 muss die TLS-Authentifizierung aktiviert ist, und Spring aktuellen JavaMail-Implementierung nicht einen einfachen Weg, dies zu tun mit Eigenschaften. Die Lösung ist die Schaffung unserer eigenen javax.E-mail.Session-Instanz und registrieren Sie es mit dem Frühling.
Das ganze Bild folgt.
In der pom.xml Datei hinzufügen:
Wo der Frühling-boot.version definiert ist, an anderer Stelle (in einer parent-pom in diesem Fall) und in diesem Fall ein Wert von 1.3.1.RELEASE
Stellen Sie sicher, dass Sie das Paket und/oder die auto-configuration-Klasse, wenn Sie itemize diese in Ihrem Haupt-Anwendung - wenn Sie den Standard @SpringBootApplication dies ist nicht erforderlich, aber in meinem Fall habe ich Hinzugefügt MailSenderAutoConfiguration.class die @Import-Anmerkung die Liste der Klassen.
Habe ich eine einfache Klasse EmailSender:
Wo die @Slf4j ist eine lombok annotation, und das @ - Abonnieren ist für Guava ' s EventBus, das ist, wie diese app ermöglicht die EmailSender wissen, dass es eine Nachricht zu senden. Ich verwende eine triviale EmailMessageEvent POJO, einen Betreff und den text - gut genug für diese app seine Zwecke.
Den MessageConfig Klasse, nur macht es einfach zu set-up-Nachricht, die standardmäßig zusammen mit dem rest der Anwendung, der Konfiguration und es hat ein Stück von speziellen sauce, die nötig war, um diese Arbeit mit einem Office365 SMTP-server eine benutzerdefinierte javax.E-mail.Session-Instanz registriert als Spring-Bean:
Die @Data ist wieder ein Lombok-Annotationen - automatagically fügt mutator-und accessor-Methoden toString(), equals () - & hashCode(), etc.
Die Beschränkung der Frühling ist JavaMailSender (JavaMailSenderImpl) ist, dass Ihre Session ist nicht direkt konfigurierbar, insbesondere gibt es keine Möglichkeit zum aktivieren von TLS-Authentifizierung über eine Eigenschaft. Allerdings, wenn es gibt ein javax.E-mail.Session-Bean eingetragen in den Kontext eingefügt werden, wird (bedingt autowired) in der MailSenderAutoConfiguration und dann verwendet, um zu konstruieren, das JavaMailSenderImpl Instanz.
So registrieren wir nur so eine Bean über die getSession () - Methode. Für eine gute Maßnahme, machen wir die Sitzung, in der wir bauen hier die Voreinstellung für die JVM - ändern Sie es zu nennen getInstance (), wenn Sie nicht wollen, Verhalten.
Nachdem Sie diese Session @Bean hat alles geklappt.
InformationsquelleAutor der Antwort sofend
Mit Spring Boot 1.2 an, eine JavaMailSender konnten, werden automatisch für Sie konfiguriert. Ich habe dieses video erklären, wie genau zum versenden von E-mails mit Spring Boot 1.2 ab. Frühling Zitrone's source-code bezeichnet werden könnte, für die genauen details.
InformationsquelleAutor der Antwort Sanjay
Neben geoand Antwort: wenn Sie nicht möchten, codieren Sie die E-mail-Eigenschaften oder schreiben von XML-Code, können Sie Ihre Eigenschaften zu einer Datei (mail.Eigenschaften zum Beispiel) in Ihren Ressourcen, und fügen Sie diese Art von code in der MailConfig Klasse:
Und die Auswahl von Eigenschaften die Sie verwenden können, alle angegebenen auf diesen Seiten
https://javamail.java.net/nonav/docs/api/
https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html
Aber Sie haben noch zu setzen, Host, Port, Benutzername und Passwort von der JavaMailSenderImpl Methoden die es nicht direkt nutzen diejenigen, die in Ihr Eigenschaften.
InformationsquelleAutor der Antwort Geoffrey