SpringBoot使用FreeMarker模板发送邮件

SpringBoot整合FreeMarker发送邮件 SpringBoot整合FreeMarker发送邮件 1 添加依赖 pom.xml中加入如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>or 阅读详情

SpringBoot +Mail+FreeMarker

通过spirngboot 自带的mail服务及FreeMarker模板引擎,发送邮

  • 添加依赖
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--消除冗余代码使用-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

  • 在application.yml文件中配置Mail信息
spring:
  mail:
    port: 25
    username: ${username}
    password: ${password}
    protocol: smtp
    default-encoding: utf-8
    host: ${host}
  • 编写MailService服务
@Service
public class MailServiceImpl implements MailService {

    //邮件的发送者
    @Value("${spring.mail.username}")
    private String from;

    //注入MailSender
    @Autowired
    private JavaMailSender mailSender;

    //发送邮件的模板引擎
    @Autowired
    private FreeMarkerConfigurer configurer;

    /**
     * @param params       发送邮件的主题对象 object
     * @param title        邮件标题
     * @param templateName 模板名称
     */
    @Override
    public void sendMessageMail(Object params, String title, String templateName) {

        try {

            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from);
            helper.setTo(InternetAddress.parse("xxxxx@163.com"));//发送给谁
            helper.setSubject("【" + title + "-" + LocalDate.now() + " " + LocalTime.now().withNano(0) + "】");//邮件标题

            Map<String, Object> model = new HashMap<>();
            model.put("params", params);
            try {
                Template template = configurer.getConfiguration().getTemplate(templateName);
                try {
                    String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);

                    helper.setText(text, true);
                    mailSender.send(mimeMessage);
                } catch (TemplateException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}
  • 定义发送邮件对象
    发送内容为object,我这里演示一个对象,通过模板渲染方式接收内容
@Data
public class Message {

    private String messageCode;

    private String messageStatus;

    private String cause;

}
  • 在项目templates目录新建个message.ftl文件
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>消息通知</title>
</head>

<style type="text/css">
    table {
        font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
        width: 100%;
        border-collapse: collapse;
    }

    td, th {
        font-size: 1em;
        border: 1px solid #5B4A42;
        padding: 3px 7px 2px 7px;
    }

    th {
        font-size: 1.1em;
        text-align: center;
        padding-top: 5px;
        padding-bottom: 4px;
        background-color: #24A9E1;
        color: #ffffff;
    }
</style>
<body>
<div>
    <h2>邮件消息通知</h2>
    <table id="customers">
        <tr>
            <th>MessageCode</th>
            <th>MessageStatus</th>
            <th>Cause</th>
        </tr>
        <tr>
            <td>${(params.messageCode)!""}</td>
            <td>${(params.messageStatus)!""}</td>
            <td>${(params.cause)!""}</td>
        </tr>
    </table>
</div>
</body>
</html>
  • 测试邮件发送
    新建controller类

@RestController
public class MailController {

    @Autowired
    private MailService mailService;

    @RequestMapping(value = "/sendMessage", method = RequestMethod.GET)
    public void sendMailMessage() {
        Message message = new Message();

        message.setMessageCode("MissingParameter");
        message.setMessageStatus("Failed");
        message.setCause("缺少参数,请确认");

        mailService.sendMessageMail(message, "测试消息通知", "message.ftl");
    }
}

启动服务访问
http://localhost:8080/sendMessage
查看邮箱
这里写图片描述

源码地址: https://gitee.com/wodigeca/springboot-mail

springboot使用freemarker发送模板邮件 springboot使用freemarker发送模板邮件 1、引入mail和freemarker模块依赖 &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starte... 阅读详情

相关推荐

SpringBoot使用记录之发送邮件,Freemarker,Thymeleaf做模板页面

一个Java小白的学习之路 个人博客 youngljx.top 邮件发送 1.前提: 首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务,SMTP是简单邮件传输协议,定义了邮件客户端和SMTP服务器之间,以及SMTP服务器和SMTP服务器之间的通信协议,而POP3是邮局协议,定义了邮件客户端和POP3服务器之间的通信规则,SMTP服务器是用来接受邮件的,POP3服务器是用户用来读取...

YOUNGljx的博客 799

Spring Boot发送邮件四——Freemarker做模板的邮件

前面写了3篇 Spring Boot 发送邮件的博客,详情可查看下边的连接,这篇写 Spring Boot 和前端模板 Freemarker 配合使用发送一封邮件 Spring Boot发送邮件一——最简单的邮件 Spring Boot发送邮件二——带附件和内容有图片的邮件 Spring Boot发送邮件三——Thymeleaf做模板的邮件 Freemarker 做模板发送邮件 1.在pom.xml中加入 Thymeleaf 的依赖 <dependency>

XiaoMing学习分享博文 1043

Java邮件发送基于springboot实现

Java邮件发送基于springboot实现邮件发送相关版本下面是相关代码整理邮件发送接口MailService邮件发送实现代码MailServiceImpl封装的邮件实体EmailMsg邮件模板,.ftl文件最后一点,邮件发送者配置完结 基于springboot实现邮件发送 基于spring-boot-starter-mail实现,普通邮件发送无需额外依赖引入,因我所使用功能涉及模板发送,所以还需要引入spring-boot-starter-freemarker依赖。 相关版本 springboot:2.

小小程序员 2395

SpringBoot项目中集成FreeMarker实现模板发送邮件

最近项目中有个这样的需求:客户升级设备失败的话,需要给客户发送一个模板邮件,参数可以自己定义传入由邮件形式发送给客户。 我们通过SpringBoot自带的mail服务及FreeMarker模板引擎,实现模板发送邮件。 一、pom.xml中添加jar包依赖 <!-- freemarker实现邮件发送 --> <dependency> <groupId>or...

riemann_的博客 3680

【项目实战】Spring Boot整合Freemarker模板引擎实现Email邮件发送功能

微服务项目中,需要集成Freemark,实现定时发送周年祝福邮件给公司雇员

奶爸的编程之路,也就一周冷个三天 1101

SpringBoot中整合Mail实现发送模板邮件

场景 项目搭建专栏: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/column/info/35688 实现最简单的带标题以及文本内容的邮件发送: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/89320985 实现 在上面成功实现发送简单邮件的基础上。 实现发送freemar...

BADAO_LIUMANG_QIZHI的博客 1166

Spring整合Freemarker实现邮件发送服务

Spring整合Fremarker实现邮件发送服务 最近项目中有发送邮件需求,使用Spring邮件服务实现,由于第一次使用,所以自己编写一个测试demo,并做记录,以下为具体配置及代码。 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了

qq_27022157的博客 319

基于PyQt5的ROS移动机器人的人机交互UI界面

每次做实验的时候,手动rosrun,roslaunch太过麻烦,通过ui界面的话,只需要点点按钮就可以啦 ros_car_py包括运动,建图,导航,ui界面的程序全部打包上传,相互依赖关系见ros_car_py包。 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets imp...

工大机器人工作室 7366

Spring boot整合freemarker实现邮件模板的发送

目录: 1、环境配置 2、邮件模板 3、邮件的发送 一、环境配置 邮件协议: 邮件的发送协议:SMTP 邮件的接收协议:POP3 模板选择: 目前主流的模板引擎:thymeleaf和freemarker(手动添加依赖),至于优缺点可以参考:两者比较,本文采用的模板是freemarker。 创建springboot项目,添加web、freemarker和mail的依赖 pom.xml如下 <dependencies> <dependency> <groupId&gt

一个还在上学的程序缘 1471

Kinect V1结构光激光散斑原理及样式

   对 intel realsense F200 和 Kinect V1的coding pattern原理进行调研,知二者都使用light coding的方式,该方法与传统的coded structure light不同:传统编码结构光(空间编码,时间编码)最终使用的是三角测量的原理计算深度信息;light coding通过投射具有高度伪随机性的激光散斑,会随着不同距离变换不同

松间明月 1万+

毕设案例|保安公司智慧管理系统的建设与开发方案

"保安公司智慧管理系统是一款专为保安行业设计的高效信息化解决方案,其核心功能涵盖了从人力资源管理到业务运营的各个方面。系统以Java作为开发语言,结合SpringMVC框架,确保了稳定性和可扩展性,而MySQL数据库则提供了强大的数据存储和处理能力。首先,系统允许用户设置各类保安,如门卫、巡逻员等,实现精细化分类管理。其次,保安信息管理模块包括详细的人事档案、资格证书、培训记录等,便于人员追踪和考核。部门和城市设置方便公司层级管理和异地项目管理。岗位设置与时间安排精确到分钟,确保排班科学合理。

muyu2980的专栏 938

SpringBoot+Freemarker实现模板邮件发送

基础依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!-- 支持发送邮件 --> <dependency&

qq_31856061的博客 789

Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建

本文介绍Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建方法。

无线通信实验室 1万+

java利用模板发送邮件_SpringBoot使用FreeMarker模板发送邮件

本文实例为大家分享了SpringBoot +Mail+FreeMarker发送邮件,供大家参考,具体内容如下通过spirngboot 自带的mail服务及FreeMarker模板引擎,发送邮添加依赖org.springframework.bootspring-boot-starter-freemarkerorg.springframework.bootspring-boot-starter-mai...

weixin_42403124的博客 723

Unity Shader变体优化实战:从内存削减到打包加速

本文深入探讨了Unity项目中Shader变体数量爆炸导致的打包缓慢、内存占用过高及包体臃肿等问题。核心解决方案是通过精准的Shader变体裁剪,即收集项目实际用到的变体形成“白名单”,并利用IPreprocessShaders接口在打包时剔除无用变体。实战表明,该方法能显著提升打包速度并大幅降低运行时内存。

weixin_29300241的博客 217

AI Agent开发第85课-DeepSeek-OCR 安装全指南:从 Transformers 到 vLLM,手把手教你跑通企业级 OCR

本文系统讲解 DeepSeek-OCR 的两种部署方式——基于 Hugging Face Transformers 的标准推理与基于 vLLM 的高性能加速推理。详细说明 CUDA 与 PyTorch 版本匹配、环境验证、依赖安装等关键细节,并提供可直接运行的完整代码示例。无论你是单卡调试还是高并发服务部署,都能在这里找到清晰路径。

打造全国最全的AI Agent开发知识领域的博客 2543

Springboot整合FreeMarker+email+Quartz定时发送一封模板邮件

Springboot整合FreeMarker+email+Quartz定时发送一封模板邮件

weixin_69895162的博客 4977

BevFusion (1): 传感器介绍

激光雷达,也称光学雷达(LIght Detection And Ranging)是激光探测与测距系统的简称,它通过测定传感器发射器与目标物体之间的传播距离,分析目标物体表面的反射能量大小、反射波谱的幅度、频率和相位等信息,从而呈现出目标物精确的三维结构信息。激光雷达是自动驾驶车辆的关键传感器,如下图所示,车辆上方旋转的圆柱体对应就是激光雷达传感器。

@bangbang的博客 1475

Spring Boot基于FreeMarker发送模板邮件(带附件)

spring boot使用freemarker发送模板邮件详细说明(带附件)

嘉禾嘉宁papa 9435

CDMamba安装配置Windows(50系列的显卡)

本人家里的显卡是RTX3050的,运行起来非常缓慢,大家可以参考上一篇文章,以下是用RTX5080配置的CDMamba,里面有一些库没有更新,因此会比较坑爹。就是pytorch已经更新了,搭配的是cuda12.8,但是cdmamba里的mmcv只更新到cuda12.1的版本,当然很多人会说那就向下兼容,但是笔者已经尝试了,会一直提示mmcv的问题。因此,索性直接不用mmcv。

hanfeng5268的博客 687

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

使用 FreeMarker模板 Springboot 发送邮件

四、使用FreeMarker模板 HTML 标签的字符串拼接是一件很棘手的事。因为在你的大脑中解析HTML标签并想象它在渲染时会是什么样子是挺困难的。而将HTML混合在Java代码中又会使得这个问题更加复杂。 因此Spring 给出的解决方案是:使用模板生成 HTML 文本,有多种模板方案可供选择,包括Apache Velocity和freemarker。这里仅介绍 fre...

weixin_30905981的博客 495

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

springboot项目打包jar发布项目,不能发送freemarker模板邮件

问题: springboot项目使用JavaMailSender在开发工具启动项目可以正常发送邮件,包括模板邮件, 但是打包jar部署项目就不可以发送模板邮件。 项目地址:项目代码仓库,Email代码具体位置 出现问题代码:(只是不可以打包jar部署项目发送模板邮件,其他均正常) package com.luck.email; import freemarker....

xhga 1164

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringBoot整合freemarker、email实现邮件发送

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、准备二、使用步骤1.导入依赖2.在ymal配置文件中写入配置3.ftl模板4.发送邮件方法5.结果展示 一、准备 目前国内大部分的邮件服务商都不允许直接使用用户名/密码的方式来在代码中发送邮件,都是要先申请授权码,这里以 QQ 邮箱为例,向大家演示授权码的申请流程:首先我们需要先登录 QQ 邮箱网页版,点击上方的设置按钮: 然后点击账户选项卡,在账户选项卡中找到开启POP3/SMTP选项,点击开启,开启相关功能,开启过程需要

空空 4350
下一篇: 英语四级词汇
if_where
博客等级 码龄15年 2粉丝 3原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值