可以将MailDev与Java一起使用吗?
我在远程服务器上安装了一个实例 我试图了解是否有可能使用这个假的SMTP服务器用Java(使用标准JavaMailSender)发送电子邮件 配置只需要URL和端口,但在我的例子中,它不起作用 它总是返回:可以将MailDev与Java一起使用吗?,java,email,smtp,jakarta-mail,Java,Email,Smtp,Jakarta Mail,我在远程服务器上安装了一个实例 我试图了解是否有可能使用这个假的SMTP服务器用Java(使用标准JavaMailSender)发送电子邮件 配置只需要URL和端口,但在我的例子中,它不起作用 它总是返回: 邮件服务器连接失败;嵌套异常为com.sun.mail.util.MailConnectException:无法连接到主机… WebUI运行正常,我可以在服务器上看到空的收件箱 谢谢。您似乎遇到了连接问题。虽然我不能告诉你原因是什么,也许我可以提供一个替代方案来测试你的电子邮件 使用,您可以
邮件服务器连接失败;嵌套异常为com.sun.mail.util.MailConnectException:无法连接到主机…
WebUI运行正常,我可以在服务器上看到空的收件箱
谢谢。您似乎遇到了连接问题。虽然我不能告诉你原因是什么,也许我可以提供一个替代方案来测试你的电子邮件 使用,您可以运行嵌入式SMTP服务器并在junit测试中查询该服务器。我在我的开源项目中经常使用这一点,并为此创建了:
包testutil.testrules;
导入org.jetbrains.annotations.NotNull;
导入org.junit.rules.ExternalResource;
导入org.subethamail.smtp.server.SMTPServer;
导入org.subethamail.wiser.wiser;
导入org.subethamail.wiser.WiserMessage;
导入javax.mail.MessaginException;
导入javax.mail.internet.mimessage;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.PrintStream;
导入java.util.Iterator;
导入java.util.List;
/**
*SmtpServerRule—包装Wiser实例(Java中的SMTP服务器)的测试规则,在每次测试前后启动和停止。
*
*SmtpServerRule通过将实现委托给实例来公开与{@link Wiser}实例相同的方法。然而,这些方法不可能是有效的
*在JUnit语句外部使用(否则会引发{@link IllegalStateException})。
*
*{@link Wiser}实例可以直接检索,但也只能从JUnit语句内部检索。
*/
公共类SmtpServerRule扩展了ExternalResource{
私人最终智者智者=新智者();
私人最终国际港口;
公共SmtpServerRule(@NotNull整数端口){
this.port=端口;
}
@凌驾
在()之前受保护的无效{
this.wiser.setPort(端口);
这个.wiser.start();
}
@凌驾
受保护的空后(){
这个。更聪明。停止();
}
@NotNull
公众智者变得智者{
checkState(“getWiser()”);
还这个。更聪明;
}
@NotNull
公共列表getMessages(){
checkState(“getMessages()”);
返回wiser.getMessages();
}
@NotNull
公共MIMessage getOnlyMessage(字符串信封接收者)
抛出消息异常{
checkState(“getMessages()”);
List messages=getMessages();
assertThat(messages).hasSize(1);
迭代器迭代器=messages.Iterator();
WiserMessage WiserMessage=iterator.next();
断言(wiserMessage.getEnveloperReceiver()).isEqualTo(EnveloperReceiver);
mimessage MimeMessage=wiserMessage.getmimessage();
iterator.remove();
返回mimeMessage;
}
@NotNull
公共MIMessage和开发getOnlyMessage()
抛出消息异常{
checkState(“getMessages()”);
List messages=getMessages();
assertThat(messages).hasSize(1);
迭代器迭代器=messages.Iterator();
WiserMessage WiserMessage=iterator.next();
iterator.remove();
返回新的mimessageanddevelope(wiserMessage.getmimessage(),wiserMessage.getEnvelopeSender());
}
@NotNull
公共MIMessage getMessage(字符串信封接收者)
抛出消息异常{
checkState(“getMessages()”);
List messages=getMessages();
迭代器迭代器=messages.Iterator();
while(iterator.hasNext()){
WiserMessage WiserMessage=iterator.next();
if(wiserMessage.GetEnveloperReceiver().equals(EnveloperReceiver)){
mimessage MimeMessage=wiserMessage.getmimessage();
iterator.remove();
返回mimeMessage;
}
}
抛出新的断言错误(“未找到收件人的邮件”+信封收件人);
}
@NotNull
公共SMTPServer getServer(){
checkState(“getServer()”);
返回wiser.getServer();
}
公共布尔接受(字符串发件人、字符串收件人){
检查状态(“接受(字符串,字符串)”;
更明智地返回。接受(来自,接收者);
}
公共void传递(字符串发件人、字符串收件人、InputStream数据)
抛出IOException{
检查状态(“交付(字符串、字符串、输入流)”;
更明智地交付(来自、接收者、数据);
}
公共无效转储消息(打印流输出)
抛出消息异常{
检查状态(“转储消息(打印流)”;
更明智的。转储消息(输出);
}
私有void checkState(字符串方法){
if(this.wiser==null){
抛出新的IllegalStateException(格式(“%s”不能在JUnit语句之外调用),方法);
}
}
}
然后我就这样使用它:
公共类MailerLiveTest{
专用静态最终整数服务器_端口=251;
@统治
公共最终SmtpServerRule SmtpServerRule=新SmtpServerRule(服务器\端口);
@以前
公共作废设置(){
mailer=MailerBuilder.withSMTPServer(“localhost”,SERVER_PORT).buildMailer();
}
@试验
public void createMailSession_EmptySubjectAndBody(){
//使用mailer发送邮件,该邮件发送到localhost:251
mimessageanddevelope receivedMimeMessage=smtpServerRule.getOnlyMessage();
Email receivedEmail=EmailConverter.mimeMessageToEmail(receivedMimeMessage.getMimeMessage());
//对电子邮件对象执行断言。。。
}
}
看起来像是连接问题。是否有防火墙或防病毒软件阻止通话?您能否从运行Java客户机的机器上访问MailDev服务器