Java实战:使用Hutool中的MailUtil实现邮件的发送

简介: 今天给大家分享使用Hutool中的MailUtil实现邮件的发送,主要实现了发送普通文本邮件、发送Html文件、发送邮件包含本地附件、远程下载附件、指定多个发件人的功能。具体的大家可以互相沟通交流!

24be4df6bdebfbeb143fe5130e9b5909.jpg


今天给大家分享使用Hutool中的MailUtil实现邮件的发送,主要实现了发送普通文本邮件、发送Html文件、发送邮件包含本地附件、远程下载附件、指定多个发件人的功能。具体的大家可以互相沟通交流!

1、pom.xml 导入依赖包



<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <!--邮件依赖包-->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>



2、新增邮件配置文件 src/main/resources/config/mail.setting


需要新增mail.setting配置文件,配置对应的发件邮箱信息和相应的参数,这里用qq邮箱为案例。具体的可以参照配置的注释。

# 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀>可以自定义
host = smtp.qq.com
# 邮件服务器的SMTP端口,可选,默认25  465
port = 587
# 发件人邮箱地址
from = xxxxxxxx@qq.com
# 用户名,默认为发件人邮箱前缀
user = xxxxxxxxx
# 密码(注意,某些邮箱需要为SMTP服务单独设置授权码 比如QQ邮箱)
pass = xxxxxxxxxxxxxxxxxxxxxx
#使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展
starttlsEnable = true
# 需要设置为false 否则QQ邮箱测试邮件发送报错
sslEnable = false



注意:针对sslEnable 一定要设置为 false,否则会报错。亲测问题。


3、新增测试类 src/main/java/EmailTest.java

里面的代码注释比较详细,大家参考注释就能很好的理解。


import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import cn.hutool.http.HttpUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * @author haogm
 * @ClassName EmailTest
 * @description: TODO
 * @datetime 2023年 01月 06日 14:07
 * @version: 1.0
 */
public class EmailTest {
    public static void main(String[] args) {
        // 发送普通文本文件
        EmailTxt();
        // 发送HTml内容的邮件,包含附件
        EmailHtml();
        // 指定多个收件人邮件
        EmailMulit();
    }
    /**
     * 发送普通文本邮件
     */
    private static void EmailTxt() {
        MailUtil.send("xxxxxxxx@outlook.com", "文本邮件测试", "IT技术分享社区,一个有态度的互联网分享平台!", false);
    }
    /**
     *  发送包含html的邮件
     */
    private static void EmailHtml() {
        String html = "<h2>Html邮件测试</h2><p>IT技术分享社区,一个有态度的互联网分享平台!</p><div><img alt='' src='https://ucc.alicdn.com/images/user-upload-01/img_convert/dcf12652858aeceab6d38d53a1fb5d7f.jpeg' /></div>";
        //MailUtil.send("xxxxxxxx@outlook.com", "Html邮件测试", html, true);
        // 添加附件
        List<File> fileList = new ArrayList<>();
        File file1=new File("D:\\Test.xlsx");
        File file2=new File("D:\\image.png");
        // 通过远程url下载文件
        File file3=GetUrl("https://ucc.alicdn.com/images/user-upload-01/img_convert/aaad05ecfba45b824bac3e24907e7abf.png","D:\\远程下载图片1.png");
        // 多个附件参数直接往后面追加即可
        MailUtil.send("xxxxxxxxx@outlook.com", "Html邮件测试", html, true,file1,file2,file3);
    }
    /**
     * 发送邮件指定多个收件人
     */
    private static void EmailMulit() {
        // 设置发送人员列表
        List<String> sendList=new ArrayList<>();
        sendList.add("xxxxxxx@outlook.com");
        sendList.add("xxxxxxxxx@qq.com");
        MailUtil.send(sendList, "文本邮件测试", "IT技术分享社区,一个有态度的互联网分享平台!", false);
    }
    /**
     *
     * @param url 下载地址
     * @param filePath 下载后的存储文件路径
     * @return 根据url直接下载文件作为上传的附件
     */
    private  static  File GetUrl(String url,String filePath)
    {
       return HttpUtil.downloadFileFromUrl(url,filePath);
    }
}



4、预览效果

image.png



相关文章
|
2月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
77 2
|
9天前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
25天前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
27 1
|
1月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
60 6
|
1月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
2月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
2月前
|
开发框架 Java 程序员
揭开Java反射的神秘面纱:从原理到实战应用!
本文介绍了Java反射的基本概念、原理及应用场景。反射允许程序在运行时动态获取类的信息并操作其属性和方法,广泛应用于开发框架、动态代理和自定义注解等领域。通过反射,可以实现更灵活的代码设计,但也需注意其性能开销。
58 1
|
3月前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
97 6
|
3月前
|
Java
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
43 7
|
3月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
170 1