spring email 发送功能

news/2024/11/15 10:06:03/文章来源:https://www.cnblogs.com/northeastTycoon/p/18308593
邮件通知是现代应用中常见的一种通信方式,特别是在需要及时反馈、告警或重要事件通知的场景下。Spring Boot提供了简单而强大的邮件发送功能,本文将通过pring Boot中使用JavaMailSender 接口实现邮件发送。

使用场景说明

注册验证:在用户注册、商户注册时,通过邮件发送验证码进行身份确认和账户激活。网站营销:向潜在用户发送营销信息或者广告邮件。数据监控、报警通知: 对业务类型数据及报警进行通知,达到一个监控目的。身份安全验证:在用户修改密码、解锁账户等关键操作时,通过邮件发送安全验证码来增强账户安全性。普通文本邮件、附件返送邮件:满足不同需求邮件发送需求。

实现说明

1、邮件依赖包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、配置参数(yml文件配置信息)、以下内容以163邮件为例。

spring:mail:host: smtp.163.com#邮箱名字 username: 东北大亨@163.com# 邮箱密码或者密钥、注意此处为授权邮箱授权码password: ZXESDSFGFGGGGSSport: 465protocol: smtpdefault-encoding: utf-8properties:mail:smtp:auth: truestarttls:enable: truerequired: truessl:enable: truesocketFactory:port: 465class: javax.net.ssl.SSLSocketFactory

3、创建邮件发送服务类

3.1 接口类

/*** @author :jack.zhao* @description :发送邮件接口* @version: V1.0.0* @create :2019/5/16 10:47*/
public interface IsendMailService {    /*** 发送普通邮件* @param to 收件地址* @param subject 标题* @param text    正文*/void sendSimpleEmail(String to,String subject,String text);/*** @param to 收件地址* @param subject 标题* @param text    正文* @param attach  附件*/void sendAttachmentMail(String to, String subject, String text, MultipartFile attach) throws MessagingException, IOException;
}

3.2 邮件发送接口实现类

package com.toll.northeasttycoon.service.Impl;import com.toll.auth.service.IEmailService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.IOException;/*** @author :jack.zhao* @description :发送邮件服务类* @version: V1.0.0* @create :2019/5/16 10:48*/
@Service
public class EmailSendServiceImpl implements ISendEmailService {/***  发送邮件邮箱 */@Value("${spring.mail.username}")private String account;@Resourceprivate JavaMailSender javaMailSender;
@Override
public void sendSimpleEmail(String to, String subject, String text) {SimpleMailMessage message = new SimpleMailMessage();message.setTo(to);message.setSubject(subject);message.setText(text);message.setFrom(account);javaMailSender.send(message);}/*** @param to 收件地址* @param subject 标题* @param text 正文* @param attach 附件*/@Overridepublic void sendAttachmentMail(String to, String subject, String text, MultipartFile attach) throws MessagingException, IOException {MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);mimeMessageHelper.setFrom(account);mimeMessageHelper.setTo(new String[]{to});mimeMessageHelper.setSubject(subject);mimeMessageHelper.setText(text);// 获取附件的文件名和后缀名String fileName = attach.getOriginalFilename();String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);// 读取附件内容byte[] bytes = attach.getBytes();// 新的资源对象来存储附件内容ByteArrayResource attachmentResource = new ByteArrayResource(bytes);// 添加附件,使用完整的文件名(包括后缀名) mimeMessageHelper.addAttachment(fileName, attachmentResource);javaMailSender.send(mimeMailMessage);} }

3.3 调用发送邮件

    @Resourceprivate IEmailService iEmailService;String rcvEmail = "接收邮件邮箱";// 发送主题String subject = "邮件主题";// 发送内容String content= “发送内容”;iEmailService.sendEmail(rcvEmail ,subject,content);

注意:在实现中可能遇到几个问题

1、550 User has no permission

      

 2、发生 com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user

 

 3、535 Error:authentication failed

