当前位置: 首页 > news >正文

Spring Boot实现发QQ邮件

 ​

博客主页:     南来_北往

系列专栏:Spring Boot实战


引言

尽管电子邮件已不再是主流的沟通方式,但在职场中仍有不少人偏好使用邮件进行交流。这不仅仅是为了通信,更重要的是作为一种正式的工作记录,确保客户对自己曾经提出的要求和需求负责。

实战 

1、第一步添加依赖:

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

 2、第二进行yml配置:

spring:mail:#smtp服务器host: smtp.qq.com#发件人username: xxx@qq.com# 授权码password: xxxxx#QQ端口号465或587port: 587default-encoding: UTF-8properties:timeout: 5000connection-timeout: 5000write-timeout: 5000mail:smtp:socketFactoryClass: javax.net.ssl.SSLSocketFactory#开启调试debug: true

 3、第三步实现右键接口类:

JavaMailSender javaMailSender

4、第四步进行发送接口: 

void send(MimeMessage mimeMessage)

 5、第五进行拼接MimeMessage:

MimeMessageHelper messageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(), true);
//发件人
messageHelper.setFrom(new InternetAddress(name + "<" + form + ">"));
//收件人
messageHelper.setTo(to.split(","));
//主题
messageHelper.setSubject(subject);
//内容
messageHelper.setText(content, isHtml);
//抄送
if (!StringUtils.isEmpty(cc)) {messageHelper.setCc(cc.split(","));
}
//密送
if (!StringUtils.isEmpty(bcc)) {messageHelper.setCc(bcc.split(","));
}
//附件
if (CollectionUtil.isNotEmpty(files)) {for (File file : files) {messageHelper.addAttachment(file.getName(), file);}
}
// 发送时间
messageHelper.setSentDate(new Date());

6、第六最后messageHelper可以获取MimeMessage:

messageHelper.getMimeMessage()

邮件设置

首先打开QQ邮箱点击设置:

 

在账号模块下找到POP3服务来进行打开:

 

然后需要绑定手机号,按照提示,使用手机给一个账号发短信,然后绑定手机,接着就会得到下面这个授权码: 

 

把这一串授权码填入yml的spring.mail.password。 

准备好一切后: 

emailService.sendText("xxx@qq.com","xxxx@qq.com","你好,我是你的朋友","你好,我是你的朋友,我来自加拿大,能和你交个朋友吗?");

 可以看到邮件已经发送出去了。

完整代码

package com.xy.service.impl;import cn.hutool.core.collection.CollectionUtil;
import com.xy.service.IEmailService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;import javax.mail.internet.InternetAddress;
import java.io.File;
import java.util.Date;
import java.util.List;@Slf4j
@Service
public class EmailServiceImpl implements IEmailService {@Autowiredprivate JavaMailSender javaMailSender;private void send(String form, String to, String subject, String content, Boolean isHtml, String cc, String bcc, List<File> files) {try {MimeMessageHelper messageHelper = new MimeMessageHelper(javaMailSender.createMimeMessage(), true);//发件人messageHelper.setFrom(from);//收件人messageHelper.setTo(to.split(","));//主题messageHelper.setSubject(subject);//内容messageHelper.setText(content, isHtml);//抄送if (!StringUtils.isEmpty(cc)) {messageHelper.setCc(cc.split(","));}//密送if (!StringUtils.isEmpty(bcc)) {messageHelper.setCc(bcc.split(","));}//附件if (CollectionUtil.isNotEmpty(files)) {for (File file : files) {messageHelper.addAttachment(file.getName(), file);}}// 发送时间messageHelper.setSentDate(new Date());//正式发送邮件javaMailSender.send(messageHelper.getMimeMessage());} catch (Exception e) {throw new RuntimeException("邮件发送失败", e);}}@Overridepublic void sendText(String form, String to, String subject, String content) {this.send(form, to, subject, content, false, null, null, null);}@Overridepublic void sendHtml(String form, String to, String subject, String content) {this.send( form, to, subject, content, true, null, null, null);}}

 关于发件人名称重新取名,可以用下面这个方法:

messageHelper.setFrom(new InternetAddress("imufather"+ "<" + form + ">"));

但是中文可能会乱码。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 算法day23| 93.复原IP地址、78.子集、90.子集II
  • python第二章课堂笔记
  • Maven基本使用(下)
  • Zenmap
  • Mysql Innodb存储引擎原理—链接如下
  • ARM base instruction -- csel
  • 小琳AI课堂:多模态模型的训练与应用
  • 人工智能安全治理框架导图
  • 通信工程学习:什么是FMC固定移动融合
  • 斐纳切数列考试题
  • 攻防世界--->易热
  • C#使用MQTT(二):MQTT客户端
  • 【JAVA】Tomcat性能优化、安全配置、资源控制以及运行模式超详细
  • Self Refine技术测评:利用Self Refine提高LLM的生成质量
  • 微信小程序:navigateTo跳转无效
  • 03Go 类型总结
  • const let
  • golang 发送GET和POST示例
  • go语言学习初探(一)
  • javascript 哈希表
  • overflow: hidden IE7无效
  • Python学习之路13-记分
  • Spring Cloud Feign的两种使用姿势
  • vue中实现单选
  • web标准化(下)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 高度不固定时垂直居中
  • 构造函数(constructor)与原型链(prototype)关系
  • 如何解决微信端直接跳WAP端
  • 源码安装memcached和php memcache扩展
  • HanLP分词命名实体提取详解
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (04)odoo视图操作
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (MATLAB)第五章-矩阵运算
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (TOJ2804)Even? Odd?
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)c52学习之旅-简单了解单片机
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)memcache、redis缓存
  • .NET C# 使用 iText 生成PDF
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 药厂业务系统 CPU爆高分析
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net打印*三角形
  • .NET命名规范和开发约定