מדריך למייל באביב

1. סקירה כללית

במאמר זה נעבור בין השלבים הדרושים לשליחת אימיילים הן מיישום אביב וניל רגיל והן מיישום Spring Boot, הראשון באמצעות ספריית JavaMail והאחרון באמצעות אביב-אתחול-המתנע-דואר תלות.

2. תלות Maven

ראשית, עלינו להוסיף את התלות שלנו pom.xml.

2.1. אביב

לשימוש במסגרת האביב הווניל הרגיל נוסיף:

 org.springframework spring-context-support 5.2.8.RELEASE 

הגרסה האחרונה תוכל למצוא כאן.

2.2. מגף אביב

ולגבי האביב:

 org.springframework.boot spring-boot-starter-mail 2.2.5.RELEASE 

הגרסה האחרונה זמינה במאגר Maven Central.

3. מאפייני שרת דואר

הממשקים והשיעורים לתמיכה בדואר Java במסגרת האביב מסודרים באופן הבא:

  1. MailSender מִמְשָׁק: הממשק ברמה העליונה המספק פונקציונליות בסיסית לשליחת מיילים פשוטים
  2. JavaMailSender מִמְשָׁק: ממשק המשנה של האמור לעיל MailSender. הוא תומך בהודעות MIME ומשמש בעיקר בשילוב עם ה- MimeMessageHelper כיתה ליצירת א MimeMessage. מומלץ להשתמש ב- MimeMessagePreparator מנגנון עם ממשק זה
  3. JavaMailSenderImpl מעמד: מספק יישום של JavaMailSender מִמְשָׁק. זה תומך ב- MimeMessage ו SimpleMailMessage
  4. SimpleMailMessage מעמד: משמש ליצירת הודעת דואר פשוטה הכוללת את שדות from, to, cc, נושא וטקסט
  5. MimeMessagePreparator מִמְשָׁק: מספק ממשק להתקשרות להכנת הודעות MIME
  6. MimeMessageHelper מעמד: מעמד עוזר ליצירת הודעות MIME. הוא מציע תמיכה בתמונות, קבצים מצורפים לדואר אופייניים ותוכן טקסט בפריסת HTML

בחלקים הבאים אנו מראים כיצד משתמשים בממשקים ובמחלקות אלה.

3.1. מאפייני שרת דואר קפיץ

מאפייני דואר הדרושים כדי לציין למשל. ניתן להגדיר את שרת ה- SMTP באמצעות JavaMailSenderImpl.

לדוגמה, עבור Gmail ניתן להגדיר זאת כפי שמוצג להלן:

@Bean JavaMailSender ציבורי getJavaMailSender () {JavaMailSenderImpl mailSender = JavaMailSenderImpl חדש (); mailSender.setHost ("smtp.gmail.com"); mailSender.setPort (587); mailSender.setUsername ("[דוא"ל מוגן]"); mailSender.setPassword ("סיסמה"); אביזרי מאפיינים = 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"); להחזיר mailSender; } 

3.2. מאפייני שרת דואר אתחול האביב

לאחר התלות במקום, השלב הבא הוא לציין את מאפייני שרת הדואר ב- application.properties קובץ באמצעות אביב. דואר. * מרחב שמות.

לדוגמה, ניתן לציין את המאפיינים עבור שרת ה- SMTP של Gmail כ:

spring.mail.host = smtp.gmail.com spring.mail.port = 587 spring.mail.username = spring.mail.password = spring.mail.properties.mail.smtp.auth = spring.mail.properties.mail אמיתי .smtp.starttls.enable = נכון 

חלק משרתי ה- SMTP דורשים חיבור TLS, לכן הנכס spring.mail.properties.mail.smtp.starttls.enable משמש להפעלת חיבור מוגן TLS.

3.2.1. מאפייני SMTP של Gmail

אנו יכולים לשלוח דוא"ל באמצעות שרת ה- SMTP של Gmail. עיין בתיעוד כדי לראות את מאפייני שרת ה- SMTP של דואר יוצא של Gmail.

שֶׁלָנוּ היישום. המאפיינים הקובץ כבר מוגדר לשימוש ב- Gmail SMTP (עיין בסעיף הקודם).

שים לב שהסיסמה לחשבונך לא צריכה להיות סיסמה רגילה, אלא סיסמת יישום שנוצרה עבור חשבון Google שלך. לחץ על קישור זה כדי לראות את הפרטים וליצור את סיסמת Google App שלך.

3.2.2. מאפייני SES SMTP

כדי לשלוח הודעות דוא"ל באמצעות שירות Amazon SES, הגדר את application.properties כפי שאנו עושים להלן:

spring.mail.host = email-smtp.us-west-2.amazonaws.com spring.mail.username = שם משתמש spring.mail.password = סיסמה spring.mail.properties.mail.transport.protocol = smtp spring.mail. properties.mail.smtp.port = 25 spring.mail.properties.mail.smtp.auth = spring.mail.properties.mail.smtp.starttls.enable = spring.mail.properties.mail.smtp.starttls.required = נכון

אנא שים לב שאמזון דורשת ממך לאמת את אישוריך לפני שתשתמש בהם. עקוב אחר הקישור לאימות שם המשתמש והסיסמה שלך.

4. שליחת דוא"ל

לאחר ניהול ותצורה של תלות, נוכל להשתמש באמור לעיל JavaMailSender לשלוח אימייל.

מכיוון שגם מסגרת האביב הווניל הרגילה וגם גרסת האתחול שלה מטפלים בהלחנה ושליחה של מיילים באופן דומה, לא נצטרך להבחין בין השניים בסעיפי המשנה שלהלן.

4.1. שליחת מיילים פשוטים

בואו נחבר ונשלח הודעת אימייל פשוטה ללא קבצים מצורפים:

@Component בכיתה ציבורית EmailServiceImpl מיישם את EmailService {@Autowired פרטי JavaMailSender emailSender; בטל ציבורי sendSimpleMessage (מחרוזת אל, נושא מחרוזת, טקסט מחרוזת) {... SimpleMailMessage הודעה = SimpleMailMessage חדש (); message.setFrom ("[מוגן בדוא"ל]"); message.setTo (אל); message.setSubject (נושא); message.setText (טקסט); emailSender.send (הודעה); ...}}

שים לב, שלמרות שלא חובה לספק את מ כתובת, שרתי SMTP רבים ידחו הודעות כאלה. זו הסיבה שאנו משתמשים בכתובת הדואר האלקטרוני [המוגנת באמצעות הדוא"ל] שבכתובת שלנו שירות אימייל יישום.

4.2. שליחת מיילים עם קבצים מצורפים

לפעמים המסרים הפשוטים של אביב אינם מספיקים למקרי השימוש שלנו.

לדוגמה, אנו רוצים לשלוח אימייל לאישור הזמנה עם חשבונית מצורפת. במקרה זה, עלינו להשתמש ב- לְחַקוֹת הודעה מרובת חלקים מאת JavaMail ספרייה במקום SimpleMailMessage. תומך באביב JavaMail הודעות עם org.springframework.mail.javamail.MimeMessageHelper מעמד.

קודם כל, נוסיף שיטה ל- EmailServiceImpl לשלוח מיילים עם קבצים מצורפים:

@Override public void sendMessageWithAttachment (String to, String subject, String text, String pathToAttachment) {// ... MimeMessage message = emailSender.createMimeMessage (); עוזר MimeMessageHelper = MimeMessageHelper חדש (הודעה, נכון); helper.setFrom ("[דוא"ל מוגן]"); helper.setTo (to); helper.setSubject (נושא); helper.setText (טקסט); FileSystemResource file = FileSystemResource חדש (קובץ חדש (pathToAttachment)); helper.addAttachment ("חשבונית", קובץ); emailSender.send (הודעה); // ...}

4.3. תבנית דוא"ל פשוטה

SimpleMailMessage מחלקה תומכת בעיצוב טקסט. אנו יכולים ליצור תבנית להודעות דוא"ל על ידי הגדרת שעועית תבנית בתצורה שלנו:

@Bean פלטפורמת SimpleMailMessage הציבוריתSimpleMessage () {SimpleMailMessage הודעה = חדש SimpleMailMessage (); message.setText ("זו תבנית הדוא"ל לבדיקה של הדוא"ל שלך: \ n% s \ n"); הודעת החזרה; }

כעת אנו יכולים להשתמש בשעועית זו כתבנית לדוא"ל ורק עלינו לספק את הפרמטרים הדרושים לתבנית:

@ תבנית ציבורית פשוטה של ​​SimpleMailMessage; ... טקסט מחרוזת = String.format (template.getText (), templateArgs); sendSimpleMessage (אל, נושא, טקסט);

5. טיפול בשגיאות שליחה

JavaMail מספק SendFailedException לטפל במצבים שבהם לא ניתן לשלוח הודעה. אך יתכן שלא תקבל חריג זה בעת שליחת דוא"ל לכתובת השגויה. הסיבה היא הבאה:

מפרט הפרוטוקול עבור SMTP ב- RFC 821 מציין את קוד ההחזר 550 ששרת SMTP צריך להחזיר כאשר מנסים לשלוח דוא"ל לכתובת השגויה. אך רוב שרתי ה- SMTP הציבוריים אינם עושים זאת. במקום זאת, הם שולחים דוא"ל "משלוח נכשל" לתיבה שלך, או בכלל לא נותנים משוב.

לדוגמה, שרת ה- SMTP של Gmail שולח הודעת "מסירה נכשלה". ואתה לא מקבל חריגים בתוכנית שלך.

לכן, ישנן כמה אפשרויות שתוכלו לטפל במקרה זה:

  1. לתפוס את SendFailedException, שלעולם לא ניתן לזרוק
  2. בדוק בתיבת הדואר השולח בהודעת "המסירה נכשלה" למשך תקופת זמן מסוימת. זה לא פשוט ולא נקבע פרק הזמן
  3. אם שרת הדואר שלך אינו נותן משוב כלל, אינך יכול לעשות דבר

6. מסקנה

במאמר מהיר זה, הראינו כיצד להגדיר ולשלוח מיילים מיישום Spring Boot.

ניתן למצוא את היישום של כל הדוגמאות וקטעי הקוד ב- GitHub.