Spring Boot实现发QQ邮件

news2024/9/28 15:31:00

 ​

博客主页:     南来_北往

系列专栏: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或587
    port: 587
    default-encoding: UTF-8
    properties:
      timeout: 5000
      connection-timeout: 5000
      write-timeout: 5000
      mail:
        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 {

    @Autowired
    private 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);
        }
    }


    @Override
    public void sendText(String form, String to, String subject, String content) {
        this.send(form, to, subject, content, false, null, null, null);
    }

    @Override
    public 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 + ">"));

但是中文可能会乱码。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

客服系统简易版

整体架构解读 客服端和商城端都通过websocket连接到客服系统, 并定期维持心跳当客户接入客服系统时, 先根据策略选择在线客服, 然后再发送消息给客服 websocket实现 用netty实现websocket协议, 增加心跳处理的handler, 详见chat-server模块 客服路由规则 暂时仅支持轮询的…

WIN 系统中英文翻译神器"STranslate"再也不怕看不懂了

随着机器翻译工具的不断发展&#xff0c;翻译工作者的工作效率和效果得到了大幅提升。这些工具不仅可以提供快速的翻译参考&#xff0c;还可以帮助处理大量的文本&#xff0c;极大地节省了翻译的时间和精力。翻译也可以花更多的时间去精修译文&#xff0c;在机翻的“半成品”之…

自动化测试经典面试题

当下各行各业都呈现出了非常内卷的情况&#xff0c;测试圈内也出现了技术内卷的魔咒&#xff0c;因此大部分公司在招聘测试工程师的岗位时&#xff0c;都要求掌握一些自动化测试方面的技术。那么&#xff0c;我们在面试的时候哪些自动化测试的问题会被面试官经常问到呢&#xf…

12 对话模型微调2

1 P-Tuning P-Tuning 是在 Prompt-Tuning的基础上&#xff0c;通过新增 LSTM 或 MLP 编码模块来加速模型的收敛&#xff1b; 之前的实验也看到了使用prompt训练速度很慢&#xff0c;那么P-Tuning呢 参数占比&#xff1a; trainable params: 5,267,456 || all params: 1,308,37…

Golang学习总结

一、基本语法 Golang 设计理念&#xff1a;一种事情有且只有一种方法完成 软件包安装 直接官网下载好&#xff0c;配置安装下环境变量即可 /etc/profile # 在这个文件写入会对所有用户生效 ~/.profile # 在这个文件写入只会对当前用户生效# 以上两个文件中…

综合布线智能运维管理方案

布线运维管理的现状 基础档案资料分散、过时&#xff0c;无集中管理与自动更新机制&#xff1b; 缺乏变更规划工具与流程&#xff0c;易造成线缆混乱、变更效率低&#xff1b; 缺乏告警机制&#xff0c;关键线路中断无法及时发现。 nVisual综合布线智能运维管理系统组…

人工智能相关概念

特征选择方法 解决过拟合问题 正则化 k匿名算法 L-多样性算法 t相进性算法

MySQL中的锁详解

1.概念 锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题&#xff0c;锁的冲突也是影响数据库并发访问性能的一个重要因素&#xff0c;所以数据库中锁的应用极为重要&#xff0c;其复杂度也更高。 …

SLAM的详细介绍,包括其基本原理、主要组件、算法类型、应用场景以及面临的挑战

创作不易&#xff0c;您的关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 大家有技术交流指导、论文及技术文档写作指导、项目开发合作的需求可以私信联系我。 SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;是一种用于机器人和计算机视觉领域的…

设计模式之生成器方法

一、生成器模式概念 Builder模式也叫建造者模式或者生成器模式&#xff0c;是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一&#xff0c;用来隐藏复合对象的创建过程&#xff0c;它把复合对象的创建过程加以抽象&#xff0c;通过子类继承和重载的方式…

Mudbox 2013/2018简体中文版百度云(附教程)

