使用JAVA实现邮件发送功能的图文教程
作者:Wisdom0110 发布时间:2021-09-04 17:29:36
标签:java,邮件,发送
一、准备工作
小编今天以 QQ邮箱 进行演示操作。
想要使用代码操作邮箱发送邮件,需要在邮箱设置中申请开通 POP3/SMTP 服务。
接下来跟着小编的图文一步一步的操作开通吧!
1.1 登录网页QQ邮箱,点击页面顶部设置按钮。
1.2 点击后会打开邮箱设置页面,如下所示,点击第二栏账户。
1.3 点击后往下拉,直到有如下页面选项。
选择POP3/SMTP服务,点击后面的开启,此时会让你使用绑定邮箱的手机号发送短信。
发送完成后点击 我已发送 按钮,进行验证。
1.4 验证完成后会显示授权码(复制下来,一会要用)
到此,准备工作已完成!
二、项目中配置邮件发送功能
2.1 引入发送邮件相关依赖
<!--邮件发送依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
引入后,更新maven,下载相关依赖
2.2 在application.yml文件中添加邮件基本配置
spring:
# 发送邮件配置
mail:
host: smtp.qq.com # 配置 smtp 服务器地址
port: 587 # smtp 服务器的端口
username: 1354720889@qq.com # 配置邮箱用户名(你的邮箱地址)
password: batrgddaqykegfss # 配置申请到的授权码(刚让复制的授权码)
default-encoding: UTF-8 # 配置邮件编码
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory # 配饰 SSL 加密工厂
debug: true
from: 1354720889@qq.com # 发送方邮件,陪在yml中可方便更改
2.3 为了方便使用,新建一个操作email的工具类(EmailUtil.java)
封装邮件工具类是为了方便后续调用操作。
package com.clover.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* @ClassName EmailUtil
* @Description 邮件发送工具
* @Author Sophia
* @Date 2022/4/6 16:06
*/
@Component
public class EmailUtil {
@Value("${spring.mail.from}") // 从application.yml配置文件中获取
private String from; // 发送发邮箱地址
@Autowired
private JavaMailSender mailSender;
/**
* 发送纯文本邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
*/
public void sendMessage(String to, String subject, String content) {
// 创建一个邮件对象
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom(from); // 设置发送发
msg.setTo(to); // 设置接收方
msg.setSubject(subject); // 设置邮件主题
msg.setText(content); // 设置邮件内容
// 发送邮件
mailSender.send(msg);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param files 文件数组 // 可发送多个附件
*/
public void sendMessageCarryFiles(String to, String subject, String content, File[] files) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(from); // 设置发送发
helper.setTo(to); // 设置接收方
helper.setSubject(subject); // 设置邮件主题
helper.setText(content); // 设置邮件内容
if (files != null && files.length > 0) { // 添加附件(多个)
for (File file : files) {
helper.addAttachment(file.getName(), file);
}
}
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
/**
* 发送带附件的邮件信息
*
* @param to 接收方
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
* @param file 单个文件
*/
public void sendMessageCarryFile(String to, String subject, String content, File file) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(from); // 设置发送发
helper.setTo(to); // 设置接收方
helper.setSubject(subject); // 设置邮件主题
helper.setText(content); // 设置邮件内容
helper.addAttachment(file.getName(), file); // 单个附件
} catch (MessagingException e) {
e.printStackTrace();
}
// 发送邮件
mailSender.send(mimeMessage);
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
}
2.4 测试邮件发送功能
我使用的SpringBoot项目,因此我在测试类中进行测试。
测试类代码:
package com.clover.api.blogapi;
import com.clover.utils.EmailUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.File;
@SpringBootTest
class BlogApiApplicationTests {
@Autowired
private EmailUtil emailUtil;
@Test
void contextLoads() {
}
@Test
void sendStringEmail() {
// 测试文本邮件发送(无附件)
String to = "1354720990@qq.com";
String title = "文本邮件发送测试";
String content = "文本邮件发送测试";
emailUtil.sendMessage(to, title, content);
}
@Test
void sendFileEmail() {
// 测试单个附件邮件发送
String to = "1354720990@qq.com";
String title = "单个附件邮件发送测试";
String content = "单个附件邮件发送测试";
File file = new File("D:\\GCH\\Typora\\Linux中常用的查看系统相关信息命令.md");
emailUtil.sendMessageCarryFile(to, title, content, file);
}
@Test
void sendFilesEmail() {
// 测试多个附件邮件发送
String to = "1354720990@qq.com";
String title = "多个附件邮件发送测试";
String content = "多个附件邮件发送测试";
File[] files = new File[2];
files[0] = new File("C:\\Users\\root\\Desktop\\配置邮箱\\1.png");
files[1] = new File("C:\\Users\\root\\Desktop\\配置邮箱\\2.png");
emailUtil.sendMessageCarryFile(to, title, content, files);
}
}
2.5 测试结果
邮箱已收到
2.5.1 文本邮件发送
2.5.2 单个附件邮件发送
2.5.3 多个附件邮件发送
到此,使用Java发送邮件功能就结束了,伙伴们可以根据自己的需求进行封装使用。
来源:https://blog.csdn.net/qq_42320934/article/details/124021133


