资讯专栏INFORMATION COLUMN

SpringBoot集成邮件发送

番茄西红柿 / 3104人阅读

摘要:协议默认为,协议默认为如果设置为如果设置,并且未指定套接字工厂,则启用如果设置为如果设置为扩展如果设置,则指定扩展指定将为连接启用的协议。

 一:简述

  在日常中的工作中难免会遇到程序集成邮件发送功能、接收功能;此篇文章我将使用SpringBoot集成邮件发送功能和接收功能;若对邮件一些基本协议和发送流程不懂的请务必参考我之前写的博客或者浏览网上资料。

邮件基本概念及发送方式】   【JavaMail发送邮件(超详细

二:SpringBoot发送邮件的基本说明

   在我们现在使用的SpringBoot的版本中,底层发送邮件的技术都是使用一个叫 Jakarta Mail 的,它可有实现SMTP、POP、IMAP等基本的邮件发送和接收协议,因为前两篇我都介绍了,这里就不在多说,直接上干货!!

1:基本环境及坐标依赖

  使用SpringBoot脚手架创建一个SpringBoot项目后导入下面邮件发送坐标,或者在脚手架创建中也可有选择

    org.springframework.boot

2:快速上手发送邮件

  在发送邮件前我简单说说JavaMailSenderJavaMailSenderImpl;它们是Spring官方提供的一套邮件功能集成接口及实现,底层调用具体的Jakarta Mail技术;可以说是二次封装;使用SpringBoot提供的接口及实现是后端邮件发送最主流的集成工具;我们在业务里直接注入JavaMailSenderImpl后并调用send方法。其中简单的邮件我们可以通过SimpleMailMessage来发送,对于复杂的带有附件的我们可以借助MimeMessageHelper来构建MimeMessage发送邮件。

spring..host=smtp.163.spring..username=spring..password=xxxxxxxxxxxxxxx
        SimpleMailMessage message = "antladdie@163.com");                   message.setTo("xiaofeng504@qq.com");                    message.setCc("xiaofeng500@qq.com");                    message.setBcc("575814158@qq.com");                     message.setSubject("缴费通知");                          message.setText("您手机已欠费100元,请及时缴费!");         message.setSentDate( Date());

3:集成邮件的基本配置(约定大于配置)

  这里的 Jakarta Mail properties 扩展配置不理解的可以参考 官方文档  ; 不过英文的看着头大,这里我将其翻译了

    要连接的 SMTP 服务器端口,如果 connect() 方法没有明确指定一个。默认为 25    以毫秒为单位的套接字连接超时值。这个超时是由 java.net.    以毫秒为单位的套接字读取超时值。这个超时是由 java.net.    以毫秒为单位的套接字写入超时值。此超时是通过对每个连接使用 java.util.concurrent.    用于 SMTP  命令的电子邮箱地址。这将设置信封返回地址。默认为 msg.getFrom() 或 InternetAddress..smtp.    SMTP HELO 或 EHLO 命令中使用的本地主机名。默认为InetAddress.getLocalHost().getHostName().    如果为     如果为 "LOGIN PLAIN DIGEST-MD5 NTLM"    如果为     如果为     如果为 ,则阻止使用该AUTH DIGEST-    如果为     NTLM 协议特定标志。有关详细信息,请参阅 http:    如果为 ,则阻止使用该AUTHENTICATE XOAUTH2命令。由于 OAuth 2.0”或将“.smtp.auth.    要在         如果设置为 ,并且服务器支持 8BITMIME 扩展,则使用“quoted-    如果设置为     如果设置为 ,则尝试使用 javax.security.    用于 DIGEST-    如果设置为 ,则返回的规范主机名将 InetAddress.    如果设置为 ,则发送 QUIT 命令并立即关闭连接。如果设置为     如果设置为     如果设置为     如果设置为实现该javax.net.    如果设置,则指定实现javax.net.    如果设置为 ,则无法使用指定的套接字工厂类创建套接字将导致使用java.net.    如果设置为 ,则默认使用 SSL 连接并使用 SSL 端口。“smtp”协议默认为 ,“smtps”协议默认为     如果设置为     如果设置,并且未指定套接字工厂,则启用 MailSSLSocketFactory. 如果设置为“*    如果设置为扩展 javax.net.ssl.    如果设置,则指定扩展javax.net.ssl.    指定将为 SSL 连接启用的 SSL 协议。属性值是该javax.net.ssl.SSLSocket.    指定将为 SSL 连接启用的 SSL 密码套件。属性值是该javax.net.ssl.SSLSocket.    如果为 .smtp.starttls.    如果为     指定 HTTP Web 代理服务器的端口号。默认为端口 80    指定 SOCKS5 代理服务器的端口号。仅当代理服务器未使用标准端口号 1080    附加到 1869    如果设置为 (默认值),则坚持来自 NOOP 命令的 250 以处理以这种方式损坏的服务器。通常,当服务器超时连接时,它会发送 421.sun...sun...sun...sun..smtp.
