Útmutató a tavaszi e-mailhez
1. Áttekintés
Ebben a cikkben végigvezetjük az e-mailek elküldéséhez szükséges lépéseket mind a sima vanília Spring alkalmazásból, mind a Spring Boot alkalmazásból. spring-boot-starter-mail függőség.
2. Maven-függőségek
Először hozzá kell adnunk a függőségeket a sajátunkhoz pom.xml.
2.1. Tavaszi
A sima vanília tavaszi keretben történő felhasználáshoz hozzáadjuk:
org.springframework tavaszi kontextus-támogatás 5.2.8.KÖZLEMÉNY
A legújabb verzió itt található.
2.2. Tavaszi csizma
És a tavaszi csomagtartóhoz:
org.springframework.boot spring-boot-starter-mail 2.2.5.KÖZLEMÉNY
A legújabb verzió a Maven Central adattárban érhető el.
3. A Mail Server tulajdonságai
A Java levelezési támogatás interfészei és osztályai a tavaszi keretrendszerben az alábbiak szerint szerveződnek:
- MailSender felület: A legfelső szintű felület, amely alapvető funkciókat biztosít az egyszerű e-mailek küldéséhez
- JavaMailSender felület: a fentiek alfelülete MailSender. Támogatja a MIME üzeneteket, és többnyire a MimeMessageHelper osztály létrehozására a MimeMessage. Javasoljuk a MimeMessagePreparator mechanizmus ezzel az interfésszel
- JavaMailSenderImpl osztály: biztosítja a JavaMailSender felület. Támogatja a MimeMessage és SimpleMailMessage
- SimpleMailMessage osztály: egy egyszerű e-mail létrehozására szolgál, beleértve a kezdő, a, a, másolat, a tárgy és a szöveg mezőket
- MimeMessagePreparator felület: visszahívási felületet biztosít a MIME üzenetek előkészítéséhez
- MimeMessageHelper osztály: segítő osztály a MIME üzenetek létrehozásához. Támogatást nyújt a képekhez, a tipikus levélmellékletekhez és a szöveges tartalomhoz HTML elrendezésben
A következő szakaszokban megmutatjuk, hogyan használják ezeket az interfészeket és osztályokat.
3.1. Tavaszi levelezőszerver tulajdonságai
Levelezési tulajdonságok, amelyek megadásához szükségesek pl. az SMTP szervert az JavaMailSenderImpl.
Például a Gmail esetében ez az alábbiak szerint konfigurálható:
@Bean public JavaMailSender getJavaMailSender () {JavaMailSenderImpl mailSender = new JavaMailSenderImpl (); mailSender.setHost ("smtp.gmail.com"); mailSender.setPort (587); mailSender.setUsername ("[e-mail védett]"); mailSender.setPassword ("jelszó"); Tulajdonságok kellékek = mailSender.getJavaMailProperties (); props.put ("mail.transport.protocol", "smtp"); props.put ("mail.smtp.auth", "true"); props.put ("mail.smtp.starttls.enable", "true"); props.put ("mail.debug", "true"); return mailSender; }
3.2. Tavaszi indító levelező kiszolgáló tulajdonságai
Miután a függőség megvan, a következő lépés a levelkiszolgáló tulajdonságainak megadása a alkalmazás.tulajdonságok fájl segítségével tavasz.mail. * névtér.
Például a Gmail SMTP Server tulajdonságait a következőképpen lehet megadni:
spring.mail.host = smtp.gmail.com spring.mail.port = 587 spring.mail.username = spring.mail.password = spring.mail.properties.mail.smtp.auth = true spring.mail.properties.mail .smtp.starttls.enable = true
Egyes SMTP-kiszolgálók TLS-kapcsolatot igényelnek, tehát a tulajdonság spring.mail.properties.mail.smtp.starttls.enable a TLS-védett kapcsolat engedélyezésére szolgál.
3.2.1. Gmail SMTP tulajdonságai
E-mailt küldhetünk a Gmail SMTP szerveren keresztül. Tekintse meg a dokumentációt a Gmail kimenő levelek SMTP-kiszolgálójának tulajdonságainak megtekintéséhez.
A mi alkalmazás.a tulajdonságok a fájl már be van állítva a Gmail SMTP használatára (lásd az előző szakaszt).
Ne feledje, hogy a fiókjának jelszavának nem egy szokásos jelszónak kell lennie, hanem a Google-fiókjához generált alkalmazásjelszónak. Kövesse ezt a linket a részletek megtekintéséhez és a Google alkalmazás jelszavának létrehozásához.
3.2.2. SES SMTP tulajdonságok
Ha e-maileket szeretne küldeni az Amazon SES szolgáltatás használatával, állítsa be alkalmazás.tulajdonságok ahogy az alábbiak szerint tesszük:
spring.mail.host = email-smtp.us-west-2.amazonaws.com spring.mail.username = felhasználónév spring.mail.password = jelszó spring.mail.properties.mail.transport.protocol = smtp spring.mail. properties.mail.smtp.port = 25 spring.mail.properties.mail.smtp.auth = true spring.mail.properties.mail.smtp.starttls.enable = true spring.mail.properties.mail.smtp.starttls.required = igaz
Kérjük, vegye figyelembe, hogy az Amazon megköveteli, hogy ellenőrizze hitelesítő adatait, mielőtt felhasználná őket. Kövesse a linket a felhasználónév és a jelszó ellenőrzéséhez.
4. E-mail küldése
Ha a függőségkezelés és a konfiguráció megvan, használhatjuk a fentieket JavaMailSender e-mailt küldeni.
Mivel mind a sima vanília tavaszi keretrendszer, mind annak Boot verziója hasonló módon kezeli az e-mailek írását és küldését, az alábbi alfejezetekben nem kell különbséget tennünk a kettő között.
4.1. Egyszerű e-mailek küldése
Először írjunk és küldjünk egy egyszerű e-mailt mellékletek nélkül:
@Component public class EmailServiceImpl implementálja az EmailService {@Autowired private JavaMailSender emailSender; public void sendSimpleMessage (String to, String subject, String text) {... SimpleMailMessage message = new SimpleMailMessage (); message.setFrom ("[e-mail védett]"); message.setTo (to); message.setSubject (subject); message.setText (szöveg); emailSender.send (üzenet); ...}}
Vegye figyelembe, hogy bár nem kötelező megadni a tól től címet, sok SMTP szerver elutasítaná az ilyen üzeneteket. Ezért használjuk az [e-mail védett] e-mail címet EmailService végrehajtás.
4.2. E-mailek küldése mellékletekkel
Néha a tavaszi egyszerű üzenetküldés nem elegendő a felhasználási eseteinkhez.
Például egy megrendelés-visszaigazoló e-mailt szeretnénk küldeni csatolt számlával. Ebben az esetben a PANTOMIM többrészes üzenet JavaMail könyvtár helyett SimpleMailMessage. Rugós támaszok JavaMail üzenetküldés a org.springframework.mail.javamail.MimeMessageHelper osztály.
Először hozzáadunk egy módszert a EmailServiceImpl mellékletekkel ellátott e-mailek küldéséhez:
@Orride public void sendMessageWithAttachment (String to, String subject, String text, String pathToAttachment) {// ... MimeMessage message = emailSender.createMimeMessage (); MimeMessageHelper helper = új MimeMessageHelper (üzenet, igaz); helper.setFrom ("[e-mail védett]"); helper.setTo (to); helper.setSubject (tárgy); helper.setText (szöveg); FileSystemResource file = új FileSystemResource (új File (pathToAttachment)); helper.addAttachment ("Számla", fájl); emailSender.send (üzenet); // ...}
4.3. Egyszerű e-mail sablon
SimpleMailMessage osztály támogatja a szöveg formázását. Hozhatunk létre sablont az e-mailekhez, ha meghatározunk egy sablonbabot a konfigurációnkban:
@Bean public SimpleMailMessage templateSimpleMessage () {SimpleMailMessage message = new SimpleMailMessage (); message.setText ("Ez az e-mail teszt e-mail sablonja: \ n% s \ n"); visszaüzenet; }
Most ezt a babot használhatjuk e-mail sablonként, és csak a szükséges paramétereket kell megadnunk a sablonhoz:
@Autowired nyilvános SimpleMailMessage sablon; ... String text = String.format (template.getText (), templateArgs); sendSimpleMessage (to, tárgy, szöveg);
5. Küldési hibák kezelése
JavaMail biztosítja SendFailedException kezelni azokat a helyzeteket, amikor üzenetet nem lehet elküldeni. De lehetséges, hogy nem kapja meg ezt a kivételt, miközben e-mailt küld a nem megfelelő címre. Ennek oka a következő:
Az RFC 821 SMTP protokoll-specifikációja meghatározza az 550-es visszatérési kódot, amelyet az SMTP-kiszolgálónak vissza kell adnia, amikor megpróbálja e-mailt küldeni a helytelen címre. De a nyilvános SMTP-szerverek többsége nem ezt teszi. Ehelyett egy „sikertelen kézbesítést” e-mailt küldenek a dobozába, vagy egyáltalán nem adnak visszajelzést.
Például a Gmail SMTP-kiszolgáló „sikertelen kézbesítést” küld. És nem kap kivételt a programjában.
Tehát néhány lehetőség közül választhat, amellyel kezelheti ezt az esetet:
- Elkapni a SendFailedException, amit soha nem lehet dobni
- Bizonyos ideig ellenőrizze a feladó postaládáját a „kézbesítés sikertelen” üzenetben. Ez nem egyszerű, és az időtartam nincs meghatározva
- Ha a levelező szerver egyáltalán nem ad visszajelzést, akkor nem tehet semmit
6. Következtetés
Ebben a rövid cikkben bemutattuk, hogyan állítsunk be és küldjünk e-maileket a Spring Boot alkalmazásból.
Ezen példák és kódrészletek megvalósítása megtalálható a GitHub-on.