您的位置 首页 java

spring boot 邮箱验证总结

@ TOC

一、导入必要的依赖

 <dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-mail</artifactId>

</dependency>  

二、连接 rabbit mq

1) 创建一个 docker 容器

docker run -di –name htb_rabbit -e RABBITMQ_DEFAULT_USER=xxx -e RABBITMQ_DEFAULT_PASS=xxx -p 15672:15672 -p 5672:5672 -p 25672:25672 -p

61613:61613 -p 1883:1883 rabbitmq:management

命令解释:上述的命令创建了一个 rabbitmq 容器 -d 后台运行的守护容器 -i 启动容器 –name 容器的名称 -e 设置容器的环境变量 用户名 密码 -p 映射一些端口给rabbit mq 使用

前面是 暴露的外部宿主机的端口,后面是容器内部使用的端口,一般保持一致即可

rabbitmq:management 镜像名称

2 )打开 rabbit mq 的可视化界面

选择 15672 端口 宿主机的IP+ 端口号 输入刚刚配置的用户名和密码, 即可登录

三、构建 java 代码环境

  1. rabbit mq 的配置
 spring: rabbitmq:

port: 5672 username: admin password: admin

host: 192.168.xxx.xxx

mail:

username: 邮箱地址 password: 授权码,可以百度 host: smtp.xxx.com default-encoding: UTF-8 jndi-name: mail/Session  

授权码参考百度

  1. 写一个配置类,用于构建 rabbit mq 的队列和交换器的绑定关系 ( 可以通过操作界面绑定 )
 package com.htb.beidawebspringboot16rabbitmq.config;

import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue;

import org.springframework.context. annotation .Bean;

import org.springframework.context.annotation.Configuration;

/**

@Description:初始化rabbitmq邮箱队列和交换器的配置类

@Author 16221

* @Date 2020/5/8

**/ @Configuration

public class MsgConfig {

/**

创建队列@return

*/ @Bean

public Queue emailQueue() {

return new Queue("emailQueue");

}

/**

创建交换器@return

*/ @Bean

public FanoutExchange fanoutExchange() {

return new FanoutExchange("emailFanoutExchange");

}

/**

创建绑定关系@param queue@param fanoutExchange@return

*/ @Bean

public Binding binding(Queue queue, FanoutExchange fanoutExchange) { return BindingBuilder.bind(queue).to(fanoutExchange);

}

}  
  1. 创建一个 rabbit mq 的监听类,用于监听,队列的变化
 package com.htb.beidawebspringboot16rabbitmq.msg;

import com.htb.beidawebspringboot16rabbitmq.entity.User;

import com.htb.beidawebspringboot16rabbitmq.utils.SendEmailUtil; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component;

import javax.annotation. Resource ;

/**

@Description:

@Author 16221

* @Date 2020/5/8

**/ @Component

public class MsgListener {

@Resource

private SendEmailUtil sendEmailUtil;

@RabbitListener(queues = "emailQueue") public void getSendMsg(User user) {

String content = "<h3>您正在注册天珩的网站</h3>\n" + "\t\t<h3>您注册的id是 " + user.getId() + "</h3>\n" +

"\t\t<h3>您注册的邮箱是 " + user.getEmail() + "</h3>\n" + "\t\t<h3>请点击下方的链接激活邮箱</h3>\n" +

"<a href=\"#34; + user.getId()

+ "\"" + ">激活邮箱</a>";

sendEmailUtil.sendHtmlMail(user.getEmail(), "注册", content);

System.out.println("RabbitListener " + user.toString());

}

}  

@RabbitListener(queues = “emailQueue”)

  1. 这个注解表示监听的是 emailQueue 队列的变化,消费队列里面的消息

本类的逻辑是 监听的是 emailQueue 队列的变化,消费队列里面的消息,在监听到变化时候,说明有新的消息进入,需要消费消息,发送注册邮件

sendEmailUtil.sendHtmlMail(user.getEmail(), “注册”, content);

  1. 发送邮件的工具类,相对固定的代码
 package com.htb.beidawebspringboot16rabbitmq.utils;

import org.springframework.beans. factory .annotat io n.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.SimpleMail message ; import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.messaging.MessagingException; import org.springframework.stereotype.Component;

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

/**

@Description:

@Author 16221

* @Date 2020/5/8

**/ @Component

public class SendEmailUtil {

/**

* 

*/ @Resource

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

@Resource

private JavaMailSender mailSender;

/**

发送支持html格式的邮件

*

@param to

@param  subject 

@param content

*/
public void sendHtmlMail(String to, String subject, String content) {

//使用MimeMessage,MIME协议

MimeMessage message = mailSender.createMimeMessage();

MimeMessageHelper helper;

//MimeMessageHelper帮助我们设置更丰富的内容 try {

helper = new MimeMessageHelper(message, true); helper.setFrom(from);

helper.setTo(to); helper.setSubject(subject);

//true代表支持html

helper.setText(content, true); mailSender.send(message);

System.out.println("发送HTML邮件成功");

} catch (javax.mail.MessagingException e) { System.out.println("发送HTML邮件失败:" + e); e.printStackTrace();

}

}

/**

发送简单的文本格式的邮件

*

@param to

@param subject

@param content

*/
public void sendSimpleMail(String to, String subject, String content) {

SimpleMailMessage message = new SimpleMailMessage();

//收信人message.setTo(to);

//主题message.setSubject(subject);

//内容message.setText(content);

//发信人message.setFrom(from);

mailSender.send(message);

}

/**

发送带附件的邮件

*

@param to

@param subject

@param content

@param filePath

*/
public void sendAttachmentMail(String to, String subject, String content, String filePath) {

MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper;

try {

helper = new MimeMessageHelper(message, true);

//true代表支持多组件,如附件,图片等 helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true);

FileSystemResource file = new FileSystemResource(new File(filePath));

String fileName = file.getFilename();

//添加附件,可多次调用该方法添加多个附件

helper.addAttachment(fileName, file); mailSender.send(message); System.out.println("发送带附件邮件成功");

} catch (javax.mail.MessagingException ex) { ex.printStackTrace();

}

}

/**

发送带图片的邮件

*

@param to

@param subject

@param content

@param rscPath

@param rscId

*/
public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId) {

MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper;

try {

helper = new MimeMessageHelper(message, true); helper.setFrom(from);

helper.setTo(to); helper.setSubject(subject); helper.setText(content, true);

FileSystemResource res = new FileSystemResource(new File(rscPath));

//重复使用添加多个图片helper.addInline(rscId, res); mailSender.send(message); System.out.println("发送带图片邮件成功");

} catch (javax.mail.MessagingException ex) { System.out.println("发送带图片邮件失败 " + ex); ex.printStackTrace();

}

}

}  
   
  1. rabbit mq 的队列发送消息

rabbitTemplate.convertAndSend(“emailFanoutExchange”,””,user); 接收到消息之后,就会异步地去发送邮件,这个是service层的部分的代码

成功之后,yml 配置的邮箱 可以接收到对应的邮件

文章来源:智云一二三科技

文章标题:spring boot 邮箱验证总结

文章地址:https://www.zhihuclub.com/199989.shtml

关于作者: 智云科技

热门文章

网站地图