57 lines
1.9 KiB
Elixir
57 lines
1.9 KiB
Elixir
defmodule Api.StudyMailer do
|
|
import Swoosh.Email
|
|
alias Api.EmailToSendContext
|
|
alias Api.Mailer
|
|
|
|
def create_mail(mail) do
|
|
|
|
|
|
Envar.load(".env")
|
|
Envar.require_env_file(".env")
|
|
htmlbody = File.read(Envar.get("EMAIL_BODY_PATH"))
|
|
|> elem(1)
|
|
|> Solid.parse()
|
|
|> elem(1)
|
|
|> Solid.render!(
|
|
%{"mail" =>
|
|
%{"patientname" => mail.patientname |> String.replace("^", " "),
|
|
"studydate" => mail.studydate,
|
|
"patientid" => mail.patientid,
|
|
"accessionnumber" => mail.accessionnumber,
|
|
"idstudy" => mail.idstudy}
|
|
})
|
|
|> to_string()
|
|
new()
|
|
|> to({mail.patientname |> String.replace("^", " "), mail.patientemail |> String.trim |> String.replace(" ", "")})
|
|
|> from({Envar.get("FROM"), Envar.get("SMTP_USER")})
|
|
|> subject("Resultado del estudio")
|
|
|> html_body(htmlbody)
|
|
|
|
end
|
|
|
|
def deliver_mail() do
|
|
email = EmailToSendContext.get_next_email()
|
|
if email do
|
|
email_regex = ~r/[^@ \t\r\n]+@[^@ \t\r\n]+\.[^@ \t\r\n]+/
|
|
if String.match?(email.patientemail, email_regex) do
|
|
emailtosendtest = create_mail(email)
|
|
{res, term} = Mailer.deliver(emailtosendtest)
|
|
case res do
|
|
:ok ->
|
|
EmailToSendContext.mark_sent(email.idemailtosend, %{sent: true, forcereprocess: false})
|
|
:error ->
|
|
EmailToSendContext.mark_sent(email.idemailtosend, %{errormsg: "Error", retries: email.retries + 1, forcereprocess: false})
|
|
IO.inspect(res, label: "===> ERROR ======>")
|
|
IO.inspect(term, label: "===> ERROR ======>")
|
|
_ ->
|
|
IO.inspect(res)
|
|
end
|
|
else
|
|
EmailToSendContext.mark_sent(email.idemailtosend, %{errormsg: "Mail Incorrecto", retries: 10, forcereprocess: false})
|
|
end
|
|
else
|
|
IO.puts("No hay estudios para enviar. Revisar que los mismos tengan un informe y mail correcto")
|
|
end
|
|
end
|
|
end
|