   就是在配置文件yml配置的password应该是授权密码,而不是邮箱密码。

最后说下邮箱授权操作:在开启服务协议的时候需要发送短信,发送短信后在弹出框中选择已发送就会提示授权码。“保留授权码”

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745532.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

T240718(辐角函数连续性)

复变函数辐角函数的连续性[T240718] 证明复变函数 \(\arg z ~(-\pi<\arg z\le \pi)\) 在负实轴上 (包括原点) 不连续, 除此之外在 \(z\) 平面上处处连续. 证:当 \(z=0\) 时, \(\arg z\) 无意义, 自然不连续. 在负实轴上任取一点 \(z_0\), 当 \(z\) 从上半平面趋于 \(z_0\) …

缺陷和缺陷报告

一、缺陷的基本概述1、缺陷的定义 软件未实现产品说明书要求的功能软件出现了产品说明书指明不应该出现的功能软件实现了产品说明书未提到的功能软件未实现产品说明书虽未明确提及在应该实现的目标软件难以理解、不易使用、运行缓慢或者(从测试的角度看)最终用户会认为不好 2…

用Python实现批量扫描域名是否存在指定文件

初学Python练手项目,直接上代码,后续技术进步了可以加上指定字典扫描,现在还不会^_^ 加上并发的话扫描速度会更快,现在也不会~1 import requests2 3 with open(domains.txt,r) as file:4 domains =[line.strip() for line in file]5 for domain in domains:6 try:7…

海量数据场景面试题:出现频率最高的 100 个词

用两种解法解面试题:出现频率最高的 100 个词题目描述 假如有一个 1G 大小的文件,文件里每一行是一个词,每个词的大小不超过 16 bytes,要求返回出现频率最高的 100 个词。内存限制是 10M。 解法1 由于内存限制,所以我们没有办法一次性把大文件里面的所有内容一次性读取到内…

Loki的API接口

参考 Loki HTTP 接口 |Grafana Loki 文档 状态接口 这些 HTTP 端点由所有组件公开,并返回组件的状态:GET /ready GET /log_level GET /metrics GET /config GET /services GET /loki/api/v1/status/buildinfo$ curl 127.0.0.1:3100/ready ready$ curl 127.0.0.1:3100/log_lev…

单体模式部署Loki服务

将Loki的所有微服务组件打包部署到单一进程中 适合小规模系统的日志存储场景(每天不超过100G) 在必要时,可部署共享外部对象存储的多实例进行水平扩容在配置文件loki.yaml的ring配置段中定义日志数据的跨实例分发支持高可的部署方式多个实例需要配置共享的外部对象存储 需要…

DTO转VO工具

data工具,实现了对象拷贝 DTO -> VOdata工具,实现了对象拷贝 DTO -> VO 只需要实现一个类即可 data-utils data工具,实现了对象拷贝DTO —> VO 解决的问题 Mapstruct需要安插件!!!!很多云桌面等会很不方便org.springframework.beans.BeanUtils有一个 copyPropertie…

【Python】公众号聚合登录软件+源码

废话不多说了,直接上图,回复拿软件和源码【自己打包,配置环境比较复杂】 写这个软件就是因为其他平台的会员太贵了,还不如自己写个,不限制账号登录数~授权,打开和删除功能都是正常的, 面板功能,我打算做一个单独的页面【但是不知道做啥,就先放这里,希望各位老板提供想…

HuggingFace Transformers

HuggingFace Transformers https://www.hugging-face.org/hugging-face-transformers-2/Hugging Face Transformers has been built by, with, and for the community. Reaching 100k on GitHub is a testament to ML’s reach and the community’s will to innovate and cont…

函数式接口的使用

介绍 Consumer、Supplier、Predicate与Function 接口的使用Consumer 的使用(顾客) Consumer 翻译过来的意思就是消费者,很容易理解,它就是一个只负责消费的接口。相当于你是一个餐馆的顾客,你只负责吃你点的食物。在项目中一些不需要返回值,只负责消费的方法可以用过 Con…

Go语言之函数(func)进阶篇

目录一.init初始化函数1 初始化函数作用2 初始化函数定义案例2.1 初始化项目2.2 utils.go源代码2.3 main.go源代码二.匿名函数1 匿名函数概述2 匿名函数案例三.闭包函数1 闭包函数概述2 闭包函数案例之返回上级函数内部变量3 闭包函数案例之返回上级函数形参变量4 闭包函数返回…

linux命令入门指南

linux命令入门指南 (个人学习所用,雷同之处请忽略) 关于linux 服务器种类物理服务器 需要机房(零度、无尘、无静电)--防止机器短路,数据丢失。(建造自己的机房或者进行托管) 自己的服务器需要维护。 云服务器 由服务器厂商提供(阿里云、腾讯云)--省钱、有人维护 vmwa…