springBoot 使用邮箱

  1. maven引入jar包
<!--		邮箱验证-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>
  1. 配置文件配置
spring:
  mail:
    default-encoding: utf-8
    host: smtp.qq.com  #使用qq邮箱验证
    username: xxxxxxx@qq.com   #本人邮箱测试
    password: xxxxxxxxxxxxxxxxx#本人邮箱密匙

application.properties 配置

spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.timeout=10000
spring.mail.properties.mail.smtp.connectiontimeout=10000
spring.mail.properties.mail.smtp.writetimeout=10000
  1. 模板配置
    截图如下所示:
    在这里插入图片描述
    其中 标题,用户名,验证码 ,类型都可以自定义。
    包括模板都可以自定义 参考如下
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <meta charset="utf-8" />

</head>
<body>
    <div class="qmbox qm_con_body_content qqmail_webmail_only" id="mailContentContainer" style="">
        <style type="text/css">
            .qmbox body {
                margin: 0;
                padding: 0;
                background: #fff;
                font-family: "Verdana, Arial, Helvetica, sans-serif";
                font-size: 14px;
                line-height: 24px;
            }

            .qmbox div, .qmbox p, .qmbox span, .qmbox img {
                margin: 0;
                padding: 0;
            }

            .qmbox img {
                border: none;
            }

            .qmbox .contaner {
                margin: 0 auto;
            }

            .qmbox .title {
                margin: 0 auto;
                background: url() #CCC repeat-x;
                height: 30px;
                text-align: center;
                font-weight: bold;
                padding-top: 12px;
                font-size: 16px;
            }

            .qmbox .content {
                margin: 4px;
            }

            .qmbox .biaoti {
                padding: 6px;
                color: #000;
            }

            .qmbox .xtop, .qmbox .xbottom {
                display: block;
                font-size: 1px;
            }

            .qmbox .xb1, .qmbox .xb2, .qmbox .xb3, .qmbox .xb4 {
                display: block;
                overflow: hidden;
            }

            .qmbox .xb1, .qmbox .xb2, .qmbox .xb3 {
                height: 1px;
            }

            .qmbox .xb2, .qmbox .xb3, .qmbox .xb4 {
                border-left: 1px solid #BCBCBC;
                border-right: 1px solid #BCBCBC;
            }

            .qmbox .xb1 {
                margin: 0 5px;
                background: #BCBCBC;
            }

            .qmbox .xb2 {
                margin: 0 3px;
                border-width: 0 2px;
            }

            .qmbox .xb3 {
                margin: 0 2px;
            }

            .qmbox .xb4 {
                height: 2px;
                margin: 0 1px;
            }

            .qmbox .xboxcontent {
                display: block;
                border: 0 solid #BCBCBC;
                border-width: 0 1px;
            }

            .qmbox .line {
                margin-top: 6px;
                border-top: 1px dashed #B9B9B9;
                padding: 4px;
            }

            .qmbox .neirong {
                padding: 6px;
                color: #666666;
            }

            .qmbox .foot {
                padding: 6px;
                color: #777;
            }

            .qmbox .font_darkblue {
                color: #006699;
                font-weight: bold;
            }

            .qmbox .font_lightblue {
                color: #008BD1;
                font-weight: bold;
            }

            .qmbox .font_gray {
                color: #888;
                font-size: 12px;
            }
        </style>
        <div class="contaner">
            <div class="title">$(title)</div>
            <div class="content">
                <p class="biaoti"><b>亲爱的用户,你好!</b></p>
                <b class="xtop"><b class="xb1"></b><b class="xb2"></b><b class="xb3"></b><b class="xb4"></b></b>
                <div class="xboxcontent">
                    <div class="neirong">
                        <p><b>请核对你的用户名:</b><span id="userName" class="font_darkblue">$(userName)</span></p>
                        <p><b>$(type)的验证码:</b><span class="font_lightblue"><span id="yzm" data="$(captcha)" onclick="return false;" t="7" style="border-bottom: 1px dashed rgb(204, 204, 204); z-index: 1; position: static;">$(captcha)</span></span><br><span class="font_gray">(请输入该验证码完成$(type),验证码5分钟内有效!)</span></p>
                        <div class="line">如果你未申请$(type)服务,请忽略该邮件。</div>
                    </div>
                </div>
                <b class="xbottom"><b class="xb4"></b><b class="xb3"></b><b class="xb2"></b><b class="xb1"></b></b>
            </div>
        </div>
        <style type="text/css">
            .qmbox style, .qmbox script, .qmbox head, .qmbox link, .qmbox meta {
                display: none !important;
            }
        </style>
    </div>
