侧边栏壁纸
博主头像
拾荒的小海螺博主等级

只有想不到的,没有做不到的

  • 累计撰写 224 篇文章
  • 累计创建 19 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JAVA:使用 Mail 构建邮件功能的技术指南

拾荒的小海螺
2025-01-08 / 0 评论 / 0 点赞 / 25 阅读 / 7636 字

1、简述

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

image-gkmy.png

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 的强大功能为开发邮件相关功能提供了极大的便利。如果有其他问题或需求,欢迎随时留言探讨!

0

评论区