猜你喜欢
- Java空字符串与null的区别:1、类型 null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a =
- 前言前一篇文章讲了View的触发反馈机制的原理,对于一个自定义View而言,手势的处理都是重写onTouchEvent函数,或者通过setO
- [LeetCode] 159. Longest Substring with At Most Two Distinct Characters
- 先来看看网易新闻客户端以及自己实现的效果图,效果当然还是网易的好gridviewsort.gif如何实现拖拽一个Item用WindowMan
- java Lock接口java.util.concurrent.locks接口Lockpublic interface Loce
- 方法重载概述方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法互相构成重载* 多个方法在同一个类中* 多个放方法具有相同方
- 先明确几个概念的区别: padding margin都是边距的含义,关键问题得明白是什么相对什么的边距. padding是控件的内容相对控件
- 本文实例为大家分享了Java实现在线聊天室的具体代码,供大家参考,具体内容如下- 本文讲述了从实现单个多个客户的收发信息(基础简易版),到各
- 用java压缩/解压文件: import java.io.*; import java.awt.*; import java.aw
- 项目中需要实现一个状态显示的悬浮框,要求可以设置两种模式:拖动模式和不可拖动模式。实现效果图如下:实现步骤:1.首先要设置该悬浮框的基本属性
- 1.类的6个默认成员函数默认成员函数:用户没有显示实现,编译器会生成的成员函数称为默认成员函数。如果一个类中什么成员都没有,简称为空类。但空
- 前言扫雷是一个常见小游戏,那么如何用C语言实现扫雷呢?学习了二维数组之后,我们可将扫雷的网格区域存储为二维数组,从而使用C语言实现扫雷。1.
- 一、SpringCache介绍Spring Cache 是一个优秀的缓存组件。自Spring 3.1起,提供了类似于@Transaction
- 一、数据输出SpringMVC将数据携带给页面的储存工具,有三种,map,ModelMap,model,它们在底层实质还是使用到了Bindi
- Logback TurboFilter实现日志级别等内容的动态修改可能看到这个标题,读者会问:要修改日志的级别,不是直接修改log.xxx就
- 前提:① 已经提供了一个wsdl接口② 该接口能正常调用总体分为两种方式:1.使用cxf的wsdl2java工具生成本地类(使用方式就是本地
- springboot集成mybatis关键代码如下:1,添加pom引用 <dependency> <group
- 因工作需要,经常跟时间戳打交道,但是因为它仅仅是一个数字,我们很难直接看出它有什么意义,或两个时间戳之间究竟差了多长的间隔。于是从MSDN
- 本文实例为大家分享了Android实现简单banner轮播图的具体代码,供大家参考,具体内容如下说明:想玩一个简单的轮播图效果
- java.util.concurrent包中的工具实现核心都是AQS,了解ReentrantLock的实现原理,需要先分析AQS以及AQS与