Test email works, but subscription emails fail with SMTPSendFailedException: 554 Envelope recipients do not match headers

Hello,
We are evaluating Metabase and have it deployed locally. I have configured email and the test email sent from the admin email configuration page works.
When I subscribe to a dashboard and click "Send email now" I never receive the email.
In the logs I see this:
[c1162396-a586-4a93-aeb9-2da00f1522ba] 2024-04-18T11:17:32-05:00 ERROR metabase.pulse Error sending notification!,com.sun.mail.smtp.SMTPSendFailedException: 554 Envelope recipients do not match headers: todd.erickson@cloudreach.com vs , at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2374), at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:2095), at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1301), at postal.smtp$smtp_send_STAR_.invokeStatic(smtp.clj:36), at postal.smtp$smtp_send_STAR_.invoke(smtp.clj:29), at postal.smtp$smtp_send.invokeStatic(smtp.clj:58), at postal.smtp$smtp_send.doInvoke(smtp.clj:39), at clojure.lang.RestFn.invoke(RestFn.java:423), at postal.core$send_message.invokeStatic(core.clj:36), at postal.core$send_message.invoke(core.clj:29), at metabase.email$send_message_or_throw_BANG_.invokeStatic(email.clj:156), at metabase.email$send_message_or_throw_BANG_.invoke(email.clj:145), at metabase.pulse$fn__99266.invokeStatic(pulse.clj:554), at metabase.pulse$fn__99266.invoke(pulse.clj:551), at clojure.lang.MultiFn.invoke(MultiFn.java:229), at clojure.lang.AFn.applyToHelper(AFn.java:154), 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.util.retry$decorate$fn$reify__69590.call(retry.clj:77), at io.github.resilience4j.retry.Retry.lambda$decorateCallable$5(Retry.java:306), at metabase.util.retry$decorate$fn__69589.doInvoke(retry.clj:78), at clojure.lang.RestFn.applyTo(RestFn.java:137), at clojure.core$apply.invokeStatic(core.clj:667), at clojure.core$apply.invoke(core.clj:662), at metabase.pulse$send_notification_retrying_BANG_.invokeStatic(pulse.clj:563), at metabase.pulse$send_notification_retrying_BANG_.doInvoke(pulse.clj:560), at clojure.lang.RestFn.invoke(RestFn.java:408), at metabase.pulse$send_notifications_BANG_$fn__99281.invoke(pulse.clj:570), at metabase.pulse$send_notifications_BANG_.invokeStatic(pulse.clj:569), at metabase.pulse$send_notifications_BANG_.invoke(pulse.clj:565), at metabase.pulse$send_pulse_BANG_.invokeStatic(pulse.clj:593), at metabase.pulse$send_pulse_BANG_.doInvoke(pulse.clj:574), at clojure.lang.RestFn.invoke(RestFn.java:410), at metabase.api.pulse$fn__101417.invokeStatic(pulse.clj:349), at metabase.api.pulse$fn__101417.invoke(pulse.clj:331), at compojure.core$wrap_response$fn__44649.invoke(core.clj:160), at compojure.core$wrap_route_middleware$fn__44633.invoke(core.clj:132), at compojure.core$wrap_route_info$fn__44638.invoke(core.clj:139), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:151), at clojure.lang.Var.invoke(Var.java:393), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:153), at clojure.lang.Var.invoke(Var.java:393), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:153), at clojure.lang.Var.invoke(Var.java:393), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:153), at clojure.lang.Var.invoke(Var.java:393), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:152), at clojure.lang.Var.invoke(Var.java:393), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661.invoke(core.clj:200), at metabase.pulse.preview$style_tag_nonce_middleware$fn__99566.invoke(preview.clj:165), at metabase.server.middleware.auth$enforce_authentication$fn__93998.invoke(auth.clj:17), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661.invoke(core.clj:200), at compojure.core$make_context$handler__44689.invoke(core.clj:290), at compojure.core$make_context$fn__44693.invoke(core.clj:300), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$make_context$fn__44693.invoke(core.clj:301), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at metabase.api.routes$fn__102024$fn__102027.invoke(routes.clj:67), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661.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__102189$fn__102190.doInvoke(routes.clj:72), at clojure.lang.RestFn.invoke(RestFn.java:436), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661.invoke(core.clj:200), at compojure.core$make_context$handler__44689.invoke(core.clj:290), at compojure.core$make_context$fn__44693.invoke(core.clj:300), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:153), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:153), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at compojure.core$wrap_route_matches$fn__44642.invoke(core.clj:153), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661$f__44662$respond_SINGLEQUOTE___44663.invoke(core.clj:197), at metabase.server.routes$fn__102174$fn__102176.invoke(routes.clj:49), at compojure.core$routes$fn__44661$f__44662.invoke(core.clj:198), at compojure.core$routes$fn__44661.invoke(core.clj:200), at metabase.server.middleware.exceptions$catch_uncaught_exceptions$fn__98797.invoke(exceptions.clj:108), at metabase.server.middleware.exceptions$catch_api_exceptions$fn__98794.invoke(exceptions.clj:96), at metabase.server.middleware.log$log_api_call$fn__102458$fn__102459$fn__102460.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__102458$fn__102459.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__102458.invoke(log.clj:207), at metabase.server.middleware.browser_cookie$ensure_browser_id_cookie$fn__104493.invoke(browser_cookie.clj:40), at metabase.server.middleware.security$add_security_headers$fn__98753.invoke(security.clj:182), at metabase.server.middleware.json$wrap_json_body$fn__46006.invoke(json.clj:67), at metabase.server.middleware.offset_paging$handle_paging$fn__84911.invoke(offset_paging.clj:43), at metabase.server.middleware.json$wrap_streamed_json_response$fn__46024.invoke(json.clj:103), at ring.middleware.keyword_params$wrap_keyword_params$fn__104760.invoke(keyword_params.clj:55), at ring.middleware.params$wrap_params$fn__104779.invoke(params.clj:77), at metabase.server.middleware.misc$maybe_set_site_url$fn__67232.invoke(misc.clj:61), at metabase.server.middleware.session$reset_session_timeout$fn__72655.invoke(session.clj:543), at metabase.server.middleware.session$bind_current_user$fn__72621$fn__72622.invoke(session.clj:438), at metabase.server.middleware.session$do_with_current_user.invokeStatic(session.clj:417), at metabase.server.middleware.session$do_with_current_user.invoke(session.clj:401), at metabase.server.middleware.session$bind_current_user$fn__72621.invoke(session.clj:437), at metabase.server.middleware.session$wrap_current_user_info$fn__72604.invoke(session.clj:376), at metabase.server.middleware.session$wrap_session_id$fn__72576.invoke(session.clj:255), at metabase.server.middleware.auth$wrap_static_api_key$fn__94006.invoke(auth.clj:30), at ring.middleware.cookies$wrap_cookies$fn__104680.invoke(cookies.clj:194), at metabase.server.middleware.misc$add_content_type$fn__67214.invoke(misc.clj:29), at metabase.server.middleware.misc$disable_streaming_buffering$fn__67240.invoke(misc.clj:78), at ring.middleware.gzip$wrap_gzip$fn__104722.invoke(gzip.clj:86), at metabase.server.middleware.misc$bind_request$fn__67243.invoke(misc.clj:95), at metabase.server.middleware.ssl$redirect_to_https_middleware$fn__104509.invoke(ssl.clj:41), at metabase.server$async_proxy_handler$fn__67654.invoke(server.clj:78), 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$RequestDispatchable.dispatch(HttpChannel.java:1598), at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753), at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501), at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287), 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:421), at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390), at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277), at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199), at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411), at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969), at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194), at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149), at java.base/java.lang.Thread.run(Unknown Source)
What am I missing?

