PhoenixKit.Emails.Interceptor (phoenix_kit v1.6.4)
View SourceEmail interceptor for logging outgoing emails in PhoenixKit.
This module provides functionality to intercept outgoing emails and create comprehensive logs for tracking purposes. It integrates seamlessly with the existing mailer system without disrupting email delivery.
Features
- Transparent Interception: Logs emails without affecting delivery
- Selective Logging: Respects sampling rate and system settings
- AWS SES Integration: Automatically adds configuration sets
- Rich Metadata Extraction: Captures headers, size, attachments
- User Context: Links emails to users when possible
- Template Recognition: Identifies email templates and campaigns
Integration
The interceptor is designed to be called by the mailer before sending:
# In PhoenixKit.Mailer.deliver_email/1
email = EmailInterceptor.intercept_before_send(email, opts)
# ... then send email normallyConfiguration
The interceptor respects all email tracking system settings:
- Only logs if
email_enabledis true - Saves body based on
email_save_bodysetting - Applies sampling rate from
email_sampling_rate - Adds AWS SES configuration set if configured
Examples
# Basic interception
logged_email = PhoenixKit.Emails.Interceptor.intercept_before_send(email)
# With additional context
logged_email = PhoenixKit.Emails.Interceptor.intercept_before_send(email,
user_id: 123,
template_name: "welcome_email",
campaign_id: "welcome_series"
)
# Check if email should be logged
if PhoenixKit.Emails.Interceptor.should_log_email?(email) do
# Log the email
end
Summary
Functions
Adds tracking headers to an email for identification.
Builds AWS SES specific tracking headers and configuration.
Creates an email log entry from a Swoosh.Email struct.
Extracts provider information from email or mailer configuration.
Intercepts an email before sending and creates a tracking log.
Determines if an email should be logged based on system settings.
Updates an email log after send failure.
Updates an email log after successful sending.
Functions
Adds tracking headers to an email for identification.
Examples
iex> email_with_headers = PhoenixKit.Emails.Interceptor.add_tracking_headers(email, log, [])
%Swoosh.Email{headers: %{"X-PhoenixKit-Log-Id" => "123"}}
Builds AWS SES specific tracking headers and configuration.
Examples
iex> PhoenixKit.Emails.Interceptor.build_ses_headers(log, [])
%{"X-SES-CONFIGURATION-SET" => "my-tracking-set"}
Creates an email log entry from a Swoosh.Email struct.
Examples
iex> PhoenixKit.Emails.Interceptor.create_email_log(email, user_id: 123)
{:ok, %Log{}}
Extracts provider information from email or mailer configuration.
Examples
iex> PhoenixKit.Emails.Interceptor.detect_provider(email, [])
"aws_ses"
Intercepts an email before sending and creates a tracking log.
Returns the email (potentially modified with tracking headers) and creates a log entry if tracking is enabled.
Options
:user_id- Associate with a specific user:template_name- Name of the email template:campaign_id- Campaign identifier for grouping:provider- Override provider detection:configuration_set- Override AWS SES configuration set:message_tags- Additional tags for the email
Examples
iex> email = new() |> to("user@example.com") |> from("app@example.com")
iex> PhoenixKit.Emails.Interceptor.intercept_before_send(email, user_id: 123)
%Swoosh.Email{headers: %{"X-PhoenixKit-Log-Id" => "456"}}
Determines if an email should be logged based on system settings.
Considers sampling rate, system enablement, and email characteristics.
Examples
iex> PhoenixKit.Emails.Interceptor.should_log_email?(email)
true
Updates an email log after send failure.
Examples
iex> PhoenixKit.Emails.Interceptor.update_after_failure(log, error)
{:ok, %Log{}}
Updates an email log after successful sending.
This is called after the email provider confirms the send.
Examples
iex> PhoenixKit.Emails.Interceptor.update_after_send(log, provider_response)
{:ok, %Log{}}