springboot中mail组件的使用(邮件发送)

在日常开发过程中,我们经常需要对一些业务处理希望通过邮件的方式告知用户或者相关责任人,这时候我们就需要对邮件发送有一定的了解并熟练使用。

  1. 在springboot的版本中已经集成了mail组件,我们只需引入其依赖:
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
  1. 在application.properties文件中加入有关发送邮件的配置:
spring.mail.default-encoding=UTF-8
spring.mail.host=smtp.163.com
#发送者的邮箱密码
spring.mail.password=xxxxxx
#端口
spring.mail.port=25
#协议
spring.mail.protocol=smtp
#发送者的邮箱账号
spring.mail.username=xxxxx@163.com

这里首先必须确定以上配的遇见开通POP3/SMTP/IMAP
POP3服务器: pop.126.com
SMTP服务器: smtp.126.com
IMAP服务器: imap.126.com

  1. 创建调用邮件发送的控制类

import com.nanshan.willow.mail.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 〈一句话功能简述〉<br> 
 * 〈邮箱控制层〉
 *
 * @author andy
 * @create 2019/3/8
 * @since 1.0.0
 */
@Slf4j
@Controller
public class MailController {

    @Resource
    MailService mailService;


    @RequestMapping("sendmail")
    @ResponseBody
    public String sendMailToUser(){
        String to = "xxxx@126.com";
        String subject = "springboot test mail";
        String content = "hello world";
        mailService.sendSimpleMail(to,subject,content);
        return "success";
    }
}

  1. 创建调用邮件发送的业务方法
/**
 * 〈一句话功能简述〉<br> 
 * 〈邮件业务层〉
 *
 * @author andy
 * @create 2019/3/8
 * @since 1.0.0
 */
public interface MailService {
    public void sendSimpleMail(String to, String subject, String content);
}
  1. 创建调用邮件发送的业务方法
import com.nanshan.willow.mail.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * 〈一句话功能简述〉<br> 
 * 〈邮箱业务处理类〉
 *
 * @author andy
 * @create 2019/3/8
 * @since 1.0.0
 */
@Service
@Slf4j
public class MailServiceImpl implements MailService {

    @Autowired
    private JavaMailSender javaMailSender;


    @Value("${spring.mail.username}")
    private String from;

    @Override
    public void sendSimpleMail(String to, String subject, String content) throws MailException {
        SimpleMailMessage message=getSimpleMailMessage( to,null,  subject,  content);
        javaMailSender.send(message);
    }
  
    private SimpleMailMessage getSimpleMailMessage(String to,String[]  toList, String subject, String content){
        SimpleMailMessage message = new SimpleMailMessage();
        // 邮件发送者
        message.setFrom(from);
        if(StringUtils.isEmpty(to)){
            // 邮件接受者(数组)
            message.setTo(toList);
        }else{
            // 邮件接受者
            message.setTo(to);
        }
        // 主题
        message.setSubject(subject);
        // 内容

        message.setText(content);
        log.info("邮件发送信息实体类"+message);
        return message;
    }

  
}

通过以上步骤,最简单的邮件收发就可以完成,希望大家动手试试。

另外,下面是对发送邮件的一点补充。正常的情况下,邮件发送我们必须包含样式模板以及附件这些内容,下面就举例说明邮件模板附件发送有关实现。

1.增加 thymeleaf依赖

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

2.在在src/resources/templates 下面创建对应模板文件:mailTemp.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>springboot邮件模板</title>
</head>
<body>
	<p th:text="${msg1}"></p>
	<p th:text="${msg2}"></p>
	<p th:text="${msg3}"></p>
</body>
</html>

  1. 在MailServiceImpl中增加有关模板发送的有关业务方法:
	@Resource
    TemplateEngine templateEngine;

	@Override
    public void sendSimpleMailToUsers(String[]  to, String subject, String content) throws MailException {
        MimeMessage mimeMessage = null;
        try {
            mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            // 设置发件人邮箱
            helper.setFrom(from);
            // 设置收件人邮箱
            helper.setTo(to);
            // 设置邮件标题
            helper.setSubject(subject);

            // 添加正文(使用thymeleaf模板)
            Context context = new Context();
            context.setVariable("msg1","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
             context.setVariable("msg2","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
              context.setVariable("msg3","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            String text=templateEngine.process("mailTemp",context);
            helper.setText(text, true);

            //发送图片(根据自己图片所在文件处理)
            helper.addAttachment("image",new File("../img/hello.jpg"));

            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
    

4.在controller内调用该业务方法完成测试。

 	@RequestMapping("sendmailToGroup")
    @ResponseBody
    public String sendmailToGroup(){

        List<String> userList=new ArrayList<String>();
        userList.add("ccccccccc@126.com");
        userList.add("cccccccccccc@163.com");
        userList.add("ffffffffffffffff@qq.com");
        String[] to = new String[userList.size()];
        userList.toArray(to);
        String subject = "大家好,我在用Springboot中的mail组件为大家群发发送消息。";
        String content = "hello world";
        mailService.sendSimpleMailToUsers(to,subject,content);
        return "success";
    }

总之,springboot中采用自动配置的方式为我们开发节省了不少事情,使得开发变得简单。希望大家可以从中获取到一些帮助。
如果有任何疑问,请随时联系(微信:739659553)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值