feat: add join confirmation and mail templating
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
3672ef0d03
commit
6385fbc831
24 changed files with 585 additions and 53 deletions
|
|
@ -1255,32 +1255,32 @@ mix deps.update phoenix
|
|||
mix hex.outdated
|
||||
```
|
||||
|
||||
### 3.11 Email: Swoosh
|
||||
### 3.11 Email: Swoosh and Phoenix.Swoosh
|
||||
|
||||
**Mailer Configuration:**
|
||||
**Mailer and from address:**
|
||||
|
||||
- `Mv.Mailer` (Swoosh) and `Mv.Mailer.mail_from/0` return the configured sender `{name, email}`.
|
||||
- Config: `config :mv, :mail_from, {"Mila", "noreply@example.com"}` in config.exs; override in runtime.exs from ENV for production.
|
||||
|
||||
**Unified layout (transactional emails):**
|
||||
|
||||
- All transactional emails (join confirmation, user confirmation, password reset) use the same layout: `MvWeb.EmailLayoutView` (layout) and `MvWeb.EmailsView` (body templates).
|
||||
- Templates live under `lib/mv_web/templates/emails/` (bodies) and `lib/mv_web/templates/emails/layouts/` (layout). Use Gettext in templates for i18n.
|
||||
- See `MvWeb.Emails.JoinConfirmationEmail`, `Mv.Accounts.User.Senders.SendNewUserConfirmationEmail`, `SendPasswordResetEmail` for the pattern; see `docs/email-layout-mockup.md` for layout structure.
|
||||
|
||||
**Sending with layout:**
|
||||
|
||||
```elixir
|
||||
defmodule Mv.Mailer do
|
||||
use Swoosh.Mailer, otp_app: :mv
|
||||
end
|
||||
```
|
||||
use Phoenix.Swoosh, view: MvWeb.EmailsView, layout: {MvWeb.EmailLayoutView, "layout.html"}
|
||||
|
||||
**Sending Emails:**
|
||||
|
||||
```elixir
|
||||
defmodule Mv.Accounts.WelcomeEmail do
|
||||
use Phoenix.Swoosh, template_root: "lib/mv_web/templates"
|
||||
import Swoosh.Email
|
||||
|
||||
def send(user) do
|
||||
new()
|
||||
|> to({user.name, user.email})
|
||||
|> from({"Mila", "noreply@mila.example.com"})
|
||||
|> subject("Welcome to Mila!")
|
||||
|> render_body("welcome.html", %{user: user})
|
||||
|> Mv.Mailer.deliver()
|
||||
end
|
||||
end
|
||||
new()
|
||||
|> from(Mailer.mail_from())
|
||||
|> to(email_address)
|
||||
|> subject(gettext("Subject"))
|
||||
|> put_view(MvWeb.EmailsView)
|
||||
|> put_layout({MvWeb.EmailLayoutView, "layout.html"})
|
||||
|> render_body("template_name.html", %{assigns})
|
||||
|> Mailer.deliver!()
|
||||
```
|
||||
|
||||
### 3.12 Internationalization: Gettext
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue