Spring Boot 发送邮件

素颜马尾好姑娘i 2022-06-03 03:25 310阅读 0赞

在 Spring Boot 中使用 Spring Mail 发送邮件;
GitHub 代码 https://github.com/helloworlde/SpringBootCollection/blob/master/SpringBoot-Mail/README.md


添加 Spring Mail 依赖

  • build.gradle

    compile(‘org.springframework.boot:spring-boot-starter-mail’)

添加配置文件

  • application.properties

    spring.mail.host=smtpdm.aliyun.com

    1. spring.mail.port=465
    2. spring.mail.username="你的邮箱"
    3. spring.mail.password="你的密码"
    4. spring.mail.properties.smtp.auth=true
    5. spring.mail.properties.smtp.starttls.enable=true
    6. spring.mail.properties.smtp.starttls.required=true
    7. spring.mail.properties.mail.smtp.ssl.enable=true

发送简单邮件

  • MailUtil.java

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.MailException;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.stereotype.Component;
    import org.thymeleaf.TemplateEngine;

    @Component
    public class MailUtil {

    1. private final Logger logger = LoggerFactory.getLogger(getClass());
    2. @Autowired
    3. JavaMailSender mailSender;
    4. @Autowired
    5. TemplateEngine templateEngine;
    6. public void sendSimpleEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content) throws ServiceException {
    7. long startTimestamp = System.currentTimeMillis();
    8. logger.info("Start send mail ... ");
    9. try {
    10. SimpleMailMessage message = new SimpleMailMessage();
    11. message.setFrom(deliver);
    12. message.setTo(receiver);
    13. message.setCc(carbonCopy);
    14. message.setSubject(subject);
    15. message.setText(content);
    16. mailSender.send(message);
    17. logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
    18. } catch (MailException e) {
    19. logger.error("Send mail failed, error message is : {} \n", e.getMessage());
    20. e.printStackTrace();
    21. throw new ServiceException(e.getMessage());
    22. }
    23. }

    }

  • 发送邮件

    @Test

    1. public void sendSimpleEmail() {
    2. String deliver = "你的邮件地址";
    3. String[] receiver = {"接收者邮件地址"};
    4. String[] carbonCopy = {"抄送者邮件地址"};
    5. String subject = "This is a simple email";
    6. String content = "This is a simple content";
    7. try {
    8. mailUtil.sendSimpleEmail(deliver, receiver, carbonCopy, subject, content);
    9. } catch (Exception e) {
    10. assertFalse("Send simple email failed", true);
    11. e.printStackTrace();
    12. }
    13. }

发送 HTML 内容的邮件

  • MailUtil.java

    import cn.com.hellowood.mail.util.ServiceException;

    1. import org.slf4j.Logger;
    2. import org.slf4j.LoggerFactory;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.mail.javamail.JavaMailSender;
    5. import org.springframework.mail.javamail.MimeMessageHelper;
    6. import org.springframework.stereotype.Component;
    7. import javax.mail.MessagingException;
    8. import javax.mail.internet.MimeMessage;
    9. @Component
    10. public class MailUtil {
    11. private final Logger logger = LoggerFactory.getLogger(getClass());
    12. @Autowired
    13. JavaMailSender mailSender;
    14. public void sendHtmlEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml) throws ServiceException {
    15. long startTimestamp = System.currentTimeMillis();
    16. logger.info("Start send email ...");
    17. try {
    18. MimeMessage message = mailSender.createMimeMessage();
    19. MimeMessageHelper messageHelper = new MimeMessageHelper(message);
    20. messageHelper.setFrom(deliver);
    21. messageHelper.setTo(receiver);
    22. messageHelper.setCc(carbonCopy);
    23. messageHelper.setSubject(subject);
    24. messageHelper.setText(content, isHtml);
    25. mailSender.send(message);
    26. logger.info("Send email success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
    27. } catch (MessagingException e) {
    28. logger.error("Send email failed, error message is {} \n", e.getMessage());
    29. e.printStackTrace();
    30. throw new ServiceException(e.getMessage());
    31. }
    32. }
    33. }
  • 发送 HTML 邮件

    @Test

    1. public void sendHtmlEmail() {
    2. String deliver = "你的邮件地址";
    3. String[] receiver = {"接收者邮件地址"};
    4. String[] carbonCopy = {"抄送者邮件地址"};
    5. String subject = "This is a HTML content email";
    6. String content = "<h1>This is HTML content email </h1>";
    7. boolean isHtml = true;
    8. try {
    9. mailUtil.sendHtmlEmail(deliver, receiver, carbonCopy, subject, content, isHtml);
    10. } catch (ServiceException e) {
    11. assertFalse("Send HTML content email failed", true);
    12. e.printStackTrace();
    13. }
    14. }

