Ú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:

  1. MailSender felület: A legfelső szintű felület, amely alapvető funkciókat biztosít az egyszerű e-mailek küldéséhez
  2. 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
  3. JavaMailSenderImpl osztály: biztosítja a JavaMailSender felület. Támogatja a MimeMessage és SimpleMailMessage
  4. 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
  5. MimeMessagePreparator felület: visszahívási felületet biztosít a MIME üzenetek előkészítéséhez
  6. 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:

  1. Elkapni a SendFailedException, amit soha nem lehet dobni
  2. 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
  3. 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.