Spring Boot实现发QQ邮件

news/2024/9/14 23:07:07 标签: spring boot, 后端, java, spring, 服务器, 开发语言

 ​

博客主页:     南来_北往

系列专栏: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、第四步进行发送接口: 

java">void send(MimeMessage mimeMessage)

 5、第五进行拼接MimeMessage:

java">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:

java">messageHelper.getMimeMessage()

邮件设置

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

 

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

 

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

 

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

准备好一切后: 

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

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

完整代码

java">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);
    }

}

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

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

但是中文可能会乱码。

 


http://www.niftyadmin.cn/n/5637798.html

相关文章

EF框架执行SQL语句

在 Entity Framework (EF) 中&#xff0c;如果你需要执行原始 SQL 语句&#xff0c;可以使用 DbContext 提供的 Database.SqlQuery 方法。这允许你直接在数据库上执行 SQL 命令&#xff0c;并返回结果。 以下是如何在 EF 中执行 SQL 语句的步骤&#xff1a; 1. 执行查询并返回…

深度学习引介:未来已来

文章目录 机器学习与深度学习机器学习神经网络&#xff08;深度学习&#xff09;学习与推理过程概要前置技能 神经网络趣人趣事发展历程趣人趣事前沿趋势 应用领域图像识别演示其他应用引介 结语 人工神经网络&#xff08;ANN&#xff09;是深度学习领域的核心概念&#xff0c;…

C#绘制常用工业控件(仪表盘,流动条,开关等)

目录 1&#xff0c;使用Graphics绘制Toggle。 效果&#xff1a; 测试代码&#xff1a; Toggle控件代码&#xff1a; 2&#xff0c;使用Graphics绘制Switch。 效果&#xff1a; 测试代码&#xff1a; Switch控件代码&#xff1a; 3&#xff0c;使用Graphics绘制PanelHe…

USB抓包资料

husbound抓包数据资料 手动分析使用BUSHOUND抓取同步传输的URB - USB中文网 关键数据&#xff1a;因为bus特性&#xff0c;URB数据会在数据之后 BUSHOUND抓包stall pid的USTS c0000004错误 - USB中文网

单片机-STM32 ADC应用(五)

1.ADC模数转换 模拟数字转换器即A/D转换器&#xff0c;或简称ADC&#xff0c;通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义&#xff0c;仅仅表示一个相对大小。故任何一个…

网络安全漏洞-跨站攻击

XSS&#xff08;跨站脚本攻击&#xff0c;Cross-Site Scripting&#xff09;和CSRF&#xff08;跨站请求伪造&#xff0c;Cross-Site Request Forgery&#xff09;是两种不同的网络安全漏洞&#xff0c;尽管它们都被归类为跨站攻击类型&#xff0c;但它们的工作原理和潜在影响有…

Nginx轮询负载均衡配置指南:实现高效请求分发

在现代的Web应用架构中&#xff0c;负载均衡是确保应用高可用性和扩展性的关键技术之一。Nginx是一款高性能的HTTP服务器和反向代理&#xff0c;它提供了多种负载均衡策略来满足不同的业务需求。其中&#xff0c;轮询&#xff08;round-robin&#xff09;是最简单也是最常用的负…

身份验证技术应用10大关键趋势

身份验证是现代企业网络安全的基石&#xff0c;确保只有经过授权的用户或实体才能访问敏感信息或系统。近年来&#xff0c;身份验证技术取得了显著进展&#xff0c;如无密码身份验证、多因素身份验证和社交验证登录等新兴技术不断涌现&#xff0c;正在重塑传统身份验证的方式和…