springboot实现邮件发送的功能

springboot实现邮件发送的功能

1.引入依赖

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

2.在application.properties配置(这里以网易邮箱为例)
usename为你的邮箱
password为你的邮箱的客户端授权密码,这个需要自己去设置的,不是你邮箱的登录密码

spring.mail.host=smtp.163.com
spring.mail.username=xxxxxxx@163.com
spring.mail.password=xxxxxxxx #开启POP3之后设置的客户端授权码
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8

3.相关代码:(这里不仅仅是写测试类,模拟用户从页面发起请求)
①controller

@Controller
public class SendEmailController {

    @Autowired
    private IEmailService emailService;
    /**
     * 发送验证邮箱
     *
     * @param email
     * @return
     */
    @RequestMapping("sendEmail")
    @ResponseBody
    public AjaxResult sendEmail(String email) {
        AjaxResult json = new AjaxResult();
        this.emailService.sendVerifyEmail(email, UserContext.getCurreentUser().getId());
        return json;
    }


}

②service实现类

@Service
public class EmailServiceImpl implements IEmailService{
	@Autowired
	private IUserInfoService userinfoService;
	@Autowired
	private JavaMailSender javaMailSender;
	@Autowired
	private MailVerifyMapper mailVerifyMapper;
	@Value("${spring.mail.host}")
	private String host;
	@Value("${spring.mail.username}")
	private String username;
	@Value("${spring.mail.password}")
	private String password;
	@Override
	public void sendVerifyEmail(String email,Long userId) {
		UserInfo current = this.userinfoService.get(userId);
		if (!current.getIsBindEmail()) {
			// 发送验证邮箱
			// 1,创建一个邮箱验证对象;
			MailVerify mVerify = new MailVerify();
			mVerify.setEmail(email);
			mVerify.setSendTime(new Date());
			mVerify.setUserId(userId);
			// 2,生成一个uuid;
			mVerify.setUuid(UUID.randomUUID().toString());
			// 3,构造邮件内容;
			StringBuilder sb = new StringBuilder(100).append("这是一封验证邮件,请点击<a href='").append("/bindEmail?uuid=").append(mVerify.getUuid()).append("'>这里</a>完成验证,有效期为").append(Consts.EMAIL_VAILED_DAY).append("天");
			// 4,发送邮件;
			//System.out.println(sb);
			try {
				JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
				senderImpl.setHost(host);
				senderImpl.setUsername(username);
				senderImpl.setPassword(password);
				//建立邮件消息,发送简单邮件和html邮件的区别
				MimeMessage mailMessage = senderImpl.createMimeMessage();
				MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,"utf-8");
				//设置收件人,寄件人
				messageHelper.setTo(email);
				messageHelper.setFrom(username);
				messageHelper.setSubject("测试HTML邮件!");
				messageHelper.setText(sb.toString(),true);
				Properties prop= new Properties();
				//将这个参数设为true,让服务器进行认证,认证用户名和 密码是否正确
				prop.put("mail.smtp.auth","true");
				//设置超时时间
				prop.put("mail.smtp.timeout", "25000");
				senderImpl.setJavaMailProperties(prop);
				//发送邮件
				senderImpl.send(mailMessage);
				this.mailVerifyMapper.insert(mVerify);
			} catch (MessagingException e) {
				throw  new RuntimeException("发送邮件失败");
			}
		}
	}
}

js如下:具体页面没有写出

<script type="text/javascript">
			$(function () {
                $("#showBindEmailModal").click(function(){
                    $("#bindEmailModal").modal("show");
                });
                $("#bindEmail").click(function(){
                    $("#bindEmailForm").ajaxSubmit({
                        dataType:"json",
                        success:function (data) {
                            if(data.success){
                                $.messager.confirm("提示","验证邮箱发送成功",function () {
                                    window.location.reload();
                                });
                            }else{
                                $.messager.popup(data.msg);
                            }
                        }
                    });
                });
            })
		</script>

这里为了安全,设置了UUID,通过UUID去数据库查询数据
打印出来的请求是:

这是一封验证邮件,请点击<a href='http://localhost:8080/bindEmail?uuid=a6552eab-da64-4824-aeb4-c632ac3b94fd'>这里</a>完成验证,有效期为5

4.邮箱中收到的效果如下:
在这里插入图片描述
5.当你在点击"这里"时,会跳往一个页面,也就是确认绑定邮箱
在这里插入图片描述
业务逻辑如下:
①controller

/**
     * 绑定邮箱
     */
    @RequestMapping("bindEmail")
    public String bindEmail(String uuid, Model model) {
        try {
            this.userInfoService.bindEmail(uuid);
            model.addAttribute("success", true);
        } catch (Exception e) {
            model.addAttribute("success", false);
            model.addAttribute("msg", e.getMessage());
        }
        return "checkmail_result";
    }

②service实现类

@Override
    public void bindEmail(String uuid) {
        // 根据uuid得到邮箱验证对象
        MailVerify mv = this.mailVerifyMapper.selectByUUID(uuid);
        if (mv != null) {
            UserInfo userinfo = this.get(mv.getUserId());
            if (!userinfo.getIsBindEmail()// 判断1,用户是否绑定邮箱;
                    && DateUtil.getSecondsBetween(mv.getSendTime(), new Date()) <= Consts.EMAIL_VAILED_DAY * 24
                    * 3600) {
                // 判断1,用户是否绑定邮箱;2,在有效期之内
                // 设置邮箱,并设置状态码
                userinfo.setEmail(mv.getEmail());
                userinfo.addState(BitStatesUtils.OP_BIND_EMAIL);
                this.update(userinfo);
                return;
            } else {
                throw new RuntimeException("超过有效期!");
            }
        } else {
            throw new RuntimeException("绑定错误!");
        }
    }

③网页内容

<!-- 网页内容 --> 
	<div class="container"  style="min-height: 343px;">  
		<h1>
			<#if success??>
				您的邮件已经成功激活,请登录系统查看!
			<#else>
				您的邮件激活失败,失败原因是:${msg}!
			</#if>
		</h1>
	</div>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它提供了许多开箱即用的功能,包括邮件发送。下面是使用Spring Boot实现邮件发送的步骤: 1. 添加依赖:在项目的pom.xml文件中添加Spring Boot的邮件依赖,例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 配置邮件信息:在application.properties或application.yml文件中配置邮件服务器的相关信息,例如: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-email-password spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 3. 创建邮件服务类:创建一个邮件服务类,用于发送邮件。可以使用JavaMailSender来发送邮件,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 4. 调用邮件服务类:在需要发送邮件的地方调用邮件服务类的sendEmail方法,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailService emailService; @GetMapping("/sendEmail") public String sendEmail() { emailService.sendEmail("recipient@example.com", "Test Email", "This is a test email."); return "Email sent successfully."; } } ``` 以上就是使用Spring Boot实现邮件发送的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值