当前位置: 首页 > 知识库问答 >
问题:

Java电子邮件在本地spring应用程序上工作,但不在部署的Heroku应用程序上工作

夏晋
2023-03-14

所以我试图从Heroku上部署的spring应用程序发送一封电子邮件。在本地运行时,电子邮件发送得非常好,但在heroku上,我得到了这个错误:

MessagingException:无法将套接字转换为TLS;2021-04-30T14:46:49.318141+00:00 app[web.1]:嵌套异常为:2021-04-30T14:46:49.318145+00:00 app[web.1]:javax.net.ssl.sslhandShakeException:没有适当的协议(协议被禁用或密码套件不合适)2021-04-30T14:46:49.318644+00:00app[web.1]:at com.sun.mail.smtp.smtptransport.starttls(Smtptransport.java:1907)2021-04-30T14:46:49.318767+00:00app[web.1]:TpTransport.java:666)2021-04-30T14:46:49.318886+00:00 app[web.1]:at javax.mail.service.connect(service.java:317)2021-04-30T14:46:49.318972+00:00 app[web.1]:at javax.mail.service.connect(service.java:176)2021-04-30T14:46:49.318972+00:00 app[web.1]:at javax.mail.service.connect(service.java:125)

然而,这个错误就这样神奇地出现了。直到昨天,它在heroku上工作得很好。我猜也许heroku只是标记了它,因为它认为这是可疑的。有人知道有什么好办法吗?

以下是我的代码:

public static void sendEmail(User user) throws MessagingException {    
        //System.out.println("Preparing to send email");
        Properties properties = new Properties();
        
        properties.put("mail.smtp.auth",  "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.host",  "smtp.gmail.com");
        properties.put("mail.smtp.port",  "587");
        
        String myAccountEmail = "-redacted-";
        String password = "-redacted-";
        
        User recipient = user;
        
        javax.mail.Session session = javax.mail.Session.getInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(myAccountEmail, password);
            }
        });
        
        Message message = prepareMessage(session, myAccountEmail, recipient);
        
        Transport.send(message);
        //System.out.println("Message sent successfully");
    }

共有1个答案

杨安歌
2023-03-14

我不确定这是否是一个合适的解决方案,或者是否适合您的情况,但我已经花了几天时间来解决这个问题,解决方案是升级heroku运行我的应用程序的java版本。

在应用程序根文件夹上的System.Properties文件中:

java.runtime.version=13

事实证明,他们使用的Java11映像有一些旧的SSL版本在继续,(就我而言)作为开发人员,我们没有办法禁用它。

它解决了我的问题,我希望它也能解决你的问题。不确定Heroku是否会在未来为Java11 Dyno修复这个问题。

 类似资料:
  • 我已经很久没有使用Heroku了,所以我有点生疏了。我创建了一个运行Ratchet IOServer的小型PHP应用程序。它监听端口5000。如果我运行并使用连接,一切似乎都能正常工作。我尝试了几种让PHP进程运行并接受连接的方法。 我的Procfile如下所示; 正在运行 然后,当我将服务器部署到Heroku时,它就不工作了。当我尝试telnet到端口上的框时,我得到 我刚刚读了关于Heroku

  • 我正在使用maven,Eclipse。从Eclipse运行时一切都很好。但同样,如果部署在tomcat上,则返回http状态404。日志显示在类路径上未检测到Spring WebApplicationInitializer类型,但我正在使用web.xml。 如果有人能帮忙,我不知道这里有什么问题。筛选器和servlet映射没有问题。 securityFilter org.SpringFramewo

  • 我一直使用Heroku从很长一段时间,它的工作很好。现在没有任何环境变化,赫鲁库不再为我工作了。我的应用程序在本地运行良好,但当我在heroku上部署它时,它会给应用程序带来错误。然后我创建了一个新的应用程序,在没有做任何更改的情况下,我在Heroku上部署了这个新的应用程序。它给出了完全相同的错误,这意味着问题不是我的应用程序,而是heroku或我部署应用程序的方式。 我使用create rea

  • 创建了一个spring boot REST应用程序。 在Eclipse中作为运行时,作为Spring boot App 运行。它工作得很好。 REST API使用URL- 在tomcat上部署为WAR 我执行了以下步骤 主类扩展 很少有文档说重写的方法。但在我的示例中,没有方法。我下载了spring tools 4.0 使用生成包。生成的War包名称为 在tomcat(版本)上部署了war包 访问

  • 我正在创建自己的应用程序。我在AndroidLollipop和Marshmallow上测试了它-一切都很好。但每当我尝试Android Kitkat时,就会发生错误。以下是错误日志: 看起来问题出在“progi”类的第62行,但是——对我来说——一切都很好,尤其是在新的Android版本上运行得很好。 如果有人问“Tabilica从意图中得到了什么?” 任何想法是什么问题?