发布端口号
时间:2022-05-08 03:51 | 分类: 句子大全 | 作者:江南一点雨 | 评论: 次 | 点击: 次
发布端口号
1. 常见的端口号有哪些
原发布者:刘龙飞456
常见的网络协议\端口号一.端口的分类端口的分类根据其参考对象不同有不同划分方法,如果从端口的性质来分,通常可以分为以下三类:(1)公认端口(WellKnownPorts):这类端口也常称之为"常用端口"。这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。例如:80端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。这些端口通常不会像木马这样的黑客程序利用。(2)注册端口(RegisteredPorts):端口号从1025到49151。它们松散地绑定于一些服务。也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义。(3)动态和/或私有端口(Dynamicand/orPrivatePorts):端口号从49152到65535。如果根据所提供的服务方式的不同,端口又可分为"TCP协议端口"和"UDP协议端口"两种。因为计算机之间相互通信一般采用这两种通信协议。上面所介绍的"连接方式"是一种直接与接收方进行的连接,发送信息以后,可以确认信息是否到达,这种方式大多采用TCP协议;另一种是不是直接与接收方进行连接,只管把信息放在网上发出去,而不管信息是否到达,这种方式大多采用UDP协议,IP协议也是一种无连接方式。二.常见的网络协议网际层协议:包括:IP协议、ICMP协议、ARP协议、RARP协议。传输层协议:TCP
2. 网络中常用的端口号有哪些
端口号小于256的一般为常用端口号。其中常用的保留TCP端口号有HTTP 80、FTP 20/21、Telnet 23、SMTP 25、DNS 53等;常用的保留UDP端口号有DNS 53、BootP 67(server)/ 68(client)、TFTP 69、SNMP 161等。
TCP与UDP段结构中端口地址都是16比特,可以有在0-65535范围内的端口号。任何TCP/IP实现所提供的服务都用1-1023之间的端口号,是由ICANN来管理的。端口号从1024-49151是被注册的端口号,被IANA指定为特殊服务使用。从49152-65535是动态或私有端口号。
扩展资料:
各个端口及端口号的实际用途
1、1系端口
POP3服务器开放102端口,用于接收邮件,客户端访问服务器端的邮件服务;NEWS新闻组传输协议,承载USENET通信。这个端口的连接通常是人们在寻找USENET服务器;137、138是UDP端口,当通过网上邻居传输文件时用这个端口。
2、2系端口
FTP服务器开放的21端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录;PcAnywhere建立的TCP和22端口的连接可能是为了寻找ssh;扫描23端口是为了找到机器运行的操作系统。
3、3系端口
轻型目录访问协议和NetMeeting Internet Locator Server共用389端口。
4、4系端口
网页浏览443端口,能提供加密和通过安全端口传输的另一种HTTP;木马HACKERS PARADISE开放456端口。
参考资料来源:百度百科-端口号
参考资料来源:百度百科-网络端口
3. 服务器端口号是什么
原发布者:欣雅网络科技
篇一:服务器端口数最大可以有65535个端口:端口相关知识(史上最全) 端口相关知识学习笔记 本周主要精力是放在挂接上,所以知识矩阵的学习回归到根本上,所以这周发的学习笔记是关于计算机端口的相关介绍。 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入。计算机的"大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口、并口、输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软件端口,在本文中所介绍的都是指"软件端口",但为了说明方便,仍统称为"端口"。 一、端口简介 随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,Tcp/Ip协议作为网络通信的标准协议就解决了这个通信难题。Tcp/Ip协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在Tcp/Ip协议中引入了一种称之为"socket(套接字)"应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有socket接口的计算机进行通信。端口在计算机编程上也就是
4. 求所有端口的端口号及作用
端口:0
服务:Reserved
说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。
端口:1
服务:tcpmux
说明:这显示有人在寻找SGI Irix机器。Irix是实现tcpmux的主要提供者,默认情况下tcpmux在这种系统中被打开。Irix机器在发布是含有几个默认的无密码的帐户,如:IP、GUEST UUCP、NUUCP、DEMOS 、TUTOR、DIAG、OUTOFBOX等。许多管理员在安装后忘记删除这些帐户。因此HACKER在INTERNET上搜索tcpmux并利用这些帐户。
端口:7
服务:Echo
说明:能看到许多人搜索Fraggle放大器时,发送到X.X.X.0和X.X.X.255的信息。
端口:19
服务:Character Generator
说明:这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时会发送含有垃圾字符的数据流直到连接关闭。HACKER利用IP欺骗可以发动DoS攻击。伪造两个chargen服务器之间的UDP包。同样Fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。
端口:21
服务:FTP
说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口。
kact
5. 怎么知道自己的映射公网端口号
端口的类型及用途有很多,所指的映射公网端口号就是指把服务器上的端口号发布在公网里面,即从服务器上取出应用资源映射到公网里面;通常这类端口是负责数据发送及传递之用的!
以下是映射端口的广义解释(已纠正):
端口映射就是静态PAT(端口地址转换)
把内网服务器某个端口号固定发布在公网IP里
把A的1端口 映射到B的 2端口上
当有机器访问B的2端口是 就直接跳转到A的1端口
不知道 这样说对不 一般端口映射是在陆游器上或防火墙上做
6. 常用的网络端口号有哪几个
因特网上最流行的协议是TCP/IP协议,需要说明的是,TCP/IP协议在网络层是无连接的(数据包只管往网上发,如何传输和到达以及是否到达由网络设备来管理)。而我们一旦谈“端口”,就已经到了传输层。协议里面低于1024的端口都有确切的定义,它们对应着因特网上常见的一些服务。这些常见的服务可以划分为使用TCP端口(面向连接如打电话)和使用UDP端口(无连接如写信)两种。
使用TCP端口常见的有:
ftp:定义了文件传输协议,使用21端口。常说某某主机开了 ftp服务便是文件传输服务。下载文件,上传主页,都要用到ftp服务。
telnet:你上BBS吗?以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。其实Telnet的真正意思是远程登陆:用户可以以自己的身份远程连接到主机上。
smtp:定义了简单邮件传送协议。现在很多邮件服务器都用的是这个协议,用于发送邮件。服务器开放的是25端口。
http:这可是大家用得最多的协议了——超文本传送协议。上网浏览网页就需要用到它,那么提供网页资源的主机就得打开其80端口以提供服务。我们常说“提供www服务”、“Web服务器”就是这个意思。
pop3:和smtp对应,pop3用于接收邮件。通常情况下,pop3协议所用的是110端口。在263等免费邮箱中,几乎都有pop3收信功能。也就是说,只要你有相应的使用pop3协议的程序(例如Foxmail或Outlook),不需要从Web方式登陆进邮箱界面,即可以收信。
使用UDP端口常见的有:
DNS:域名解析服务。因特网上的每一台计算机都有一个网络地址与之对应,这个地址就是我们常说的IP地址,它以纯数字的形式表示。然而这却不便记忆,于是出现了域名。访问主机的时候只需要知道域名,域名和IP地址之间的变换由DNS服务器来完成。DNS用的是53端口。
snmp:简单网络管理协议,使用161端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
聊天软件QQ:QQ的程序既接受服务,又提供服务,这样两个聊天的人才是平等的。QQ用的是无连接的协议,其服务器使用8000端口,侦听是否有信息到来;客户端使用4000端口,向外发送信息。如果上述两个端口正在使用(有很多人同时和几个好友聊天),就顺序往上加。
Spring Boot 发送邮件,端口号大有玄机
@
1. 什么是 SMTP2. SMTP Port2.1 252.2 5872.3 4652.4 小结3. 号外3.1 邮件基础3.2 准备工作3.3 项目创建Spring Boot 发送邮件,松哥之前专门写过文章,这里就不啰嗦了。还不懂 Spring Boot 如何发送邮件的小伙伴,翻到本文后半部分,有介绍。
今天想和大家聊一下 SMTP 服务器的端口问题,这个也是一个小伙伴提的问题,SMTP 服务器有众多端口:25、465、587 各自间有什么区别?可以随意使用吗?希望今天这篇文章能给你答案。
1. 什么是 SMTP
SMTP 代表简单邮件传输协议,简而言之,它是通过 Internet 发送电子邮件的过程。计算机端口是个人计算机连接到网络并完成数据传输的方式。SMTP 端口是两者的组合:设计用于通过网络向其收件人发送电子邮件的端口。
下图展示了 SMTP 协议在邮件发送过程的作用:
当然,就像有多个计算机端口一样,可以使用的 SMTP 端口也有很多。
2. SMTP Port
2.1 25
1982 年,南加州大学向 Internet 工程任务组 (IETF) 提交了一份提案,即 Request For Comments (RFC) 821,将端口 25 建立为 Internet 电子邮件的默认传输通道。40 年过去了,如今我们依然可以使用 25 这个端口在两个邮件服务器之间传输邮件。
不过最初的设计没有考虑安全问题,在 1998 年 12 月,R. Gellens 和 J. Klensin 提交了 RFC2476,在这个规范中,RFC 提议将传统的消息提交和消息中继概念分开,RFC 定义消息提交应通过端口 587 进行(即我们通过邮件客户端等工具提交邮件的时候,应该使用 587 端口),以确保新的策略和安全要求不会干扰消息中继端口 25 上的传统中继流量。
这么一拆分,端口 25 就主要用于 SMTP 中继,也就是将邮件从一个电子邮件服务器传输到另一个电子邮件服务器。
在大多数情况下,SMTP 电子邮件客户端(Foxmail、Microsoft Outlook、Mail、Thunderbird 等)不应使用 25 端口,以遏制垃圾邮件的数量,所以这个 25 端口和我们个人使用的关系就不大。
2.2 587
这是默认的邮件提交端口,当用户提交一封电子邮件到邮件服务器时,可以使用该端口,我们自己通过 Java 代码发送邮件,也可以使用该端口。
端口 587 与 TLS 加密相结合,可确保安全提交电子邮件并遵循 IETF 制定的指导方针。
2.3 465
那按理说我们发送邮件的时候就该使用 587 端口呀,465 又是干嘛的?
IETF 从未将端口 465 发布为官方 SMTP 传输或提交端口,然而维护大部分核心互联网基础设施的 IANA 为 SMTPS 分配了端口 465。目的是为 SMTP 建立一个端口,以便使用安全套接字层 (SSL) 进行操作,这样使得邮件发送更加安全。
所以 465 和 587 其实都是为了邮件安全,但是两者的思路不一样,465 是 SSL,587 则是 TLS,SSL 和 TLS 有啥区别呢?这个就说来话长了,简单一句话就是:TLS(传输层安全)是更为安全的升级版 SSL,TLS 是 SSL 标准化后的产物。
按理说 465 应该被撤销,大家都用 587,但是由于 465 曾经被 IANA 认定为有效,因此可能存在仅能够使用此端口连接的遗留系统,所以该端口并没有被废弃,也可以使用。
2.4 小结
好啦,这就是这几个端口的区别。一般来说,我们用 Spring Boot 发送邮件的时候,465 和 587 都能用,但是不建议使用 25。另外在使用 465 或者 587 的时候,有的个别邮箱如 139 邮箱需要配置如下属性:
spring.mail.properties.mail.smtp.ssl.enable=true
3. 号外
可能还有小伙伴不懂 Spring Boot 邮件发送,再来回顾下。
邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,使用 JavaSE 代码发送邮件,步骤还是挺繁琐的,Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送变得非常容易,接下来我们就来一探究竟!看看使用 Spring Boot 发送邮件的 5 中姿势。
3.1 邮件基础
我们经常会听到各种各样的邮件协议,比如 SMTP、POP3、IMAP ,那么这些协议有什么作用,有什么区别?我们先来讨论一下这个问题。
SMTP 是一个基于 TCP/IP 的应用层协议,江湖地位有点类似于 HTTP,SMTP 服务器默认监听的端口号为 25 。看到这里,小伙伴们可能会想到既然 SMTP 协议是基于 TCP/IP 的应用层协议,那么我是不是也可以通过 Socket 发送一封邮件呢?回答是肯定的。
生活中我们投递一封邮件要经过如下几个步骤:
深圳的小王先将邮件投递到深圳的邮局深圳的邮局将邮件运送到上海的邮局上海的小张来邮局取邮件这是一个缩减版的生活中邮件发送过程。这三个步骤可以分别对应我们的邮件发送过程,假设从 aaa@qq.com 发送邮件到 111@163.com :
aaa@qq.com 先将邮件投递到腾讯的邮件服务器腾讯的邮件服务器将我们的邮件投递到网易的邮件服务器111@163.com 登录网易的邮件服务器查看邮件邮件投递大致就是这个过程,这个过程就涉及到了多个协议,我们来分别看一下。
SMTP 协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。
也就是说 aaa@qq.com 用户先将邮件投递到腾讯的 SMTP 服务器这个过程就使用了 SMTP 协议,然后腾讯的 SMTP 服务器将邮件投递到网易的 SMTP 服务器这个过程也依然使用了 SMTP 协议,SMTP 服务器就是用来收邮件。
而 POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则,那么该协议在什么场景下会用到呢?当邮件到达网易的 SMTP 服务器之后, 111@163.com 用户需要登录服务器查看邮件,这个时候就该协议就用上了:邮件服务商都会为每一个用户提供专门的邮件存储空间,SMTP 服务器收到邮件之后,就将邮件保存到相应用户的邮件存储空间中,如果用户要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。
最后,可能也有小伙伴们听说过 IMAP 协议,这个协议是对 POP3 协议的扩展,功能更强,作用类似,这里不再赘述。
3.2 准备工作
目前国内大部分的邮件服务商都不允许直接使用用户名/密码的方式来在代码中发送邮件,都是要先申请授权码,这里以 QQ 邮箱为例,向大家演示授权码的申请流程:首先我们需要先登录 QQ 邮箱网页版,点击上方的设置按钮:
然后点击账户选项卡:
在账户选项卡中找到开启POP3/SMTP选项,如下:
点击开启,开启相关功能,开启过程需要手机号码验证,按照步骤操作即可,不赘述。开启成功之后,即可获取一个授权码,将该号码保存好,一会使用。
3.3 项目创建
接下来,我们就可以创建项目了,Spring Boot 中,对于邮件发送提供了自动配置类,开发者只需要加入相关依赖,然后配置一下邮箱的基本信息,就可以发送邮件了。
首先创建一个 Spring Boot 项目,引入邮件发送依赖:创建完成后,项目依赖如下:
<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>
配置邮箱基本信息项目创建成功后,接下来在 application.properties 中配置邮箱的基本信息:
spring.mail.host=smtp.qq.comspring.mail.port=587spring.mail.username=1510161612@qq.comspring.mail.password=ubknfzhjkhrbbabespring.mail.default-encoding=UTF-8spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactoryspring.mail.properties.mail.debug=true
配置含义分别如下:
配置 SMTP 服务器地址SMTP 服务器的端口配置邮箱用户名配置密码,注意,不是真正的密码,而是刚刚申请到的授权码默认的邮件编码配饰 SSL 加密工厂表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误如果不知道 smtp 服务器的端口或者地址的的话,可以参考 腾讯的邮箱文档
https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=371做完这些之后,Spring Boot 就会自动帮我们配置好邮件发送类,相关的配置在 org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration 类中,部分源码如下:
@Configuration@ConditionalOnClass({ MimeMessage.class, MimeType.class, MailSender.class })@ConditionalOnMissingBean(MailSender.class)@Conditional(MailSenderCondition.class)@EnableConfigurationProperties(MailProperties.class)@Import({ MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class })public class MailSenderAutoConfiguration {}
从这段代码中,可以看到,导入了另外一个配置 MailSenderPropertiesConfiguration 类,这个类中,提供了邮件发送相关的工具类:
@Configuration@ConditionalOnProperty(prefix = "spring.mail", name = "host")class MailSenderPropertiesConfiguration { private final MailProperties properties; MailSenderPropertiesConfiguration(MailProperties properties) { this.properties = properties; } @Bean @ConditionalOnMissingBean public JavaMailSenderImpl mailSender() { JavaMailSenderImpl sender = new JavaMailSenderImpl(); applyProperties(sender); return sender; }}
可以看到,这里创建了一个 JavaMailSenderImpl 的实例, JavaMailSenderImpl 是 JavaMailSender 的一个实现,我们将使用 JavaMailSenderImpl 来完成邮件的发送工作。
做完如上两步,邮件发送的准备工作就算是完成了,接下来就可以直接发送邮件了。
具体的发送,有 5 种不同的方式,我们一个一个来看。
3.3.1 发送简单邮件
简单邮件就是指邮件内容是一个普通的文本文档:
@AutowiredJavaMailSender javaMailSender;@Testpublic void sendSimpleMail() { SimpleMailMessage message = new SimpleMailMessage(); message.setSubject("这是一封测试邮件"); message.setFrom("1510161612@qq.com"); message.setTo("25xxxxx755@qq.com"); message.setCc("37xxxxx37@qq.com"); message.setBcc("14xxxxx098@qq.com"); message.setSentDate(new Date()); message.setText("这是测试邮件的正文"); javaMailSender.send(message);}
从上往下,代码含义分别如下:
构建一个邮件对象设置邮件主题设置邮件发送者设置邮件接收者,可以有多个接收者设置邮件抄送人,可以有多个抄送人设置隐秘抄送人,可以有多个设置邮件发送日期设置邮件的正文发送邮件最后执行该方法,就可以实现邮件的发送,发送效果图如下:
3.3.2 发送带附件的邮件
邮件的附件可以是图片,也可以是普通文件,都是支持的。
@Testpublic void sendAttachFileMail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); helper.setSubject("这是一封测试邮件"); helper.setFrom("1510161612@qq.com"); helper.setTo("25xxxxx755@qq.com"); helper.setCc("37xxxxx37@qq.com"); helper.setBcc("14xxxxx098@qq.com"); helper.setSentDate(new Date()); helper.setText("这是测试邮件的正文"); helper.addAttachment("javaboy.jpg",new File("C:\\Users\\sang\\Downloads\\javaboy.png")); javaMailSender.send(mimeMessage);}
注意这里在构建邮件对象上和前文有所差异,这里是通过 javaMailSender 来获取一个复杂邮件对象,然后再利用 MimeMessageHelper 对邮件进行配置,MimeMessageHelper 是一个邮件配置的辅助工具类,创建时候的 true 表示构建一个 multipart message 类型的邮件,有了 MimeMessageHelper 之后,我们针对邮件的配置都是由 MimeMessageHelper 来代劳。
最后通过 addAttachment 方法来添加一个附件。
执行该方法,邮件发送效果图如下:
3.3.3 发送带图片资源的邮件
图片资源和附件有什么区别呢?图片资源是放在邮件正文中的,即一打开邮件,就能看到图片。但是一般来说,不建议使用这种方式,一些公司会对邮件内容的大小有限制(因为这种方式是将图片一起发送的)。
@Testpublic void sendImgResMail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("这是一封测试邮件"); helper.setFrom("1510161612@qq.com"); helper.setTo("25xxxxx755@qq.com"); helper.setCc("37xxxxx37@qq.com"); helper.setBcc("14xxxxx098@qq.com"); helper.setSentDate(new Date()); helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>",true); helper.addInline("p01",new FileSystemResource(new File("C:\\Users\\sang\\Downloads\\javaboy.png"))); helper.addInline("p02",new FileSystemResource(new File("C:\\Users\\sang\\Downloads\\javaboy2.png"))); javaMailSender.send(mimeMessage);}
这里的邮件 text 是一个 HTML 文本,里边涉及到的图片资源先用一个占位符占着,setText 方法的第二个参数 true 表示第一个参数是一个 HTML 文本。
setText 之后,再通过 addInline 方法来添加图片资源。
最后执行该方法,发送邮件,效果如下:
在公司实际开发中,第一种和第三种都不是使用最多的邮件发送方案。因为正常来说,邮件的内容都是比较的丰富的,所以大部分邮件都是通过 HTML 来呈现的,如果直接拼接 HTML 字符串,这样以后不好维护,为了解决这个问题,一般邮件发送,都会有相应的邮件模板。最具代表性的两个模板就是 Freemarker 模板和 Thyemeleaf 模板了。
3.3.4 使用 Freemarker 作邮件模板
首先需要引入 Freemarker 依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>
然后在 resources/templates 目录下创建一个 mail.ftl 作为邮件发送模板:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</p><table border="1"> <tr> <td>姓名</td> <td>${username}</td> </tr> <tr> <td>工号</td> <td>${num}</td> </tr> <tr> <td>薪水</td> <td>${salary}</td> </tr></table><div style="color: #ff1a0e">一起努力创造辉煌</div></body></html>
接下来,将邮件模板渲染成 HTML ,然后发送即可。
@Testpublic void sendFreemarkerMail() throws MessagingException, IOException, TemplateException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("这是一封测试邮件"); helper.setFrom("1510161612@qq.com"); helper.setTo("25xxxxx755@qq.com"); helper.setCc("37xxxxx37@qq.com"); helper.setBcc("14xxxxx098@qq.com"); helper.setSentDate(new Date()); //构建 Freemarker 的基本配置 Configuration configuration = new Configuration(Configuration.VERSION_2_3_0); // 配置模板位置 ClassLoader loader = MailApplication.class.getClassLoader(); configuration.setClassLoaderForTemplateLoading(loader, "templates"); //加载模板 Template template = configuration.getTemplate("mail.ftl"); User user = new User(); user.setUsername("javaboy"); user.setNum(1); user.setSalary((double) 99999); StringWriter out = new StringWriter(); //模板渲染,渲染的结果将被保存到 out 中 ,将out 中的 html 字符串发送即可 template.process(user, out); helper.setText(out.toString(),true); javaMailSender.send(mimeMessage);}
需要注意的是,虽然引入了 Freemarker 的自动化配置,但是我们在这里是直接 new Configuration 来重新配置 Freemarker 的,所以 Freemarker 默认的配置这里不生效,因此,在填写模板位置时,值为 templates 。
调用该方法,发送邮件,效果图如下:
3.3.5 使用 Thymeleaf 作邮件模板
推荐在 Spring Boot 中使用 Thymeleaf 来构建邮件模板。因为 Thymeleaf 的自动化配置提供了一个 TemplateEngine,通过 TemplateEngine 可以方便的将 Thymeleaf 模板渲染为 HTML ,同时,Thymeleaf 的自动化配置在这里是继续有效的 。
首先,引入 Thymeleaf 依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
然后,创建 Thymeleaf 邮件模板:
<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"> <title>Title</title></head><body><p>hello 欢迎加入 xxx 大家庭,您的入职信息如下:</p><table border="1"> <tr> <td>姓名</td> <td th:text="${username}"></td> </tr> <tr> <td>工号</td> <td th:text="${num}"></td> </tr> <tr> <td>薪水</td> <td th:text="${salary}"></td> </tr></table><div style="color: #ff1a0e">一起努力创造辉煌</div></body></html>
接下来发送邮件:
@AutowiredTemplateEngine templateEngine;@Testpublic void sendThymeleafMail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("这是一封测试邮件"); helper.setFrom("1510161612@qq.com"); helper.setTo("25xxxxx755@qq.com"); helper.setCc("37xxxxx37@qq.com"); helper.setBcc("14xxxxx098@qq.com"); helper.setSentDate(new Date()); Context context = new Context(); context.setVariable("username", "javaboy"); context.setVariable("num","000001"); context.setVariable("salary", "99999"); String process = templateEngine.process("mail.html", context); helper.setText(process,true); javaMailSender.send(mimeMessage);}
调用该方法,发送邮件,效果图如下:
好了,这就是我们今天说的 5 种邮件发送姿势,不知道你掌握了没有呢?
本文案例已经上传到 GitHub:https://github.com/lenve/javaboy-code-samples。
有问题欢迎留言讨论。
参考资料:
https://www.mailgun.com/blog/which-smtp-port-understanding-ports-25-465-587