创建邮件会话Session内可配置的properties属性(中文)
spring..host=smtp.163.spring..port=25spring..protocol=spring..username=spring..password=spring..-encoding=UTF-8spring..properties..smtp.from=antladdie@163.spring..properties..smtp.auth=spring..properties..smtp.timeout=60000spring..properties..smtp.connectiontimeout=60000spring..properties..smtp.writetimeout=60000spring..properties..debug=

三:复杂邮件发送 HTML+图片资源+附件

 testMailB()         MimeMessage mimeMessage ==  MimeMessageHelper(mimeMessage, "antladdie@163.com");                   messageHelper.setTo("xiaofeng504@qq.com");                    messageHelper.setCc("xiaofeng500@qq.com");                    messageHelper.setBcc("575814158@qq.com");                     messageHelper.setSubject("缴费通知");                          String rootPath = Objects.requireNonNull(SpringbootJakartamailApplicationTests..getClassLoader().getResource("file"=  FileSystemResource( File(rootPath + "/ab.png"=  FileSystemResource( File(rootPath + "/student.xls"=  FileSystemResource( File(rootPath + "/mu.mp3"=  FileSystemResource( File(rootPath + "/redis.zip"        messageHelper.setText("",         FileSystemResource resPng =  FileSystemResource( File(rootPath + "/b.png""p01"

四:复杂邮件发送使用Thymeleaf模板

  使用模板和不使用模板没太大区别,只是使用模板则将xx.html文件渲染成String类型的字符串文本再引用

    org.thymeleaf
doctype html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <meta name="viewport"          content="width=device-width, user-scalable=no,           initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Documenttitle>head><body><h2 style=color:#f00;>    <span th:text="${message}">span>    <img src=cid:p01 alt= style=width:200px;height:50px;>h2>body>html>
emailTemplate.html模板文件
                 ClassLoaderTemplateResolver resolver =         resolver.setPrefix("/file/"".html"        TemplateEngine engine =         Context context =         context.setVariable("message","欠费通知:你已经欠费100元"         engine.process("emailTemplate"

5:结尾

  讲到这,已经对SpringBoot集成邮件发送功能说完了,若想知道如何接收并解析邮件请参考我上面给出的博客,使用javaMail发送和接收邮件;不过话说回来在大部分公司里使用SMTP、POP3协议发送和接收是完全够用的,不过我上次在项目组负责邮箱的发送使用的是内网的企业邮箱,走的是Exchange协议,这个就和我们之前讲的不一样的,下一篇我将带大家看看如何使用Exchange方法发送邮件。

作者:蚂蚁小哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125685.html

相关文章

  • SpringBoot非官方教程 | 第二十一篇: springboot集成JMS

    摘要:对提供了很好的支持,对其做了起步依赖。构架工程创建一个工程,在其文件加入添加配置在中填写自己的邮箱密码。启用设置附件发送邮件邮件已发送测试已全部通过,没有坑。 springboot对JMS提供了很好的支持,对其做了起步依赖。 构架工程 创建一个springboot工程,在其pom文件加入: org.springframework.boot spring-boot-st...

    roundstones 评论0 收藏0
  • 市长信箱邮件查询服务: SpringBoot集成Docker上Redis服务

    摘要:集成上服务在我的应用中希望能使用一些的特性比如这样的数据结构如果能方便的在开发环境中使用起来就好了如何集成呢这里依然使用和来帮忙通过使用我们就能快速的部署好服务而通过使用我们能快速的把集成进我们的服务并能使用提供的模板方法方便的调用的使用快 SpringBoot集成Docker上Redis服务 在我的应用中, 希望能使用一些redis的特性:比如zset这样的数据结构,如果能方便的在开...

    lanffy 评论0 收藏0
  • SpringBoot 2.X Kotlin系列之JavaMailSender发送邮件

    摘要:在很多服务中我经常需要用到发送邮件功能,所幸的是可以快速使用的框架,只要引入改框架我们可以快速的完成发送邮件功能。引入获取邮件发送服务器配置在国内用的最多的就是邮件和网易邮件,这里会简单讲解获取两家服务商的发送邮件配置。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 在很多服务中我...

    derek_334892 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<