Packages
phoenix_kit
1.0.0
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/mailer.ex
defmodule PhoenixKit.Mailer do
@moduledoc """
Mailer module for PhoenixKit authentication emails.
This module handles sending authentication-related emails such as
confirmation emails, password reset emails, magic link emails, etc.
"""
use Swoosh.Mailer, otp_app: :phoenix_kit
import Swoosh.Email
alias PhoenixKit.Users.Auth.User
@doc """
Sends a magic link email to the user.
## Examples
iex> PhoenixKit.Mailer.send_magic_link_email(user, "https://app.com/magic/token123")
{:ok, %Swoosh.Email{}}
"""
def send_magic_link_email(%User{} = user, magic_link_url) when is_binary(magic_link_url) do
email =
new()
|> to({user.email, user.email})
|> from({"PhoenixKit", get_from_email()})
|> subject("Your secure login link")
|> html_body(magic_link_html_body(user, magic_link_url))
|> text_body(magic_link_text_body(user, magic_link_url))
deliver(email)
end
# HTML version of the magic link email
defp magic_link_html_body(%User{} = user, magic_link_url) do
"""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Your Secure Login Link</title>
<style>
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.6; color: #333; }
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
.header { text-align: center; margin-bottom: 30px; }
.button { display: inline-block; padding: 12px 24px; background-color: #3b82f6; color: white; text-decoration: none; border-radius: 6px; font-weight: 500; }
.button:hover { background-color: #2563eb; }
.footer { margin-top: 30px; padding-top: 20px; border-top: 1px solid #e5e7eb; font-size: 14px; color: #6b7280; }
.warning { background-color: #fef3c7; border: 1px solid #f59e0b; border-radius: 6px; padding: 16px; margin: 20px 0; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Secure Login Link</h1>
</div>
<p>Hi #{user.email},</p>
<p>Click the button below to securely log in to your account:</p>
<p style="text-align: center; margin: 30px 0;">
<a href="#{magic_link_url}" class="button">Log In Securely</a>
</p>
<div class="warning">
<strong>⚠️ Important:</strong> This link will expire in 15 minutes and can only be used once.
</div>
<p>If you didn't request this login link, you can safely ignore this email.</p>
<p>For your security, never share this link with anyone.</p>
<div class="footer">
<p>If the button above doesn't work, you can copy and paste this link into your browser:</p>
<p><a href="#{magic_link_url}">#{magic_link_url}</a></p>
</div>
</div>
</body>
</html>
"""
end
# Text version of the magic link email
defp magic_link_text_body(%User{} = user, magic_link_url) do
"""
Secure Login Link
Hi #{user.email},
Click the link below to securely log in to your account:
#{magic_link_url}
⚠️ Important: This link will expire in 15 minutes and can only be used once.
If you didn't request this login link, you can safely ignore this email.
For your security, never share this link with anyone.
"""
end
# Get the from email address from configuration or use a default
defp get_from_email do
case PhoenixKit.Config.get(:from_email) do
{:ok, email} -> email
:not_found -> "noreply@localhost"
end
end
end