使用JAVA实现邮件发送功能的图文教程

 更新时间:2022年06月15日 15:12:10   作者:Wisdom0110  
邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,下面这篇文章主要给大家介绍了关于使用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发送邮件功能就结束了,伙伴们可以根据自己的需求进行封装使用。

总结

到此这篇关于使用JAVA实现邮件发送功能的文章就介绍到这了,更多相关JAVA邮件发送功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java8 使用stream排序空字段排在前面或后面

    java8 使用stream排序空字段排在前面或后面

    这篇文章主要介绍了java8 使用stream排序空字段排在前面或后面的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • springboot新建项目pom.xml文件第一行报错的解决

    springboot新建项目pom.xml文件第一行报错的解决

    这篇文章主要介绍了springboot新建项目pom.xml文件第一行报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法

    解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法

    这篇文章主要介绍了解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java对象转JSON三种常用的方法

    Java对象转JSON三种常用的方法

    在Java中可以使用多种方式将对象转换为JSON字符串,下面这篇文章主要给大家介绍了关于Java对象转JSON三种常用的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Java如果在try里面执行return还会不会执行finally

    Java如果在try里面执行return还会不会执行finally

    这篇文章主要介绍了Java如果在try里面执行return,那么还会不会执行finally,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • spring boot封装HttpClient的示例代码

    spring boot封装HttpClient的示例代码

    这篇文章主要介绍了spring boot封装HttpClient的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Spring Boot中WebMvcConfig配置详解及示例代码

    Spring Boot中WebMvcConfig配置详解及示例代码

    WebMvcConfig是一个配置类,它继承了WebMvcConfigurationSupport,允许我们对SpringMVC进行更细粒度的控制,这篇文章主要给大家介绍了关于Spring Boot中WebMvcConfig配置详解及示例的相关资料,需要的朋友可以参考下
    2024-03-03
  • Spring Security登录表单配置示例详解

    Spring Security登录表单配置示例详解

    这篇文章主要介绍了Spring Security登录表单配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java中死锁的原理实战分析

    Java中死锁的原理实战分析

    这篇文章主要介绍了Java中死锁的原理,结合具体案例形式分析了java死锁形成的相关原理,需要的朋友可以参考下
    2019-08-08
  • 一文读懂Java多线程背后的故事

    一文读懂Java多线程背后的故事

    Java是一种广泛使用的编程语言,而多线程是Java程序员必不可少的一部分,Java的多线程支持具有确保数据同步、最大化利用CPU资源、并行处理任务等众多优点,本文从实际应用场景出发,为您详细介绍 Java 多线程的各个方面的实际应用及背景
    2023-06-06

最新评论