发送带附件的邮件

  • MailUtil.java

    import org.slf4j.Logger;

    1. import org.slf4j.LoggerFactory;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.mail.javamail.JavaMailSender;
    4. import org.springframework.mail.javamail.MimeMessageHelper;
    5. import org.springframework.stereotype.Component;
    6. import javax.mail.MessagingException;
    7. import javax.mail.internet.MimeMessage;
    8. import java.io.File;
    9. @Component
    10. public class MailUtil {
    11. private final Logger logger = LoggerFactory.getLogger(getClass());
    12. @Autowired
    13. JavaMailSender mailSender;
    14. public void sendAttachmentFileEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml, String fileName, File file) throws ServiceException {
    15. long startTimestamp = System.currentTimeMillis();
    16. logger.info("Start send mail ...");
    17. try {
    18. MimeMessage message = mailSender.createMimeMessage();
    19. MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
    20. messageHelper.setFrom(deliver);
    21. messageHelper.setTo(receiver);
    22. messageHelper.setCc(carbonCopy);
    23. messageHelper.setSubject(subject);
    24. messageHelper.setText(content, isHtml);
    25. messageHelper.addAttachment(fileName, file);
    26. mailSender.send(message);
    27. logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
    28. } catch (MessagingException e) {
    29. logger.error("Send mail failed, error message is {}\n", e.getMessage());
    30. e.printStackTrace();
    31. throw new ServiceException(e.getMessage());
    32. }
    33. }
    34. }
  • 发送带附件的邮件

    @Test

    1. public void sendAttachmentFileEmail() {
    2. String FILE_PATH = "文件地址";
    3. String deliver = "你的邮件地址";
    4. String[] receiver = {"接收者邮件地址"};
    5. String[] carbonCopy = {"抄送者邮件地址"};
    6. String subject = "This is an attachment file email";
    7. String content = "<h2>This is an attachment file email</h2>";
    8. boolean isHtml = true;
    9. File file = new File(FILE_PATH);
    10. String fileName = FILE_PATH.substring(FILE_PATH.lastIndexOf(File.separator));
    11. try {
    12. mailUtil.sendAttachmentFileEmail(deliver, receiver, carbonCopy, subject, content, isHtml, fileName, file);
    13. } catch (ServiceException e) {
    14. assertFalse("Send attachment file email failed", true);
    15. e.printStackTrace();
    16. }
    17. }

发送模板邮件

使用 Thymeleaf 作为模板

  • 添加依赖

    compile(‘org.springframework.boot:spring-boot-starter-thymeleaf’)

  • 邮件模板(InternalServerErrorTemplate.html)

    <!DOCTYPE html>



    Hello World









    Hi,
    Developer


    There is an exception occurred in method
    methodName,
    the error message is :





    1. Error Message



    occurredTime




  • MailUtil.java

    import org.slf4j.Logger;

    1. import org.slf4j.LoggerFactory;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.mail.javamail.JavaMailSender;
    4. import org.springframework.mail.javamail.MimeMessageHelper;
    5. import org.springframework.stereotype.Component;
    6. import org.thymeleaf.TemplateEngine;
    7. import org.thymeleaf.context.Context;
    8. import javax.mail.MessagingException;
    9. import javax.mail.internet.MimeMessage;
    10. @Component
    11. public class MailUtil {
    12. private final Logger logger = LoggerFactory.getLogger(getClass());
    13. @Autowired
    14. JavaMailSender mailSender;
    15. @Autowired
    16. TemplateEngine templateEngine;
    17. public void sendTemplateEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String template, Context context) throws ServiceException {
    18. long startTimestamp = System.currentTimeMillis();
    19. logger.info("Start send mail ...");
    20. try {
    21. MimeMessage message = mailSender.createMimeMessage();
    22. MimeMessageHelper messageHelper = new MimeMessageHelper(message);
    23. String content = templateEngine.process(template, context);
    24. messageHelper.setFrom(deliver);
    25. messageHelper.setTo(receiver);
    26. messageHelper.setCc(carbonCopy);
    27. messageHelper.setSubject(subject);
    28. messageHelper.setText(content, true);
    29. mailSender.send(message);
    30. logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
    31. } catch (MessagingException e) {
    32. logger.error("Send mail failed, error message is {} \n", e.getMessage());
    33. e.printStackTrace();
    34. throw new ServiceException(e.getMessage());
    35. }
    36. }
    37. }
  • 发送模板邮件

    @Test

    1. public void sendTemplateEmail() {
    2. String deliver = "你的邮件地址";
    3. String[] receiver = {"接收者邮件地址"};
    4. String[] carbonCopy = {"抄送者邮件地址"};
    5. String template = "mail/InternalServerErrorTemplate";
    6. String subject = "This is a template email";
    7. Context context = new Context();
    8. String errorMessage;
    9. try {
    10. throw new NullPointerException();
    11. } catch (NullPointerException e) {
    12. Writer writer = new StringWriter();
    13. PrintWriter printWriter = new PrintWriter(writer);
    14. e.printStackTrace(printWriter);
    15. errorMessage = writer.toString();
    16. }
    17. context.setVariable("username", "HelloWood");
    18. context.setVariable("methodName", "cn.com.hellowood.mail.MailUtilTests.sendTemplateEmail()");
    19. context.setVariable("errorMessage", errorMessage);
    20. context.setVariable("occurredTime", new Date());
    21. try {
    22. mailUtil.sendTemplateEmail(deliver, receiver, carbonCopy, subject, template, context);
    23. } catch (ServiceException e) {
    24. assertFalse("Send template email failed", true);
    25. e.printStackTrace();
    26. }
    27. }

发表评论

表情:
评论列表 (有 0 条评论,310人围观)

还没有评论,来说两句吧...

相关阅读