springboot 邮件发送 Java

本文介绍如何利用Spring Boot框架搭建邮件功能模块,包括找回密码和激活账户功能。通过整合spring-boot-starter-mail及thymeleaf模板引擎,实现邮件内容动态填充,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发送邮件功能模块在这里记录一下。  这里支持的是  找回密码  和  激活账户

第一步,加入pom。

        <!--pom.xml依赖spring-boot-starter-mail模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <!--这里使用thymeleaf作为模板引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

第二步,写一份邮件模板

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
</table>
<table class="table" cellpadding="0" cellspacing="0">
    <tbody>
    <span th:text="${info}"></span></br>
    <span th:text="${link}"></span>
    </tbody>
</table>
<hr>
<p th:if="${language eq 1}" th:text="青岛XX集团有限公司"></p>
<p th:if="${language eq 2}" th:text="iTechene"></p>
<div th:if="${language eq 1}" th:text="'地址' + ${colon} + '青岛市崂山区松岭路999号'"></div>
<div th:if="${language eq 2}"
     th:text="'Unit' + ${space} + 'A3-A4' + ${comma} + '8' + ${space} + 'Floor' + ${comma} + 'BlockA' + ${comma} + 'International'  + ${space} + 'Innovation' + ${space} + 'Park' + ${comma} + 'No' + ${point} + '1Keyuanweiyi' + ${space} + 'Rd'  + ${comma} + 'Laoshan' + ${space} + 'District' + ${comma} + 'Qingdao' + ${comma} + '00000000000' + ${comma} + 'PRChina'"></div>
<div th:if="${language eq 1}" th:text="'电话' + ${colon} + '0000000000000'"></div>
<div th:if="${language eq 2}" th:text="'telephone' + ${colon} + '00000000000'"></div>
<div th:if="${language eq 1}" th:text="'传真' + ${colon} + '0532-00000000000'"></div>
<div th:if="${language eq 2}" th:text="'hotline' + ${colon} + '0532-00000000000'"></div>

http://www.techen.cn</br>
核心价值观 Core Values</br>
1个中心:以客户为中心 One Focus,Customer Centric</br>
1个精神:奋斗 One Spirit,Work Hard</br>
1个灵魂:创新 One Soul, Innovate</br>
</body>
</html>

第三步,写IMailService

package com.techen.ami.service;

import java.util.Map;

/**
 * @author lihao
 * @date 2020年10月30日  17:29
 * @Modify
 **/
public interface IMailService {

    //该url是前端所开放的账户激活验证界面
//    String ACTIVATION_EMAIL_URL = "http://10.10.84.198:8002/amiues/email/cornActivation";
    String ACTIVATION_EMAIL_URL = "http://localhost:8080/";

    String ACTIVATION_INFO_ZH = "您好, 这是一封激活账户邮件。 请点击下方链接来激活您的账户。";
    String ACTIVATION_INFO_EN = "Hello, this is an account activation email. Please click on the link below to activate your account.";

    String RESET_PWD_INFO_ZH = "您好, 这是一封密码更改验证邮件。请在页面输入下方验证码完成重置密码操作。";
    String RESET_PWD_INFO_EN = "Hello, this is a password change verification email. Please enter the verification code below on the page to complete the reset password operation.";

    String ACTIVATION_SUBJECT_ZH = "激活账户邮件";
    String ACTIVATION_SUBJECT_EN = "Activate account email";

    String RESET_PWD_SUBJECT_ZH = "密码重置";
    String RESET_PWD_SUBJECT_EN = "reset Password";

    boolean sendAtivationEmail(Map<String, Object> paraMap);

    boolean sendVerificationCodeEmail(Map<String, Object> paraMap);

    String getAtivationInfo(int language);

    String getAtivationSubject(int language);

    String getResetPwdSubject(int language);

    String getResetPwdInfo(int language);

    void setUrl(String token);

    String getUrl();
}

第四步,写ServiceImpl实现Service接口。

package com.techen.ami.service.impl;

import com.techen.ami.service.IMailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Map;

/**
 * @author yanshubin
 * @date 2020年10月30日  17:31
 * @Modify
 **/
