快速搭建专属域名邮箱服务,简单整合邮箱消息推送功能至 Spring Boot 应用程序

grtsinry43
1/2/2025(更新于 1/28/2025
295 views
预计阅读时长 15 分钟

AI Summary

Powered By DeepSeek-R1
|

作为即时通信的重要方式,邮件在互联网互动中起到举足轻重的作用,而搭建邮件推送服务不仅可以做到实时的消息交流,更能拉近网站与用户的距离,增加用户粘性,本文将介绍获取域名邮箱,启用 smtp,集成后端,实现推送的全过程,带你让网站“活起来”。

搭建域名邮箱服务

感谢 @miaoer

@Innei 大佬提供的快捷解决方案,节省折腾 Postfix 和 Dovecot 的精力,不过后续也会更新服务器手动搭建邮件首发服务的详细步骤(等期末之后有精力写详细文档,步骤还是挺复杂的)

这里我们选择 Lark(飞书国际版,国内版的操作类似,只是多了实名步骤)提供的邮箱服务

获取邮箱

我们可以使用邮箱或者 Google 帐号注册并创建企业(个人就是 1-50 人企业选项),注册完成后,我们需要为当前登录帐号分配邮箱:

进入 企业管理页面

,点击上方产品设置,找到邮箱,在域名管理中即可为自己的邮箱指定域。

邮箱管理

添加自定义地址

按照要求填写并前往对应的 DNS 提供商管理面板添加解析记录,我们便成功获取到了域名邮箱。

设置DNS记录

随后我们返回企业管理——组织架构——成员与部门,为自己的登录账户添加企业邮箱,由此便可以通过网页直接收发邮件

设置 smtp

依然是管理面板——产品设置——邮箱,这次我们找到左面的地址管理——公共邮箱,我们便可以创建支持 smtp 的公共推送地址

获取SMTP

整合至后端程序

条件具备,回到主线。

整合依赖

我们这里使用的是 Spring 提供的 spring-boot-starter-mail

,在 pom.xml 中添加以下依赖:

xml
1<!--邮箱服务-->
2        <dependency>
3            <groupId>org.springframework.boot</groupId>
4            <artifactId>spring-boot-starter-mail</artifactId>
5            <version>3.4.1</version>
6        </dependency>

随后在 application.xml 中添加好对应的配置:

xml
1spring:
2  mail:
3    host: smtp.larksuite.com
4    port: 587
5    username: name@domain.com
6    password: your_password
7    properties:
8      mail.smtp.auth: true
9      mail.smtp.starttls.enable: true
10      mail.smtp.starttls.required: true

创建服务

我们先以最小可行性思想来完成这个实验,先创建基础的 EmailService.java

java
1package com.grtsinry43.grtblog.service;
2
3import org.springframework.mail.SimpleMailMessage;
4import org.springframework.mail.javamail.JavaMailSender;
5import org.springframework.stereotype.Service;
6
7/**
8 * @author grtsinry43
9 * @date 2025/1/1 23:04
10 * @description 热爱可抵岁月漫长

额,就这么简单,是不是很 ruozhi

邮件模板

当然,我们给用户展示的不可能是简单的一点点文字而已吧,所以我们需要自定义邮件的样式,由于其支持使用 html,那我们便可以利用模板引擎 thymeleaf 来快速创建模板,添加如下依赖:

xml
1<!--模板支持-->
2        <dependency>
3            <groupId>org.springframework.boot</groupId>
4            <artifactId>spring-boot-starter-thymeleaf</artifactId>
5        </dependency>

我们在 src/main/resources/templates 中新建 emailTemplate.html,这样我们便可以使用模板语法将内容填充进我们的邮件啦,利用 org.thymeleaf.context.Context;,也就是创建上下文,由模板引擎提供,在 html 生成时消费,语法大概是 th:text="${type} 这种,你也可以参考下我的:

html
1<!DOCTYPE html>
2<html lang="en">
3    <head>
4        <meta charset="UTF-8">
5        <meta name="viewport" content="width=device-width, initial-scale=1.0">
6        <title>Comment Reply Notification</title>
7        <style>
8            /*太多了,这里省略了*/
9        </style>
10    </head>

这里我选择在发送邮件的方法中添加一个HashMap作为参数,传递所需的上下文,也就是这样:

java
1package com.grtsinry43.grtblog.service;
2
3import jakarta.mail.MessagingException;
4import jakarta.mail.internet.MimeMessage;
5import org.springframework.mail.SimpleMailMessage;
6import org.springframework.mail.javamail.JavaMailSender;
7import org.springframework.mail.javamail.MimeMessageHelper;
8import org.springframework.scheduling.annotation.Async;
9import org.springframework.stereotype.Service;
10import org.thymeleaf.TemplateEngine;

Tip!这里还有一个小问题,邮件发送是花费时间很长的时间,如果同步进行会严重阻塞业务,这里采用异步模式,你也可以配合日志记录来追溯所有的邮件发送记录

结果

最后的效果大约是这样的,你可以在任意需要的场景触发,或是自定义邮件的内容,任你喜欢!

最后效果

COPYRIGHT
作者grtsinry43
版权年份© 2025
许可协议

快速搭建专属域名邮箱服务,简单整合邮箱消息推送功能至 Spring Boot 应用程序》采用知识共享署名 4.0 国际许可协议

转载请注明出处并遵循 CC BY 许可协议条款

相关推荐

使用 BeautifulSoup 配合请求库实现简单的爬虫程序

使用 BeautifulSoup 配合请求库实现简单的爬虫程序

事情起源于课内的课程实验作业...因为要求要用爬虫,~~不必说课内讲的一言难尽,更不必说就算讲了我也...

grtsinry43
1/7/2025
170
0
1
使用 pf4j-spring 实现插件注入和 api 接口动态注册 | 插件系统构建(上)

使用 pf4j-spring 实现插件注入和 api 接口动态注册 | 插件系统构建(上)

哪个男孩不想拥有一个自己的插件系统?(x)话说回来,这个我已经计划好久了,不过一直在学其他的东西,刚...

grtsinry43
1/26/2025
511
0
5

动手部署 Grtblog 前后端,即刻拥有自己的博客网站

开学了比较忙,没想到一下子拖了这么久,有好多小伙伴评论和 b 站私信评论催我,赶快我抽时间弄了下部署...

grtsinry43
2/19/2025
1883
4
6

学习分享|跨域解决、安卓开发探索、油猴脚本探索

最近学习的一些内容,包括跨域问题及其解决方案,安卓开发的简单探索,OpenAI的api做了个小插...

grtsinry43
6/10/2024
105
2
2
用一个月的时间写一个自己的博客系统——Grtblog的技术介绍

用一个月的时间写一个自己的博客系统——Grtblog的技术介绍

终于,历时一个多月的开发 ~~bug~~ 和测试,这个目前问题很多很不成熟很难用的系统终于上线了.....

grtsinry43
12/14/2024
1022
9
9
COMMENT 7280575485325742080

发表评论

来这里畅所欲言吧!
支持 Markdown 语法 0 / 3000

网站运行时间

0
0
0
0

在风雨飘摇之中

感谢陪伴与支持

愿我们不负热爱,继续前行