Java使用Mail构建邮件功能的完整指南

 更新时间:2025年03月14日 09:46:40   作者:拾荒的小海螺  
Java Mail API 是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用 Java Mail 发送和接收邮件,希望对大家有所帮助

1、简述

在现代应用中,邮件服务是不可或缺的一部分,无论是发送通知、验证用户身份还是传递报告。Java Mail API 是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能。本文将介绍如何使用 Java Mail 发送和接收邮件,并提供详细的使用样例。

样例代码:https://gitee.com/lhdxhl/springboot-example.git

2、主要特点

协议支持:支持 SMTP、IMAP 和 POP3 协议。

附件功能:支持多种格式的附件。

富文本支持:支持 HTML 邮件。

加密传输:支持 SSL 和 TLS 协议。

跨平台:完全基于 Java,可在各种操作系统上运行。

在使用 Mail 之前,需要添加其依赖。以下是 Mail 的 Maven 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

3、发送样例

在发送之前,要准备以下信息:

SMTP 服务器地址(如:smtp.gmail.com、smtp.qq.com、smtp.126.com)

发件人邮箱及密码

收件人邮箱

在调用之前要确保邮箱SMTP是否开启,开启SMTP会生成密钥,通过该密钥来配合host发送邮件,如果是gmail要确认是否开启两步验证:

3.1 发送纯文本邮件

以下是发送一封简单文本邮件的代码:

import jakarta.mail.*;
import jakarta.mail.internet.*;
import java.util.Properties;

public class MailExample {
    public static void sendTextMail() {
        String host = "smtp.gmail.com";  // SMTP 服务器地址
        String from = "your_email@gmail.com";
        String password = "your_password";// 开启SMTP 申请的密钥
        String to = "recipient_email@gmail.com";

        // 配置属性
        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");

        // 获取会话对象
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(from, password);
            }
        });

        try {
            // 创建邮件
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject("Java Mail 测试");
            message.setText("这是一封通过 Java Mail 发送的简单文本邮件!");

            // 发送邮件
            Transport.send(message);
            System.out.println("邮件发送成功!");
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        sendTextMail();
    }
}

3.2 发送 HTML 邮件

HTML 邮件可以包含更丰富的内容,如图片、超链接等。

public static void sendHtmlMail() {
    String host = "smtp.gmail.com";
    String from = "your_email@gmail.com";
    String password = "your_password";// 开启SMTP 申请的密钥
    String to = "recipient_email@gmail.com";

    Properties props = new Properties();
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");

    Session session = Session.getInstance(props, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(from, password);
        }
    });

    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setSubject("HTML 邮件测试");

        // 设置 HTML 内容
        String htmlContent = "<h1>欢迎使用 Java Mail</h1><p>这是一个 <b>HTML</b> 格式的邮件!</p>";
        message.setContent(htmlContent, "text/html;charset=UTF-8");

        Transport.send(message);
        System.out.println("HTML 邮件发送成功!");
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}

3.3 发送带附件的邮件

支持多种附件格式。

public static void sendMailWithAttachment() {
    String host = "smtp.gmail.com";
    String from = "your_email@gmail.com";
    String password = "your_password";
    String to = "recipient_email@gmail.com";

    Properties props = new Properties();
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");

    Session session = Session.getInstance(props, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(from, password);
        }
    });

    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setSubject("带附件的邮件测试");

        // 创建邮件正文
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setText("请查看附件!");

        // 创建附件部分
        MimeBodyPart attachmentPart = new MimeBodyPart();
        attachmentPart.attachFile("path/to/file.txt"); // 附件路径

        // 合并正文和附件
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(textPart);
        multipart.addBodyPart(attachmentPart);

        message.setContent(multipart);

        Transport.send(message);
        System.out.println("带附件的邮件发送成功!");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3.4 使用 SSL 加密发送邮件

SSL 是更安全的邮件传输方式。

props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.ssl.protocols", "TLSv1.2");

将上述配置替换为 SSL 的配置即可。

4、总结

通过本文的学习,您应该能够使用 Java Mail 实现以下功能:

  • 发送文本邮件
  • 发送 HTML 格式的邮件
  • 发送带附件的邮件
  • 配置 SSL 加密传输

到此这篇关于Java使用Mail构建邮件功能的完整指南的文章就介绍到这了,更多相关Java Mail邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解如何在SpringBoot里使用SwaggerUI

    详解如何在SpringBoot里使用SwaggerUI

    本篇文章主要介绍了详解如何在SpringBoot里使用SwaggerUI,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 解决IDEA上循环依赖报错问题Error:java: Annotation processing is not supported for module cycles

    解决IDEA上循环依赖报错问题Error:java: Annotation processing&n

    这篇文章主要介绍了解决IDEA上循环依赖报错问题Error:java: Annotation processing is not supported for module cycles,具有很好的参考价值,希望对大家有所帮助
    2023-10-10
  • Java数据结构之插入排序与希尔排序

    Java数据结构之插入排序与希尔排序

    在本篇文章,我们将为小伙伴们进行排序概念的基本讲解并具体讲解其中的两种基础排序:插入排序和希尔排序,希望小伙伴们能够从中有所收获
    2023-04-04
  • Java高效实现Word转PDF的完整指南

    Java高效实现Word转PDF的完整指南

    这篇文章主要为大家详细介绍了如何用 Spire.Doc for Java 库实现Word到PDF文档的快速转换,并解析其转换选项的灵活配置技巧,希望对大家有所帮助
    2025-08-08
  • Java读写文件创建文件夹多种方法示例详解

    Java读写文件创建文件夹多种方法示例详解

    这篇文章主要介绍了Java读写文件创建文件夹等多种操作的方法,大家参考使用吧
    2013-11-11
  • Spring bean加载控制实现方法

    Spring bean加载控制实现方法

    很多时候我们需要根据不同的条件在容器中加载不同的Bean,或者根据不同的条件来选择是否在容器中加载某个Bean,这就是Bean的加载控制,一般我们可以通过编程式或注解式两种不同的方式来完成Bean的加载控制
    2022-12-12
  • 详解SSM框架下结合log4j、slf4j打印日志

    详解SSM框架下结合log4j、slf4j打印日志

    本篇文章主要介绍了详解SSM框架下结合log4j、slf4j打印日志,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java基础知识精通二维数组的应用

    Java基础知识精通二维数组的应用

    为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来。二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列。下面简单了解一下二维数组,包括数组的声明和初始化
    2022-04-04
  • mybatis-plus分页查询的实现实例

    mybatis-plus分页查询的实现实例

    页查询是一项常用的数据库查询方法,本文主要介绍了mybatis-plus分页查询的实现实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Java实现Treap树的示例代码

    Java实现Treap树的示例代码

    本文主要介绍了Java实现Treap树的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论