From b7e5a5d6338adff5054b187feac901af8d412ad1 Mon Sep 17 00:00:00 2001 From: ruslandoga <67764432+ruslandoga@users.noreply.github.com> Date: Mon, 23 Dec 2024 12:45:18 +0700 Subject: [PATCH] log mailer errors in ce --- lib/plausible/mailer.ex | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/lib/plausible/mailer.ex b/lib/plausible/mailer.ex index fb852f9aed5ae..a6b9fdf922913 100644 --- a/lib/plausible/mailer.ex +++ b/lib/plausible/mailer.ex @@ -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 - - defp handle_error(%{response: response}) when is_binary(response) do - case Jason.decode(response) do - {:ok, %{"ErrorCode" => 406}} -> - {:error, :hard_bounce} + 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__} - {: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 + _success -> :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