Hey there, I'm Victor and I'm configuring a Metabase service on a VPS. I'm using Docker to manage the application and MySQL as the database. When I try to connect to the SMTP server, Metabase reports that my SMTP host or port is incorrect, even though the information is correct. I tested whether the firewall or antivirus might be causing the issue, but they aren't the problem. Does anyone know what could be causing the connection to fail?
Logs from metabase:
2025-03-26 13:18:47,752 ERROR metabase.email :: Erro ao testar a conexão SMTP
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: mail.limpaforte.com.br, 465; timeout 1000;
nested exception is:
java.net.SocketTimeoutException: connect timed out
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)
at metabase.email$fn__75064$test_smtp_settings__75069$fn__75073$fn__75076.invoke(email.clj:195)
at metabase.email$fn__75064$test_smtp_settings__75069$fn__75073.invoke(email.clj:194)
at metabase.email$fn__75064$test_smtp_settings__75069.invoke(email.clj:178)
at metabase.email$fn__75097$guess_smtp_security__75102$fn__75103$fn__75104.invoke(email.clj:219)
at clojure.core$some.invokeStatic(core.clj:2718)
at clojure.core$some.invoke(core.clj:2709)
at metabase.email$fn__75097$guess_smtp_security__75102$fn__75103.invoke(email.clj:217)
at metabase.email$fn__75097$guess_smtp_security__75102.invoke(email.clj:208)
at metabase.email$fn__75123$test_smtp_connection__75128$fn__75129.invoke(email.clj:245)
at metabase.email$fn__75123$test_smtp_connection__75128.invoke(email.clj:226)
at metabase.api.email$fn__82221.invokeStatic(email.clj:114)
at metabase.api.email$fn__82221.invoke(email.clj:94)
at compojure.core$wrap_response$fn__42428.invoke(core.clj:160)
at compojure.core$wrap_route_middleware$fn__42412.invoke(core.clj:132)
at compojure.core$wrap_route_info$fn__42417.invoke(core.clj:139)
at compojure.core$wrap_route_matches$fn__42421.invoke(core.clj:151)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$wrap_route_matches$fn__42421.invoke(core.clj:153)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440.invoke(core.clj:200)
at metabase.server.middleware.auth$enforce_authentication$fn__86742.invoke(auth.clj:17)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440.invoke(core.clj:200)
at compojure.core$make_context$handler__42468.invoke(core.clj:290)
at compojure.core$make_context$fn__42472.invoke(core.clj:300)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$make_context$fn__42472.invoke(core.clj:301)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at metabase.api.routes$fn__98555$fn__98558.invoke(routes.clj:64)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440.invoke(core.clj:200)
at clojure.lang.AFn.applyToHelper(AFn.java:160)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$apply.invoke(core.clj:662)
at metabase.server.routes$fn__98716$fn__98717.doInvoke(routes.clj:70)
at clojure.lang.RestFn.invoke(RestFn.java:436)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440.invoke(core.clj:200)
at compojure.core$make_context$handler__42468.invoke(core.clj:290)
at compojure.core$make_context$fn__42472.invoke(core.clj:300)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$wrap_route_matches$fn__42421.invoke(core.clj:153)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$wrap_route_matches$fn__42421.invoke(core.clj:153)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at compojure.core$wrap_route_matches$fn__42421.invoke(core.clj:153)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440$f__42441$respond_SINGLEQUOTE___42442.invoke(core.clj:197)
at metabase.server.routes$fn__98701$fn__98703.invoke(routes.clj:47)
at compojure.core$routes$fn__42440$f__42441.invoke(core.clj:198)
at compojure.core$routes$fn__42440.invoke(core.clj:200)
at metabase.server.middleware.exceptions$catch_uncaught_exceptions$fn__95348.invoke(exceptions.clj:103)
at metabase.server.middleware.exceptions$catch_api_exceptions$fn__95345.invoke(exceptions.clj:91)
at metabase.server.middleware.log$log_api_call$fn__100440$fn__100441$fn__100442.invoke(log.clj:216)
at metabase.driver.sql_jdbc.execute.diagnostic$do_with_diagnostic_info.invokeStatic(diagnostic.clj:18)
at metabase.driver.sql_jdbc.execute.diagnostic$do_with_diagnostic_info.invoke(diagnostic.clj:12)
at metabase.server.middleware.log$log_api_call$fn__100440$fn__100441.invoke(log.clj:208)
at toucan2.execute$do_with_call_counts.invokeStatic(execute.clj:112)
at toucan2.execute$do_with_call_counts.invoke(execute.clj:103)
at metabase.server.middleware.log$log_api_call$fn__100440.invoke(log.clj:207)
at metabase.server.middleware.browser_cookie$ensure_browser_id_cookie$fn__103867.invoke(browser_cookie.clj:42)
at metabase.server.middleware.security$add_security_headers$fn__79598.invoke(security.clj:153)
at metabase.server.middleware.json$wrap_json_body$fn__102607.invoke(json.clj:67)
at metabase.server.middleware.offset_paging$handle_paging$fn__79622.invoke(offset_paging.clj:45)
at metabase.server.middleware.json$wrap_streamed_json_response$fn__102625.invoke(json.clj:103)
at ring.middleware.keyword_params$wrap_keyword_params$fn__104134.invoke(keyword_params.clj:55)
at ring.middleware.params$wrap_params$fn__104153.invoke(params.clj:77)
at metabase.server.middleware.misc$maybe_set_site_url$fn__50560.invoke(misc.clj:61)
at metabase.server.middleware.session$reset_session_timeout$fn__63840.invoke(session.clj:441)
at metabase.server.middleware.session$bind_current_user$fn__63809$fn__63810.invoke(session.clj:336)
at metabase.server.middleware.session$do_with_current_user.invokeStatic(session.clj:315)
at metabase.server.middleware.session$do_with_current_user.invoke(session.clj:304)
at metabase.server.middleware.session$bind_current_user$fn__63809.invoke(session.clj:335)
at metabase.server.middleware.session$wrap_current_user_info$fn__63790.invoke(session.clj:285)
at metabase.server.middleware.session$wrap_session_id$fn__63773.invoke(session.clj:217)
at metabase.server.middleware.auth$wrap_api_key$fn__86750.invoke(auth.clj:30)
at ring.middleware.cookies$wrap_cookies$fn__104054.invoke(cookies.clj:216)
at metabase.server.middleware.misc$add_content_type$fn__50542.invoke(misc.clj:29)
at metabase.server.middleware.misc$disable_streaming_buffering$fn__50568.invoke(misc.clj:78)
at ring.middleware.gzip$wrap_gzip$fn__104096.invoke(gzip.clj:86)
at metabase.server.middleware.misc$bind_request$fn__50571.invoke(misc.clj:95)
at metabase.server.middleware.ssl$redirect_to_https_middleware$fn__103883.invoke(ssl.clj:41)
at metabase.server$async_proxy_handler$fn__99206.invoke(server.clj:77)
at metabase.server.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle(Unknown Source)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
at org.eclipse.jetty.server.Server.handle(Server.java:563)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:416)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:385)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:272)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:140)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:936)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1080)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketTimeoutException: connect timed out
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.base/java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.base/java.net.SocksSocketImpl.connect(Unknown Source)
at java.base/java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:333)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:214)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2160)
... 138 more
2025-03-26 13:18:48,262 WARN api.email :: Problem connecting to mail server: Couldn't connect to host, port: mail.limpaforte.com.br, 465; timeout 1000: connect timed out
2025-03-26 13:18:48,270 DEBUG middleware.log :: PUT /api/email 400 5.6 s (0 chamadas ao banco de dados)
{:errors {:email-smtp-host "Wrong host or port", :email-smtp-port "Wrong host or port"}}
Hello.
No clue if this will help you or not.
In my case, i had the same error. My metabase instance is in Linode. They block the email ports unless you ask them to open them.
After sending them an email with my request, the ports where enabled and the email function worked as intended.
HTH
First of all, thank you for your response. I checked with my VPS provider and confirmed that the ports were not blocked. However, after running all possible tests, there were no more options left to try. So, I decided to switch to a new VPS provider to verify whether the information provided by the previous provider was accurate. With the new provider, the configuration worked without any issues. This confirmed my suspicion that the previous provider either gave me incorrect information or that the VPS's performance/network was not sufficient for this configuration. Now, with the new provider, I haven't encountered any problems.