1

我尝试在我的 Spring-Application 中测试我的 Gmail smtp 并遵循本教程。我已经按照教程中的说明实现了它,但是我的 EmailService 抛出了 MailSendException:

org.springframework.mail.MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 2525; timeout 5000;
  nested exception is:
    java.net.ConnectException: Connection refused: connect. Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 2525; timeout 5000;
  nested exception is:
    java.net.ConnectException: Connection refused: connect
; message exception details (1) are:
Failed message 1:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 2525; timeout 5000;
  nested exception is:
    java.net.ConnectException: Connection refused: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2210)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:722)
    at javax.mail.Service.connect(Service.java:342)

有没有人提示如何解决这个问题?(从未测试过 SMTP/Email 之类的东西,因此只是按照上面的教程进行操作。编辑:我可以手动发送电子邮件而没有任何问题,但我需要对其进行测试。我的 application.yml:

spring.mail.host: smtp.gmail.com
spring.mail.port: 587
spring.mail.properties.mail.smtp.starttls.enable: true
spring.mail.username: ************@gmail.com
spring.mail.password: ***************
spring.mail.properties.mail.smtp.starttls.required: true
spring.mail.properties.mail.smtp.auth: true
spring.mail.properties.mail.smtp.connectiontimeout: 5000
spring.mail.properties.mail.smtp.timeout: 5000
spring.mail.properties.mail.smtp.writetimeout: 5000
4

1 回答 1

2

从日志中可以看到,Spring 正在尝试连接到端口2525但无法建立连接。这意味着在测试执行期间,此端口上没有正在运行的邮件服务器 - 这应该由 JUnit Rule 实现提供(如果您使用的是 JUnit5,请使用Extensions

确保您的测试配置设置正确。这意味着,检查您的测试代码,例如

@Rule
public SmtpServerRule smtpServerRule = new SmtpServerRule(2525);

火柴

src/test/resources/application.yml

spring:
  mail:
    default-encoding: UTF-8
    host: localhost
    jndi-name:
    username: username
    password: secret
    port: 2525
    properties:
      mail:
        debug: false
        smtp:
          debug: false
          auth: true
          starttls: true
    protocol: smtp
    test-connection: false

我还建议更新教程中的代码并添加测试用户 - 因为它可以与安全协议一起使用。

public class SmtpServerRule extends ExternalResource {
// omitted for brevity
@Override
protected void before() throws Throwable {
   super.before();
   smtpServer = new GreenMail(new ServerSetup(port, null, "smtp"));
   smtpServer.addUser("username", "secret");
   smtpServer.start();
}
// omitted for brevity
}

此外,有关更具体的设置,请参阅GreenMail 官方文档

于 2020-09-01T13:15:41.497 回答