如大家所了解的&#xff0c;Autodesk Mudbox是一款专业的‌3D数字雕刻和纹理绘画软件‌&#xff0c;它结合了直观的用户界面和一套高性能的创作工具&#xff0c;使三维建模专业人员能够快速轻松地制作高度逼真的有机和无机的三维资产。‌ 目前常用的版本有Mudbox 2013和Mudbox…

微气象在线监测系统:宏观层面的电网灾害预防和应急管理

微气象受局部地形&#xff08;如山谷、河谷&#xff09;、地物&#xff08;如建筑物、森林&#xff09;和地面条件&#xff08;如水面、农田&#xff09;的影响较大&#xff0c;而大范围气象环境则更多地受气候系统和天气模式的控制。输电线路微气象监测的主要目的是为了评估和…

Java基础(6)- Java代码笔记3

目录 一、二维数组 1.二维数组定义 a.动态初始化 b.静态初始化 c.简单静态初始化 2.获取数组长度 二、方法 1.无参无返回值方法 2.有参无返回值方法 3.无参有返回值方法 4.有参有返回值方法 5.形式参数和实际参数 6.三层架构思想 7.方法注意事项 8.数组作为方法参…

如何实现DWG转DXF在线?原来很简单

DWG转DXF在线怎么转&#xff1f;在CAD设计领域&#xff0c;文件格式转换是一项常见且重要的任务。DWG和DXF作为两种广泛使用的CAD文件格式&#xff0c;经常需要在不同软件或平台间进行转换。那么要怎么做才能顺利转换呢&#xff1f;下面&#xff0c;本文将详细介绍三种在线转换…

通过Origin提取图片数据

第一步&#xff1a; Tool --> Digitizer 第二步&#xff1a;点击文件&#xff0c;导入图片 第三步&#xff1a;设置坐标轴位置和数值&#xff08;Edit Aix&#xff09; 滑动鼠标放大图片&#xff0c;将X1移动到0&#xff0c;X2移动到80&#xff0c;Y1移动到97.0&#xff0c…

极客天成分布式全闪存储在大模型训练中的应用

01 国内大语言模型训练使用的存储系统应用现状 近年来&#xff0c;中国在人工智能领域&#xff0c;特别是大语言模型(LLM)的研发和应用方面取得了显著进展。随着百度文心一言、阿里通义千问、讯飞星火等国产大模型的推出&#xff0c;中国AI产业进入了快速发展期。这一趋势带动…

SpringBoot 集成mybatis-plus

目录 前言 简介 前提 运用mybatis-plus&#xff08;使用20241.1版本的idea&#xff09; 1 自动创建springboot项目 1.1 点击新建&#xff0c;SpringBoot 1.2 添加依赖项&#xff0c;点击创建 2添加 MyBatis-Plus Starter 依赖 2.1 打开mybatis-plus官网&#xff0c;点…

适配算能BM1684开发板,bmodel推理模型转换

通过mlir转bmodel 一、文件转移 从算能官网technical center (sophgo.com)下载最新的版本&#xff0c;下载下来之后解压出来&#xff0c;再Ubuntu系统中创建一个sophon文件夹存放后续用到的文件&#xff0c;将tpu-mlir_v1.2.8-g32d7b3ec-20230802.tar.gz文件放入Ubuntu系统中…

《Java面试题集中营》- Redis

建议阅读《Redis开发与运维》《Redis设计与实现》《Redis深度历险&#xff1a;核心原理和应用实践》 Redis 为什么是单线程? 为什么单线程还能这么快&#xff1f; 单线程能够避免线程切换和竞态产生的消耗&#xff0c;而且单线程可以简化数据结构和算法的实现 至于单线程还快…

idea付费插件,SequenceDiagram有哪些优点

以下idea付费插件你们都用过哪些呢&#xff1f; SequenceDiagram插件是一种用于绘制时序图的工具。时序图是一种图形化的表示对象之间消息传递顺序的方法。 该插件可以在使用各种编程语言编写代码时&#xff0c;方便地绘制时序图&#xff0c;以帮助开发者更好地理解和描述系统…