Spring Boot实现发QQ邮件

博客主页: 南来_北往

系列专栏:Spring Boot实战


引言

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

实战

1、第一步添加依赖:

XML 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、第二进行yml配置:

XML 复制代码
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 + ">"));

但是中文可能会乱码。

相关推荐
FelixBitSoul13 分钟前
缓存淘汰策略全解:从原理到手写实现(Java / Go / Python)
后端·面试
老陈说编程23 分钟前
12. LangChain 6大核心调用方法:invoke/stream/batch同步异步全解析,新手也能轻松学会
开发语言·人工智能·python·深度学习·机器学习·ai·langchain
014-code31 分钟前
Java 并发中的原子类
java·开发语言·并发
alphageek833 分钟前
Matlab linspace函数完全指南:从基础用法到进阶技巧
开发语言·其他·matlab
AI人工智能+电脑小能手34 分钟前
【大白话说Java面试题】【Java基础篇】第29题:静态代理和动态代理的区别是什么
java·开发语言·后端·面试·代理模式
善恶怪客34 分钟前
Java-数组和可变参数
java·开发语言
小编码上说35 分钟前
LSH(局部敏感哈希)分桶,海量数据下的相似性搜索解决方案
java·spring boot·缓存·langchain4j·lsh·局部敏感哈希·ai调用优化
谭欣辰40 分钟前
LCS(最长公共子序列)详解
开发语言·c++·算法
RPGMZ1 小时前
RPGMakerMZ 地图存档点制作 标题继续游戏直接读取存档
开发语言·javascript·游戏·游戏引擎·rpgmz·rpgmakermz
计算机_毕业设计1 小时前
java-springboot数字藏品系统 基于 SpringBoot 的区块链数字艺术品交易平台 Java 微服务架构下的加密藏品展示与拍卖系统计算机毕业设计
java·spring boot·课程设计