如何在Java中创建模拟电子邮件服务?

如何在Java中创建模拟电子邮件服务?,java,testing,smtp,junit5,apache-james,Java,Testing,Smtp,Junit5,Apache James,我正在编写一个小型测试库,其中包含不同的模拟服务,如HTTP、SFTP、Bucket和电子邮件 说到电子邮件模拟服务,我有一个思维障碍。我找到了一个和,但我不知道如何使它适应我的界面,而且使用SMTP服务器很混乱 interface TestServer { void start(); void stop(); } 其想法是创建一个实现,因此整个设置将在构造函数中,我只需要在设置和拆卸阶段启动和停止模拟 如何使用ApacheJames服务实现这一点 我使用Java 11、

我正在编写一个小型测试库,其中包含不同的模拟服务,如HTTP、SFTP、Bucket和电子邮件

说到电子邮件模拟服务,我有一个思维障碍。我找到了一个和,但我不知道如何使它适应我的界面,而且使用SMTP服务器很混乱

interface TestServer {

    void start();

    void stop();

}
其想法是创建一个实现,因此整个设置将在构造函数中,我只需要在设置和拆卸阶段启动和停止模拟

如何使用ApacheJames服务实现这一点


我使用Java 11、Spring Boot和JUnit 5。

您可以通过使用
org.apache.james.smtpserver.netty.smtpserver来实现这一点。为此,您需要一些依赖项

对于渐变

implementation group: 'org.apache.james', name: 'james-server-protocols-smtp', version: '3.5.0'
implementation group: 'org.apache.james', name: 'metrics-api', version: '3.5.0'
implementation group: 'org.apache.james', name: 'metrics-logger', version: '3.5.0'
implementation group: 'org.apache.james.protocols', name: 'protocols-netty', version: '3.5.0'
对于Maven

    <dependency>
        <groupId>org.apache.james</groupId>
        <artifactId>james-server-protocols-smtp</artifactId>
        <version>3.5.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.james.protocols</groupId>
        <artifactId>protocols-netty</artifactId>
        <version>3.5.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.james</groupId>
        <artifactId>metrics-api</artifactId>
        <version>3.5.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.james</groupId>
        <artifactId>metrics-logger</artifactId>
        <version>3.5.0</version>
    </dependency>
public class MySmtpServer implements TestServer {

    private final SMTPServer smtpServer;

    public MySmtpServer(final int port) {
        MetricFactory metricFactory = new DefaultMetricFactory();
        SmtpMetrics smtpMetrics = new SmtpMetricsImpl(metricFactory);
        SMTPServer smtpServer = new SMTPServer(smtpMetrics);
        smtpServer.setListenAddresses(new InetSocketAddress(port));
        this.smtpServer = smtpServer;
    }

    @Override
    public void start() {
        smtpServer.start();
    }

    @Override
    public void stop() {
        smtpServer.stop();
    }
}