log mailer errors in ce (#4885)

This commit is contained in:
ruslandoga 2025-01-02 17:33:47 +03:00 committed by GitHub
parent 6ed846395f
commit 14fa39e0b1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 12 additions and 25 deletions

View File

@ -2,34 +2,21 @@ defmodule Plausible.Mailer do
use Bamboo.Mailer, otp_app: :plausible
require Logger
@type result() :: :ok | {:error, :hard_bounce} | {:error, :unknown_error}
@spec send(Bamboo.Email.t()) :: result()
@spec send(Bamboo.Email.t()) :: :ok | {:error, :unknown_error}
def send(email) do
case deliver_now(email) do
{:ok, _email} -> :ok
{:ok, _email, _response} -> :ok
{:error, error} -> handle_error(error)
end
end
try do
deliver_now!(email)
rescue
e ->
# this message is ignored by Sentry, only appears in logs
log = "Failed to send e-mail:\n\n " <> Exception.format(:error, e, __STACKTRACE__)
# Sentry report is built entirely from crash_reason
crash_reason = {e, __STACKTRACE__}
defp handle_error(%{response: response}) when is_binary(response) do
case Jason.decode(response) do
{:ok, %{"ErrorCode" => 406}} ->
{:error, :hard_bounce}
{:ok, response} ->
Logger.error("Failed to send e-mail", sentry: %{extra: %{response: inspect(response)}})
{:error, :unknown_error}
{:error, _any} ->
Logger.error("Failed to send e-mail", sentry: %{extra: %{response: inspect(response)}})
Logger.error(log, crash_reason: crash_reason)
{:error, :unknown_error}
else
_sent_email -> :ok
end
end
defp handle_error(error) do
Logger.error("Failed to send e-mail", sentry: %{extra: %{response: inspect(error)}})
{:error, :unknown_error}
end
end