SpringBoot发送邮件

通过RabbitMQ来向邮箱随机发送一个验证码

1、导入相关依赖;

<!--        邮件发送`-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2、准备一个邮箱服务器,QQ邮箱或者163邮箱单都可以;

开启相关权限:QQ邮箱==》设置==》账户==》开启服务

3、java mail

1)配置文件中配置相关配置;

application.yml

spring:
  mail:
    username: **********@qq.com  #邮箱账号
    password: dfydrlvrnhxyhdia   #密码
    host: smtp.qq.com    

2)写一个邮箱的工具类,全部整合好了,只需要配置邮箱,密码即可;

MailService .java
package com.seecen.redis.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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 javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.io.File;
import java.util.List;

/**
 * 描述:
 *
 * @author bigpeng
 * @create 2019-12-24 17:39
 */
@Service("mailService")
public class MailService {
    @Value("${spring.mail.username}")
    private String from;
    @Autowired
    private JavaMailSender mailSender;

    Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 发送简单邮件
     * @param to
     * @param title
     * @param content
     */
    public void sendSimpleMail(String to,String title,String content){
//邮件消息对象
try { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(from);//发送者 message.setTo(to);//接受者 message.setSubject(title);//主题,标题 message.setText(content);//内容 mailSender.send(message); logger.info("邮件发送成功"); } catch (MailException e) { logger.error("邮件发送失败",e); } } /** * 发送带附件的邮件 * @param to * @param title * @param cotent * @param fileList */ public void sendAttachmentsMail(String to, String title, String cotent, List<File> fileList){ MimeMessage message = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message,true); helper.setFrom(from); helper.setTo(to); helper.setSubject(title); helper.setText(cotent); String fileName = null; for (File file:fileList) { fileName = MimeUtility.encodeText(file.getName(), "GB2312", "B"); helper.addAttachment(fileName, file); } } catch (Exception e) { e.printStackTrace(); } mailSender.send(message); logger.info("邮件发送成功"); } }

3)写一个消费者;

EmailConsumer.java
package com.seecen.redis.rabbitmq;


import com.seecen.redis.service.MailService;
import io.netty.util.internal.StringUtil;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.thymeleaf.util.StringUtils;

import java.util.Map;

@Component
public class EmailConsumer {

    @Autowired
    private MailService mailService;
    /**
     * 监听对应的队列,有消息时,会触发该方法
     * @param message 用来接收消息内容时,需要与发送时的数据类型一样
     */
    @RabbitListener(queues = {"email.verifyCode"},
                     containerFactory = "rabbitListenerContainerFactory")
    public void sendVerifyCodeEmail(Map<String,String> message){
        //todo 发送邮件验证码
        System.out.println("接收到消息:"+message);
        String email=message.get("email");
        if (!StringUtils.isEmpty(email)) {
            mailService.sendSimpleMail(email,
                    "xx网注册验证码",
                    "您的注册验证码为:" + message.get("code"));
        }
    }
}

4)测试结果:

请求地址:localhost:8888/admin/sendCode?email=*******@qq.com

原文地址:https://www.cnblogs.com/xie-qi/p/13363929.html