No idea ... Did you try sending an email outside of metabase?

What mail server are you using and can you share admin -> Troubleshooting -> Diagnostic info

What do you mean "did I try sending an email outside of metabase?" The test email sent from the admin email configuration page works so I know my mail service is working and I have things configured correctly in Metabase.
Is there some other place I can send email from within Metabase?

Here is the diagnostic info:

{
"browser-info": {
"language": "en-US",
"platform": "MacIntel",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"vendor": "Google Inc."
},
"system-info": {
"file.encoding": "UTF-8",
"java.runtime.name": "OpenJDK Runtime Environment",
"java.runtime.version": "11.0.22+7",
"java.vendor": "Eclipse Adoptium",
"java.vendor.url": "https://adoptium.net/",
"java.version": "11.0.22",
"java.vm.name": "OpenJDK 64-Bit Server VM",
"java.vm.version": "11.0.22+7",
"os.name": "Linux",
"os.version": "6.5.0-1014-aws",
"user.language": "en",
"user.timezone": "GMT"
},
"metabase-info": {
"databases": [
"h2",
"mysql"
],
"hosting-env": "unknown",
"application-database": "h2",
"application-database-details": {
"database": {
"name": "H2",
"version": "2.1.214 (2022-06-13)"
},
"jdbc-driver": {
"name": "H2 JDBC Driver",
"version": "2.1.214 (2022-06-13)"
}
},
"run-mode": "prod",
"version": {
"date": "2024-04-16",
"tag": "v0.49.6",
"hash": "5abf130"
},
"settings": {
"report-timezone": null
}
}
}

So where exactly does it fail and what is the recipient email you are entering?

Hello Tony,

We are self housing the open source version as we do our evaluation.

I created a simple dashboard and I am trying to email it to myself (by picking my metabase user) which has my cloudreach email address. I am also trying to send it to my personal Gmail account. The email fails to both addresses.

As I noted above, the test email sent from the admin email configuration page worked.

Thanks for looking into this for me.

Whats in this sample dashboard? did you try to change the visual to see if it ends up sending or not?