@Slf4j
@Service
public class MailServiceImpl implements IMailService {
    public MailServiceImpl() {
        context = new Context();
        context.setVariable("colon", ":");
        context.setVariable("comma", ",");
        context.setVariable("space", "  ");
        context.setVariable("point", ".");
    }

    /**
     * Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口,这里直接注入即可使用
     */
    @Autowired
    private JavaMailSender mailSender;

    @Resource
    TemplateEngine templateEngine;


    Context context;
    // application.yml中的username,代表发送人邮箱
    @Value("${spring.mail.username}")
    private String from;
    String url = "";
    int language = 1; // 1--中文   2--英文  默认中文

    //发送激活账户邮件
    @Override
    public boolean sendAtivationEmail(Map<String, Object> paraMap) {

        if (!paraMap.containsKey("email")) {
            return false;
        }
        String to = paraMap.get("email").toString();
        if (!paraMap.containsKey("token")) {
            return false;
        }
        setUrl(paraMap.get("token").toString());
        //获取MimeMessage对象
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper messageHelper;
        try {
            messageHelper = new MimeMessageHelper(message, true);
            //邮件发送人
            messageHelper.setFrom(from);
            //邮件接收人
            messageHelper.setTo(to);
            //邮件主题
            message.setSubject(getAtivationSubject(language));

            context.setVariable("info", getAtivationInfo(language));
            context.setVariable("language", language);
            context.setVariable("link", getUrl());
            String process = templateEngine.process("emailTemplate", context);
            //邮件内容,html格式
            messageHelper.setText(process, true);
            //发送
            mailSender.send(message);
        } catch (MessagingException e) {
            log.error("html email error===", e);
            return false;
        }
        return true;
    }

    //发送重置密码邮件--(发送验证码)
    @Override
    public boolean sendVerificationCodeEmail(Map<String, Object> paraMap) {
        if (!paraMap.containsKey("email")) {
            return false;
        }
        String to = paraMap.get("email").toString();
        //获取MimeMessage对象
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper messageHelper;
        try {
            messageHelper = new MimeMessageHelper(message, true);
            //邮件发送人
            messageHelper.setFrom(from);
            //邮件接收人
            messageHelper.setTo(to);
            //邮件主题
            message.setSubject(getResetPwdSubject(language));

            context.setVariable("info", getResetPwdInfo(language));
            context.setVariable("language", language);
            context.setVariable("link", paraMap.get("code"));
            String process = templateEngine.process("emailTemplate", context);
            //邮件内容,html格式
            messageHelper.setText(process, true);
            //发送
            mailSender.send(message);
        } catch (MessagingException e) {
            log.error("html email error===", e);
            return false;
        }
        return true;
    }

    @Override
    public String getAtivationInfo(int language) {
        if (1 == language) {
            return ACTIVATION_INFO_ZH;
        } else {
            return ACTIVATION_INFO_EN;
        }
    }

    @Override
    public String getAtivationSubject(int language) {
        if (1 == language) {
            return ACTIVATION_SUBJECT_ZH;
        } else {
            return ACTIVATION_SUBJECT_EN;
        }
    }

    @Override
    public String getResetPwdSubject(int language) {
        if (1 == language) {
            return RESET_PWD_SUBJECT_ZH;
        } else {
            return RESET_PWD_SUBJECT_EN;
        }
    }

    @Override
    public String getResetPwdInfo(int language) {
        if (1 == language) {
            return RESET_PWD_INFO_ZH;
        } else {
            return RESET_PWD_INFO_EN;
        }
    }


    @Override
    public void setUrl(String token) {
        url = ACTIVATION_EMAIL_URL + "?token=" + token;
    }

    @Override
    public String getUrl() {
        return url;
    }
}

第五步,根据需要写Controller 层

第六步,application.yum中配置。

  # 邮箱 邮件发送
  mail:
    # 邮箱配置
    host: XXXX.163.com
    # 我的邮箱
    username:  XXXXXXXXXX@163.com
    # 注意这里不是邮箱密码,而是SMTP授权密码 开启POP3/SMTP
    password: XXXXXXXXXXXX
    port: 25
    protocol: XXXX
    default-encoding: utf-8
    verify-email-expire: 120

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值