【问题标题】:MailConnectException: Couldn't connect to host, port: smtp.sendgrid.netMailConnectException:无法连接到主机,端口:smtp.sendgrid.net
【发布时间】:2018-07-06 19:07:24
【问题描述】:

我已经为 sendGrid 创建了 API 密钥:

我有以下春季邮件配置:

spring.mail.default-encoding=UTF-8
spring.mail.host=smtp.sendgrid.net
spring.mail.username=apikey
spring.mail.password=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
spring.mail.port=25
spring.mail.protocol=smtp
spring.mail.test-connection=true

我有以下代码:

MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,
            MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
            StandardCharsets.UTF_8.name());
Template template = freemarkerConfig.getTemplate(templateFileName);
String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, props);

helper.setTo("myEmail@gmail.com");
helper.setText(html, true);
helper.setSubject(subject);
helper.setFrom(from);
sender.send(message);
logger.debug("Send email to {} with subject: [{}]", Arrays.toString(to), subject);

然后我尝试启动应用程序并遇到以下错误:

27.01.18 20:07:20.460 [main] WARN  c.d.m.s.c.MailSenderValidatorAutoConfiguration - Mail server is not available
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.sendgrid.net, 25; timeout -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2118)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:712)
    at javax.mail.Service.connect(Service.java:366)
    at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:501)
    at org.springframework.mail.javamail.JavaMailSenderImpl.testConnection(JavaMailSenderImpl.java:382)

我该如何解决这个问题?

附言

587 端口一切正常

但我想使用 ssl 并设置 port=465

spring.mail.port=465

在这种情况下,我的应用程序在启动时冻结。在 5 分钟打印后:

27.01.18 21:06:05.960 [main] WARN  c.d.m.s.c.MailSenderValidatorAutoConfiguration - Mail server is not available
javax.mail.MessagingException: Could not connect to SMTP host: smtp.sendgrid.net, port: 465, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2106)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:712)
    at javax.mail.Service.connect(Service.java:366)
    at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:501)
    at org.springframework.mail.javamail.JavaMailSenderImpl.testConnection(JavaMailSenderImpl.java:382)

我怎样才能避免这种情况?

【问题讨论】:

  • 您的 ISP 或防火墙可能阻止了端口 25。SendGrid documentation 建议使用端口 587
  • @Brian Rogers 您的收据有效! 1 个后续问题 - 如果我设置端口 = 465,我的应用程序会在启动时冻结。有什么想法吗?
  • @gstackoverflow 你尝试telnet 连接到服务了吗?
  • 尝试添加 spring.mail.properties.mail.smtp.auth=true 和/或 spring.mail.properties.mail.smtp.starttls.enable=true

标签: java spring email smtp sendgrid


【解决方案1】:

您可能需要在配置中添加类似的内容。

spring.mail.smtp.ssl.enable=true

【讨论】:

    【解决方案2】:

    在您所在的国家/地区可能无法发现 SendGrid SMTP 服务器。尝试代理或 VPN。

    【讨论】:

      【解决方案3】:

      我使用端口 2525(非特权)而不是 578(特权)在本地解决问题。我仍然可以使用云上的特权。这解决了我的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        相关资源
        最近更新 更多