SpringBoot+JavaMailSender sends mail

SpringBoot+JavaMailSender sends mail

Overview
Spring provides the interface JavaMailSender for sending emails. Through JavaMailSender, the backend can send emails, and JavaMailSender can be used to customize email sending tools according to different business needs. Spring boot +JavaMailSender interface to send mail steps are as follows

1、在pom.xml中引入spring-boot-starter-mail依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        

2. If you need to send emails through templates, you also need to introduce spring-boot-starter-freemarker to generate email templates through freemarker

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        

3. Write the mail sending class mailUtils (note that the @component tag should be used), inject JavaMailSender, and the mail template freemarker bean, configure the mail sender and related STMP configuration

    @Value("${spring.mail.username}")
    private String fromMail;
    private final JavaMailSender sender;
    private final FreeMarkerConfigurer freeMarkerConfigurer;
 @Autowired
 private JavaMailSender mailSender;
或者在同一初始化配置里创建JavaMailSender bean,再通过SpringContextUtils.getBean("mailSender") (mailSender为beanName)获取,本文通过第二种方式

The sendMsg() method of MailUtils implements the general mail sending interface.
These four parameters must have
* @param mail mailbox, support multiple
* @param subject mail subject
* @param title mail title
* @param paragraph paragraph content,

    public void SendMsg(String es_receiver, String es_title, String es_content) {
        JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;
        //update-begin-author:taoyan date:20200811 for:配置类数据获取
        if(oConvertUtils.isEmpty(emailFrom)){
            StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class);
            setEmailFrom(staticConfig.getEmailFrom());
        }
        //update-end-author:taoyan date:20200811 for:配置类数据获取
        try {
            helper = new MimeMessageHelper(message, true);
            // 设置发送方邮箱地址
            helper.setFrom(emailFrom);
            helper.setTo(es_receiver);
            helper.setSubject(es_title);
            helper.setText(es_content, true);
            mailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

Principle analysis: To use JavaMailSender to send mail,
1. You must first obtain the JavaMailSender bean,

JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender");

2. mailSender creates a MimeMessage instance,

 message = mailSender.createMimeMessage();
 

3. Encapsulate mail metadata information through MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

 helper.setFrom(emailFrom);
 helper.setTo(es_receiver);
 helper.setSubject(es_title);
 helper.setText(es_content, true);

4. Send mail through the send method of mailSender

 mailSender.send(message);

Send mail via template

1. Send a text file

    /**
     * 发送文本邮件
     * @param to      收件人
     * @param subject 标题
     * @param content 正文
     */
    public void sendSimpleMail(String[] to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        //发件人
        message.setFrom(fromMail);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        sender.send(message);
    }

2. Send html mail

	    /**
     * 发送html邮件,带抄送功能
     * @param to
     * @param cc
     * @param subject
     * @param content
     */
    public void sendHtmlMail(String[] to, String[] cc, String subject, String content) {
        try {
            //注意这里使用的是MimeMessage
            MimeMessage message = sender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            // 抄送
            if (ArrayUtils.isNotEmpty(cc)) {
                helper.setCc(cc);
            }
            helper.setSubject(subject);
            //第二个参数:格式是否为html
            helper.setText(content, true);
            sender.send(message);
        }catch (MessagingException e){
            log.error("发送邮件时发生异常!", e);
        }
    }

3. Send emails with attachments

	    /**
     * 发送带附件的邮件
     * @param to
     * @param subject
     * @param content
     * @param filePath
     */
    public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
        try {
            MimeMessage message = sender.createMimeMessage();
            //要带附件第二个参数设为true
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(fileName, file);
            sender.send(message);
        }catch (MessagingException e){
            log.error("发送邮件时发生异常!", e);
        }
    }

4. Send template email

    /**
     * 发送模板邮件
     *
     * @param to
     * @param subject
     * @param template
     * @param model    使用Map作为数据模型,定义属性和值
     */
    public void sendTemplateMail(String[] to, String[] cc, String subject, String template, Map<String, Object> model) {
        try {
            // 获得模板
            Template freeMarkerTemplate = freeMarkerConfigurer.getConfiguration().getTemplate(template);
            // 传入数据模型到模板,替代模板中的占位符,并将模板转化为html字符串
            String templateHtml = FreeMarkerTemplateUtils.processTemplateIntoString(freeMarkerTemplate, model);
            // 该方法本质上还是发送html邮件,调用之前发送html邮件的方法
                    try {
            //注意这里使用的是MimeMessage
            MimeMessage message = sender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(fromMail);
            helper.setTo(to);
            // 抄送
            if (ArrayUtils.isNotEmpty(cc)) {
                helper.setCc(cc);
            }
            helper.setSubject(subject);
            //第二个参数:格式是否为html
            helper.setText(templateHtml , true);
            sender.send(message);
        }catch (MessagingException e){
            log.error("发送邮件时发生异常!", e);
        }
    }

5. Send emails for static resources

public void sendMail() throws MessagingException {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
		
		helper.setFrom("so****@163.com");
		helper.setTo("239****@qq.com");
		helper.setSubject("主题:嵌入静态资源");
		helper.setText("<html><body><img src=\"cid:hello\" ></body></html>", true);     
		
		// 注意addInline()中资源名称 hello 必须与 text正文中cid:hello对应起来
		FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));
		helper.addInline("hello", file1);
		try {
		    mailSender.send(mimeMessage);
		    logger.info("嵌入静态资源的邮件已发送。");
		} catch (Exception e) {
		    logger.error("静态资源的邮件时发生异常了!", e);
	 }
 }

Guess you like

Origin blog.csdn.net/Tomcat_king/article/details/118080787