You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java拦截Java应用发出的外发邮件并读取邮件内容

实现方案概述

你需要在Java中实现一个轻量级SMTP服务端,监听2525端口,接收客户端发送的SMTP请求并解析邮件内容即可,不需要执行真实邮件转发逻辑,和FakeSMTP的核心运行逻辑完全一致。

推荐实现方式

方式1:使用SubEtha SMTP库(最高效便捷)

SubEtha SMTP是Java生态专门用于快速构建嵌入式SMTP服务的工具,封装了SMTP协议底层交互逻辑,开箱即用,不用自行实现协议细节。

  • 第一步:引入依赖(Maven示例)
<dependency>
    <groupId>org.subethamail</groupId>
    <artifactId>subethasmtp</artifactId>
    <version>3.1.7</version>
</dependency>
  • 第二步:编写邮件拦截处理逻辑
    通过实现对应监听器接口,即可在邮件投递回调方法中拿到完整的邮件数据,解析后即可读取所有字段:
import org.subethamail.smtp.*;
import javax.mail.internet.MimeMessage;
import java.io.InputStream;
import java.util.Properties;

public class CustomSmtpServer {
    public static void main(String[] args) {
        // 配置SMTP服务监听2525端口
        SMTPServer server = new SMTPServer(new SimpleMessageListenerAdapter() {
            @Override
            public boolean accept(String from, String recipient) {
                // 可在此处配置邮件过滤规则,返回false即拒收对应邮件
                return true;
            }

            @Override
            public void deliver(String from, String recipient, InputStream data) {
                try {
                    // 把输入流解析为标准邮件对象
                    MimeMessage message = new MimeMessage(javax.mail.Session.getDefaultInstance(new Properties()), data);
                    // 读取各类邮件字段
                    System.out.println("发件人: " + from);
                    System.out.println("收件人: " + recipient);
                    System.out.println("邮件主题: " + message.getSubject());
                    System.out.println("邮件正文: " + message.getContent());
                    // 如需读取附件、抄送、HTML正文等内容,直接调用MimeMessage对应API即可
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        server.setPort(2525);
        server.start();
        System.out.println("自定义SMTP服务已启动,正在监听2525端口");
    }
}

运行上述代码后,Web应用向localhost:2525发送的所有邮件都会被该服务拦截,你可以在deliver方法中自行实现存储、转发、分析等后续处理逻辑。

方式2:基于Netty自行实现SMTP协议(适合高度自定义场景)

如果不想引入第三方依赖,可基于Netty网络框架实现SMTP协议的基础交互逻辑,按SMTP协议规范处理HELO、MAIL FROM、RCPT TO、DATA等指令,接收完整邮件内容后自行解析即可。该方式灵活性最高,但需要你对SMTP协议有基础了解。

注意事项
  • 启动服务前请确保2525端口未被其他进程占用,否则会启动失败
  • 如果需要处理加密SMTP请求(SMTPS),上述两种方式都支持配置SSL证书实现
  • 解析MimeMessage需要JavaMail相关依赖,如果项目中未引入可单独添加:
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

内容的提问来源于stack exchange,提问作者Alvandi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:24:06