</body>
</html>
  1. 实现思路:
    由于邮件发送的内容可以解析为html样式,但是如果使用后台拼接的方式进行发送,未免有些不太合适, 我们可以通过文件流的方式解析模板为字符串, 对于一些特定字段进行替换, 如 $(userName) $(title) 进行替换,这样就可以动态发送页面了。

1.1 解析模板为字符串
在一些启动注入类的方法中,如自定义模板配置,shiro 配置中 Bean包含的方法执行 initEmailTemplate(); 方法
/public/email/emailTemplate.html 为自定义模板相对路径

  private void initEmailTemplate() {
        StringBuilder sb = new StringBuilder();
        try {
            String encoding = "UTF-8";
            InputStream resourceAsStream = this.getClass().getResourceAsStream("/public/email/emailTemplate.html");
//          考虑到编码格式
            InputStreamReader read = new InputStreamReader(
                    resourceAsStream, encoding);
            BufferedReader bufferedReader = new BufferedReader(read);
            String lineTxt = null;
            while ((lineTxt = bufferedReader.readLine()) != null) {
                sb.append(lineTxt);
            }
            System.setProperty("emailTemplate", sb.toString());
            System.out.println("注入文件:"+sb.toString());
            resourceAsStream.close();
            read.close();
        } catch (IOException e) {
            System.out.println("读取文件内容出错");
            e.printStackTrace();
        }
    }

获取字符串方法为: System.getProperty("emailTemplate");

1.2 模板参数填补
对于以下自定义参数进行替换,请注意字符不要冲突

/**
 * @author mgy
 * @version 1.0
 * @date 2020/4/20
 * 发送模板
 */
@Component
public class EmailTemplate {
    /**
     * @param title 标题
     * @param userName 用户名
     * @param type 类型 【邮箱验证】
     * @param captcha 【验证码】
     * @return
     */
    public String getHtml(String title, String userName, String type, String captcha) {
        String emailTemplet = System.getProperty("emailTemplate");
        emailTemplet = emailTemplet.replace("$(title)", title);
        emailTemplet = emailTemplet.replace("$(userName)", userName);
        emailTemplet = emailTemplet.replace("$(type)", type);
        emailTemplet = emailTemplet.replace("$(captcha)", captcha);
        return emailTemplet;
    }
}
  1. 异步发送接口
    创建EmailServiceImpl 接口
    注入我们创建的方法和发信人
@Value("${spring.mail.username}")
    private String form;

    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private EmailTemplate emailTemplate;

异步发送方法

    /**
     * @param params 接收人邮箱
     * @param title 标题
     * @param code 验证码
     * @param username 用户名
     */
    @Async
    @Override
    public void sendEmail(String params,String title,String code,String username) {
        MimeMessage message = mailSender.createMimeMessage();
        try{
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(form);
            helper.setTo(params);//邮件接收者
            helper.setSubject(title);//邮件主题
            String email = emailTemplate.getHtml(title, username, "邮箱绑定", code);
            helper.setText(email,true);//邮件内容
            mailSender.send(message);
            logger.debug(params + "发送成功。");
        }catch (MessagingException messagingException){
            logger.error("发送失败!发送人:{}",params);
        }
    }

目前测试163.com, QQ邮箱

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值