diff --git a/apps/lenra/lib/lenra/services/email_services.ex b/apps/lenra/lib/lenra/services/email_services.ex
index c50b72f0..f4ce0155 100644
--- a/apps/lenra/lib/lenra/services/email_services.ex
+++ b/apps/lenra/lib/lenra/services/email_services.ex
@@ -2,21 +2,42 @@ defmodule Lenra.EmailService do
@moduledoc false
import Bamboo.Email
+ alias Bamboo.SendGridHelper
- def welcome_text_email(email_address, code) do
+ @spec create_welcome_email(String.t(), String.t()) :: Bamboo.Email.t()
+ def create_welcome_email(email_address, code) do
# base template ID : d-bd160809d9a04b07ac6925a823f8f61c
new_email()
|> to(email_address)
- |> from("subscription@lenra.me")
- |> subject("Bienvenue!")
- |> text_body("Bienvenue chez Lenra " <> email_address <> " ! " <> "Votre code: " <> code)
+ |> from("no-reply@lenra.io")
+ |> SendGridHelper.with_template("d-bd160809d9a04b07ac6925a823f8f61c")
+ |> SendGridHelper.add_dynamic_field("subject", "Bienvenue !")
+ |> SendGridHelper.add_dynamic_field(
+ "body_hello",
+ "Bonjour " <> email_address <> ",
Merci pour votre inscription! Vous rejoignez une communauté incroyable"
+ )
+ |> SendGridHelper.add_dynamic_field("code", code)
+ |> SendGridHelper.add_dynamic_field(
+ "body_help",
+ "Ce code vous permet de valider votre inscription.
Si vous rencontrez un problème contactez-nous à l'adresse mail suivante : contact@lenra.io"
+ )
end
- def recovery_email(email_address, code) do
+ @spec create_recovery_email(String.t(), String.t()) :: Bamboo.Email.t()
+ def create_recovery_email(email_address, code) do
new_email()
|> to(email_address)
- |> from("verification@lenra.me")
- |> subject("Votre code de vérification!")
- |> text_body("Bonjour " <> email_address <> " ! " <> "Votre code: " <> code)
+ |> from("no-reply@lenra.io")
+ |> SendGridHelper.with_template("d-bd160809d9a04b07ac6925a823f8f61c")
+ |> SendGridHelper.add_dynamic_field("subject", "Votre code de vérification")
+ |> SendGridHelper.add_dynamic_field(
+ "body_hello",
+ "Bonjour " <> email_address <> ",
Modifiez votre mot de passe à l'aide du code suivant"
+ )
+ |> SendGridHelper.add_dynamic_field("code", code)
+ |> SendGridHelper.add_dynamic_field(
+ "body_help",
+ "Ce code vous permet de modifier votre mot de passe.
Si vous rencontrez un problème contactez-nous à l'adresse mail suivante : contact@lenra.io"
+ )
end
end
diff --git a/apps/lenra/lib/lenra/services/user_services.ex b/apps/lenra/lib/lenra/services/user_services.ex
index b12a972a..585f3f9b 100644
--- a/apps/lenra/lib/lenra/services/user_services.ex
+++ b/apps/lenra/lib/lenra/services/user_services.ex
@@ -4,7 +4,7 @@ defmodule Lenra.UserServices do
"""
import Ecto.Query, only: [from: 2]
- alias Lenra.{Repo, User, Password, DevCode, RegistrationCodeServices}
+ alias Lenra.{Repo, User, Password, DevCode, RegistrationCodeServices, EmailWorker}
@doc """
Register a new user, save him to the database. The email must be unique. The password is hashed before inserted to the database.
@@ -25,8 +25,7 @@ defmodule Lenra.UserServices do
RegistrationCodeServices.registration_code_changeset(user)
end
)
- # send verification email disabled
- # |> Ecto.Multi.run(:add_event, &add_registration_events/2)
+ |> Ecto.Multi.run(:add_event, &add_registration_events/2)
|> Repo.transaction()
end
@@ -34,13 +33,12 @@ defmodule Lenra.UserServices do
Repo.get(User, id)
end
- # send verification email disabled
- # defp add_registration_events(_repo, %{
- # inserted_registration_code: registration_code,
- # inserted_user: user
- # }) do
- # EmailWorker.add_email_verification_event(user, registration_code.code)
- # end
+ defp add_registration_events(_repo, %{
+ inserted_registration_code: registration_code,
+ inserted_user: user
+ }) do
+ EmailWorker.add_email_verification_event(user, registration_code.code)
+ end
def update(user, params) do
Ecto.Multi.new()
diff --git a/apps/lenra/lib/lenra/workers/email_worker.ex b/apps/lenra/lib/lenra/workers/email_worker.ex
index 0e3ff404..a2047a69 100644
--- a/apps/lenra/lib/lenra/workers/email_worker.ex
+++ b/apps/lenra/lib/lenra/workers/email_worker.ex
@@ -18,7 +18,7 @@ defmodule Lenra.EmailWorker do
%User{} = user,
code
) do
- EmailService.welcome_text_email(user.email, code)
+ EmailService.create_welcome_email(user.email, code)
|> Mailer.deliver_now()
end
@@ -26,7 +26,7 @@ defmodule Lenra.EmailWorker do
%User{} = user,
code
) do
- EmailService.recovery_email(user.email, code)
+ EmailService.create_recovery_email(user.email, code)
|> Mailer.deliver_now()
end
end
diff --git a/apps/lenra/test/lenra/services/user_services_test.exs b/apps/lenra/test/lenra/services/user_services_test.exs
index 18417013..a8518cb6 100644
--- a/apps/lenra/test/lenra/services/user_services_test.exs
+++ b/apps/lenra/test/lenra/services/user_services_test.exs
@@ -1,6 +1,7 @@
defmodule UserServicesTest do
- use Lenra.RepoCase, async: true
- alias Lenra.{User, DevCode, UserServices}
+ use Lenra.RepoCase, async: false
+ alias Lenra.{User, DevCode, UserServices, PasswordServices, EmailService, PasswordCode}
+ use Bamboo.Test, shared: true
test "register user should succeed" do
{:ok, %{inserted_user: user, inserted_registration_code: registration_code}} = register_john_doe()
@@ -13,6 +14,21 @@ defmodule UserServicesTest do
assert String.length(registration_code.code) == 8
end
+ test "send email after registration" do
+ {:ok, %{inserted_user: user, inserted_registration_code: registration_code}} = register_john_doe()
+
+ email = EmailService.create_welcome_email(user.email, registration_code.code)
+
+ assert_delivered_email(email)
+ end
+
+ test "send email for a password recovery" do
+ {:ok, %{inserted_user: user}} = register_john_doe()
+ {:ok, %{password_code: %PasswordCode{} = password_code}} = PasswordServices.send_password_code(user)
+ email = EmailService.create_recovery_email(user.email, password_code.code)
+ assert_delivered_email(email)
+ end
+
test "register should fail if email already exists" do
{:ok, _} = register_john_doe()
diff --git a/config/config.exs b/config/config.exs
index cb03df56..d1d43c2d 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -30,6 +30,7 @@ config :guardian, Guardian.DB,
# Configure bamboo
config :lenra, Lenra.Mailer,
+ adapter: Bamboo.SendGridAdapter,
hackney_opts: [
recv_timeout: :timer.minutes(1),
connect_timeout: :timer.minutes(1)
diff --git a/config/prod.exs b/config/prod.exs
index 267825dc..2143e7c8 100644
--- a/config/prod.exs
+++ b/config/prod.exs
@@ -26,5 +26,3 @@ config :lenra,
# Edit to allow only wanted sources
config :cors_plug,
origin: []
-
-config :lenra, Lenra.Mailer, adapter: Bamboo.SendGridAdapter