2020-01-26 21:36:50 +01:00
|
|
|
defmodule Mobilizon.Web.Email do
|
2019-09-17 02:45:32 +02:00
|
|
|
@moduledoc """
|
|
|
|
The Email context.
|
|
|
|
"""
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
use Bamboo.Phoenix, view: Mobilizon.Web.EmailView
|
2019-09-17 02:45:32 +02:00
|
|
|
|
2020-11-13 14:02:33 +01:00
|
|
|
alias Ecto.UUID
|
2020-12-21 15:47:26 +01:00
|
|
|
alias Mobilizon.{Config, Events}
|
|
|
|
alias Mobilizon.Events.Event
|
|
|
|
alias Mobilizon.Service.Export.ICalendar
|
2020-01-28 19:18:33 +01:00
|
|
|
alias Mobilizon.Web.EmailView
|
|
|
|
|
2019-09-23 19:33:58 +02:00
|
|
|
@spec base_email(keyword()) :: Bamboo.Email.t()
|
|
|
|
def base_email(args) do
|
|
|
|
instance = Config.instance_config()
|
|
|
|
|
2019-09-30 18:18:04 +02:00
|
|
|
args
|
|
|
|
|> new_email()
|
2019-11-19 11:12:59 +01:00
|
|
|
|> from({Config.instance_name(), Config.instance_email_from()})
|
2019-09-23 19:33:58 +02:00
|
|
|
|> put_header("Reply-To", Config.instance_email_reply_to())
|
2020-11-13 14:02:33 +01:00
|
|
|
|> put_header("Date", date())
|
|
|
|
|> put_header("Message-Id", message_id())
|
2019-09-23 19:33:58 +02:00
|
|
|
|> assign(:instance, instance)
|
2020-01-28 19:18:33 +01:00
|
|
|
|> put_html_layout({EmailView, "email.html"})
|
|
|
|
|> put_text_layout({EmailView, "email.text"})
|
2019-09-17 02:45:32 +02:00
|
|
|
end
|
2020-11-13 14:02:33 +01:00
|
|
|
|
|
|
|
# Generating an UUID randomly causes Bamboo.Test.assert_delivered_email/1 to fail
|
|
|
|
defp message_id do
|
|
|
|
if Application.fetch_env!(:mobilizon, :env) == :test do
|
|
|
|
"TEST_ENV_MESSAGE_ID@#{Config.instance_hostname()}"
|
|
|
|
else
|
|
|
|
"#{UUID.generate()}@#{Config.instance_hostname()}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
defp date do
|
|
|
|
if Application.fetch_env!(:mobilizon, :env) == :test do
|
|
|
|
"REMOVED FOR TESTING"
|
|
|
|
else
|
2020-11-14 19:07:19 +01:00
|
|
|
Timex.format!(DateTime.utc_now(), "{WDshort}, {D} {Mshort} {YYYY} {h24}:{m}:{s} {Z}")
|
2020-11-13 14:02:33 +01:00
|
|
|
end
|
|
|
|
end
|
2020-12-21 15:47:26 +01:00
|
|
|
|
|
|
|
def add_event_attachment(%Bamboo.Email{} = email, %Event{id: event_id}) do
|
|
|
|
with {:ok, %Event{} = event} <- Events.get_event_with_preload(event_id),
|
|
|
|
{:ok, event_ics_data} <- ICalendar.export_event(event) do
|
|
|
|
put_attachment(email, %Bamboo.Attachment{
|
|
|
|
filename: Slugger.slugify_downcase(event.title),
|
|
|
|
content_type: "text/calendar",
|
|
|
|
data: event_ics_data
|
|
|
|
})
|
|
|
|
else
|
|
|
|
_ ->
|
|
|
|
email
|
|
|
|
end
|
|
|
|
end
|
2019-09-17 02:45:32 +02:00
|
|
|
end
|