api-v2/lib/api/emailsender/studymailer.ex
2025-04-16 10:03:13 -03:00

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