@@ -2,34 +2,21 @@ defmodule Plausible.Mailer do
22 use Bamboo.Mailer , otp_app: :plausible
33 require Logger
44
5- @ type result ( ) :: :ok | { :error , :hard_bounce } | { :error , :unknown_error }
6-
7- @ spec send ( Bamboo.Email . t ( ) ) :: result ( )
5+ @ spec send ( Bamboo.Email . t ( ) ) :: :ok | { :error , :unknown_error }
86 def send ( email ) do
9- case deliver_now ( email ) do
10- { :ok , _email } -> :ok
11- { :ok , _email , _response } -> :ok
12- { :error , error } -> handle_error ( error )
13- end
14- end
15-
16- defp handle_error ( % { response: response } ) when is_binary ( response ) do
17- case Jason . decode ( response ) do
18- { :ok , % { "ErrorCode" => 406 } } ->
19- { :error , :hard_bounce }
7+ try do
8+ deliver_now! ( email )
9+ rescue
10+ e ->
11+ # this message is ignored by Sentry, only appears in logs
12+ log = "Failed to send e-mail:\n \n " <> Exception . format ( :error , e , __STACKTRACE__ )
13+ # Sentry report is built entirely from crash_reason
14+ crash_reason = { e , __STACKTRACE__ }
2015
21- { :ok , response } ->
22- Logger . error ( "Failed to send e-mail" , sentry: % { extra: % { response: inspect ( response ) } } )
23- { :error , :unknown_error }
24-
25- { :error , _any } ->
26- Logger . error ( "Failed to send e-mail" , sentry: % { extra: % { response: inspect ( response ) } } )
16+ Logger . error ( log , crash_reason: crash_reason )
2717 { :error , :unknown_error }
18+ else
19+ _sent_email -> :ok
2820 end
2921 end
30-
31- defp handle_error ( error ) do
32- Logger . error ( "Failed to send e-mail" , sentry: % { extra: % { response: inspect ( error ) } } )
33- { :error , :unknown_error }
34- end
3522end
0 commit comments