Veiledning til vår-e-post
1. Oversikt
I denne artikkelen vil vi gå gjennom trinnene som trengs for å sende e-post fra både en vanlig vaniljefjærapplikasjon så vel som fra en Spring Boot-applikasjon, den første bruker JavaMail-biblioteket og den siste bruker spring-boot-starter-mail avhengighet.
2. Maven-avhengigheter
Først må vi legge til avhengighet til vår pom.xml.
2.1. Vår
For bruk i det vanlige vårrammeverket vil vi legge til:
org.springframework spring-context-support 5.2.8.RELEASE
Den siste versjonen finner du her.
2.2. Vårstøvel
Og for Spring Boot:
org.springframework.boot spring-boot-starter-mail 2.2.5.RELEASE
Den siste versjonen er tilgjengelig i Maven Central repository.
3. Egenskaper for e-postserver
Grensesnittene og klassene for Java-poststøtte i Spring-rammeverket er organisert som følger:
- MailSender grensesnitt: Grensesnittet på toppnivå som gir grunnleggende funksjonalitet for å sende enkle e-postmeldinger
- JavaMailSender grensesnitt: undergrensesnittet til ovennevnte MailSender. Den støtter MIME-meldinger og brukes mest i forbindelse med MimeMessageHelper klasse for opprettelse av en MimeMessage. Det anbefales å bruke MimeMessagePreparator mekanisme med dette grensesnittet
- JavaMailSenderImpl klasse: gir en implementering av JavaMailSender grensesnitt. Den støtter MimeMessage og SimpleMailMessage
- SimpleMailMessage klasse: brukes til å lage en enkel e-postmelding inkludert fra, til, cc, emne og tekstfelt
- MimeMessagePreparator grensesnitt: gir et tilbakeringingsgrensesnitt for utarbeidelse av MIME-meldinger
- MimeMessageHelper klasse: hjelperklasse for oppretting av MIME-meldinger. Det tilbyr støtte for bilder, typiske e-postvedlegg og tekstinnhold i et HTML-oppsett
I de følgende avsnittene viser vi hvordan disse grensesnittene og klassene brukes.
3.1. Spring Mail Server Properties
E-postegenskaper som er nødvendige for å spesifisere f.eks. SMTP-serveren kan defineres ved hjelp av JavaMailSenderImpl.
For eksempel kan dette konfigureres for Gmail som vist nedenfor:
@Bean offentlig JavaMailSender getJavaMailSender () {JavaMailSenderImpl mailSender = ny JavaMailSenderImpl (); mailSender.setHost ("smtp.gmail.com"); mailSender.setPort (587); mailSender.setUsername ("[email protected]"); mailSender.setPassword ("passord"); Egenskaper rekvisitter = 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. Spring Boot Mail Server Properties
Når avhengigheten er på plass, er neste trinn å spesifisere egenskapene til e-postserveren i application.properties filen ved hjelp av vårpost. * navneområdet.
Egenskapene for Gmail SMTP Server kan for eksempel spesifiseres som:
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 = sant
Noen SMTP-servere krever en TLS-tilkobling, så eiendommen spring.mail.properties.mail.smtp.starttls.enable brukes til å aktivere en TLS-beskyttet tilkobling.
3.2.1. Gmail SMTP-egenskaper
Vi kan sende en e-post via Gmail SMTP-server. Ta en titt på dokumentasjonen for å se egenskapene til SMTP-server for Gmail for utgående e-post.
Våre applikasjonen. egenskapene filen er allerede konfigurert til å bruke Gmail SMTP (se forrige avsnitt).
Merk at passordet for kontoen din ikke skal være et vanlig passord, men et applikasjonspassord generert for Google-kontoen din. Følg denne lenken for å se detaljene og generere Google App-passordet ditt.
3.2.2. SES SMTP-egenskaper
For å sende e-postmeldinger ved hjelp av Amazon SES Service, angi din application.properties som vi gjør nedenfor:
spring.mail.host = email-smtp.us-west-2.amazonaws.com spring.mail.username = brukernavn spring.mail.password = passord 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 = sant
Vær oppmerksom på at Amazon krever at du bekrefter legitimasjonen din før du bruker dem. Følg lenken for å bekrefte brukernavnet og passordet ditt.
4. Sende e-post
Når avhengighetsadministrasjon og konfigurasjon er på plass, kan vi bruke det ovennevnte JavaMailSender å sende en e-post.
Siden både det vanlige vårrammeverket og Boot-versjonen av det håndterer komponering og sending av e-post på en lignende måte, trenger vi ikke å skille mellom de to i underavsnittene nedenfor.
4.1. Sende enkle e-poster
La oss først komponere og sende en enkel e-postmelding uten vedlegg:
@Component public class EmailServiceImpl implementerer EmailService {@Autowired private JavaMailSender emailSender; public void sendSimpleMessage (String to, String subject, String text) {... SimpleMailMessage message = new SimpleMailMessage (); message.setFrom ("[email protected]"); message.setTo (til); message.setSubject (emne); message.setText (tekst); emailSender.send (melding); ...}}
Merk at selv om det ikke er obligatorisk å oppgi fra adresse, ville mange SMTP-servere avvise slike meldinger. Derfor bruker vi e-postadressen [email protected] i vår EmailService gjennomføring.
4.2. Sende e-post med vedlegg
Noen ganger er ikke vår enkle meldinger nok for våre brukstilfeller.
For eksempel ønsker vi å sende en ordrebekreftelses-e-post med faktura vedlagt. I dette tilfellet bør vi bruke en MIME flerdelt melding fra JavaMail bibliotek i stedet for SimpleMailMessage. Vårstøtter JavaMail meldinger med org.springframework.mail.javamail.MimeMessageHelper klasse.
Først og fremst legger vi til en metode for EmailServiceImpl å sende e-post med vedlegg:
@Override public void sendMessageWithAttachment (String to, String subject, String text, String pathToAttachment) {// ... MimeMessage message = emailSender.createMimeMessage (); MimeMessageHelper helper = ny MimeMessageHelper (melding, sant); helper.setFrom ("[email protected]"); helper.setTo (til); helper.setSubject (subject); helper.setText (tekst); FileSystemResource file = new FileSystemResource (new File (pathToAttachment)); helper.addAttachment ("Faktura", fil); emailSender.send (melding); // ...}
4.3. Enkel e-postmal
SimpleMailMessage klasse støtter tekstformatering. Vi kan lage en mal for e-post ved å definere en malbønne i vår konfigurasjon:
@Bean offentlig SimpleMailMessage malSimpleMessage () {SimpleMailMessage melding = ny SimpleMailMessage (); message.setText ("Dette er e-postmalen for din e-post: \ n% s \ n"); returmelding; }
Nå kan vi bruke denne bønnen som en mal for e-post og trenger bare å oppgi de nødvendige parametrene til malen:
@Autowired offentlig SimpleMailMessage mal; ... Strengtekst = String.format (template.getText (), templateArgs); sendSimpleMessage (til, emne, tekst);
5. Håndtering av sendefeil
JavaMail gir SendFailedException for å håndtere situasjoner der en melding ikke kan sendes. Men det er mulig at du ikke får dette unntaket mens du sender en e-post til feil adresse. Årsaken er følgende:
Protokollspesifikasjonene for SMTP i RFC 821 spesifiserer 550 returkoden som SMTP-serveren skal returnere når du prøver å sende en e-post til feil adresse. Men de fleste av de offentlige SMTP-serverne gjør ikke dette. I stedet sender de en "levering mislyktes" e-post til boksen din, eller gir ingen tilbakemelding i det hele tatt.
For eksempel sender Gmail SMTP-server en "levering mislyktes" -melding. Og du får ingen unntak i programmet ditt.
Så det er få alternativer du kan gå gjennom for å håndtere denne saken:
- Fang opp SendFailedException, som aldri kan kastes
- Sjekk avsenderens postkasse når det gjelder "levering mislyktes" i en periode. Dette er ikke greit og tidsperioden blir ikke bestemt
- Hvis e-postserveren ikke gir noen tilbakemelding i det hele tatt, kan du ikke gjøre noe
6. Konklusjon
I denne raske artikkelen viste vi hvordan du konfigurerer og sender e-post fra en Spring Boot-applikasjon.
Implementeringen av alle disse eksemplene og kodebiter finner du på GitHub.