如何在 Java 中创建模拟电子邮件服务?
How to create mock email service in Java?
我正在编写一个带有不同模拟服务(如 HTTP、SFTP、Buckets、电子邮件)的小型测试库。
关于电子邮件模拟服务,我有一个想法。我找到了一个 Apace James docs and an article,但我不知道如何使它适应我的界面,而且使用 SMTP 服务器很混乱。
interface TestServer {
void start();
void stop();
}
我的想法是创建一个实现,所以整个设置都在构造函数中,我只需要在设置和拆除阶段启动和停止 Mock。
如何使用 Apache James 服务完成此操作?
我使用 Java 11、Spring Boot 和 JUnit 5。
您可以使用 org.apache.james.smtpserver.netty.SMTPServer
实现此目的。为此,您需要一些依赖项。
对于Gradle:
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>
SMTPServer
是 james-server-protocols-smtp
的一部分,但指标需要其他指标。
接口的示例实现如下所示:
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();
}
}
我正在编写一个带有不同模拟服务(如 HTTP、SFTP、Buckets、电子邮件)的小型测试库。
关于电子邮件模拟服务,我有一个想法。我找到了一个 Apace James docs and an article,但我不知道如何使它适应我的界面,而且使用 SMTP 服务器很混乱。
interface TestServer {
void start();
void stop();
}
我的想法是创建一个实现,所以整个设置都在构造函数中,我只需要在设置和拆除阶段启动和停止 Mock。
如何使用 Apache James 服务完成此操作?
我使用 Java 11、Spring Boot 和 JUnit 5。
您可以使用 org.apache.james.smtpserver.netty.SMTPServer
实现此目的。为此,您需要一些依赖项。
对于Gradle:
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>
SMTPServer
是 james-server-protocols-smtp
的一部分,但指标需要其他指标。
接口的示例实现如下所示:
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();
}
}