java - 如何在 Java 中创建模拟电子邮件服务?
问题描述
我正在编写一个带有不同模拟服务(例如 HTTP、SFTP、Buckets、Email)的小型测试库。
当谈到电子邮件模拟服务时,我有一个思维障碍。我找到了Apace James 文档和一篇文章,但我不知道如何将其调整到我的界面,并且使用 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();
}
}
推荐阅读
- javascript - 为什么发生在 javascript 中的 replace()
- php - Sql 从一个表中选择,但使用另一个表值作为 where 子句
- css - 如何将 justify-content: space-between 应用于此列?
- python - 在 Post 上添加多对多字段时出错
- java - Android Firebase Gmail 注销
- angular - authguard 在使用路由器导航时不起作用,在页面刷新时工作正常
- java - Grails + Java:尝试执行 MessagePostProcessor 的实现
- composer-php - Opencart 3,作曲家安装 dompdf
- git - 使用“git checkout”时修改后的文件会发生什么?
- android - 如何在不单击任何内容的情况下移动到另一个活动