Packages

phoenix_kit

1.4.6
1.7.211 1.7.210 1.7.209 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
phoenix_kit lib mix tasks phoenix_kit.configure_aws_ses.ex
Raw

lib/mix/tasks/phoenix_kit.configure_aws_ses.ex

defmodule Mix.Tasks.PhoenixKit.ConfigureAwsSes do
@moduledoc """
Mix task to configure AWS SES integration for PhoenixKit email system.
This task helps set up AWS SES configuration set, SNS topics, and SQS queues
for tracking email delivery events and processing email status updates.
## Usage
# Check current configuration status
mix phoenix_kit.configure_aws_ses --status
# Configure basic SES settings
mix phoenix_kit.configure_aws_ses --config-set my-app-tracking
# Set up SNS topic for events
mix phoenix_kit.configure_aws_ses --sns-topic arn:aws:sns:eu-north-1:123456789012:email-events
# Configure SQS queue for processing
mix phoenix_kit.configure_aws_ses --sqs-queue https://sqs.eu-north-1.amazonaws.com/123456789012/email-events
# Set DLQ URL for failed messages
mix phoenix_kit.configure_aws_ses --dlq-url https://sqs.eu-north-1.amazonaws.com/123456789012/email-events-dlq
# Specify AWS region
mix phoenix_kit.configure_aws_ses --region eu-north-1
# Reset configuration
mix phoenix_kit.configure_aws_ses --reset
# Show help
mix phoenix_kit.configure_aws_ses --help
"""
@shortdoc "Configure AWS SES integration for email system"
use Mix.Task
alias PhoenixKit.Emails
@default_region "eu-north-1"
@impl Mix.Task
def run(args) do
{opts, _, _} =
OptionParser.parse(args,
strict: [
config_set: :string,
sns_topic: :string,
sqs_queue: :string,
dlq_url: :string,
region: :string,
status: :boolean,
enable_polling: :boolean,
help: :boolean
],
aliases: [h: :help, s: :status]
)
if opts[:help] do
print_help()
else
# Start the application
Mix.Task.run("app.start")
cond do
opts[:status] ->
show_current_status()
opts[:config_set] || opts[:sns_topic] || opts[:sqs_queue] ->
configure_from_options(opts)
true ->
interactive_configuration()
end
end
end
defp show_current_status do
IO.puts("\n📊 Current AWS SES Integration Status")
IO.puts("═══════════════════════════════════")
config = Emails.get_config()
IO.puts("📧 Email:")
IO.puts(" Enabled: #{format_boolean(config.enabled)}")
IO.puts(" SES Events: #{format_boolean(config.ses_events)}")
IO.puts("\n🔧 AWS Configuration:")
IO.puts(" Configuration Set: #{config.ses_configuration_set || "❌ Not set"}")
IO.puts(" AWS Region: #{config.aws_region || "❌ Not set"}")
aws_access_key = System.get_env("AWS_ACCESS_KEY_ID")
aws_secret_key = System.get_env("AWS_SECRET_ACCESS_KEY")
IO.puts("\n🔑 AWS Credentials:")
IO.puts(" Access Key ID: #{if aws_access_key, do: "✅ Configured", else: "❌ Missing"}")
IO.puts(" Secret Access Key: #{if aws_secret_key, do: "✅ Configured", else: "❌ Missing"}")
complete = config.enabled && config.ses_configuration_set && aws_access_key && aws_secret_key
IO.puts(
"\n#{if complete, do: "✅", else: "⚠️"} Configuration Status: #{if complete, do: "Complete", else: "Incomplete"}"
)
end
defp configure_from_options(opts) do
IO.puts("🔧 Configuring AWS SES integration from options...")
updates = []
updates =
if config_set = opts[:config_set] do
case Emails.set_ses_configuration_set(config_set) do
{:ok, _} ->
IO.puts("✅ Set configuration set: #{config_set}")
["configuration_set" | updates]
{:error, reason} ->
IO.puts("❌ Failed to set configuration set: #{inspect(reason)}")
updates
end
else
updates
end
region = opts[:region] || @default_region
updates =
case Emails.set_aws_region(region) do
{:ok, _} ->
IO.puts("✅ Set AWS region: #{region}")
["region" | updates]
{:error, reason} ->
IO.puts("❌ Failed to set region: #{inspect(reason)}")
updates
end
if length(updates) > 0 do
IO.puts("\n✅ Configuration updated: #{Enum.join(updates, ", ")}")
IO.puts("💡 Run 'mix phoenix_kit.configure_aws_ses --status' to verify")
else
IO.puts("\n❌ No configuration changes made")
end
end
defp interactive_configuration do
IO.puts("🚀 PhoenixKit AWS SES Integration Setup")
IO.puts("=====================================")
IO.puts("\nThis wizard will help you configure AWS SES integration.")
IO.puts("You can press Enter to skip optional settings.\n")
config_set = prompt("AWS SES Configuration Set name", "phoenixkit-system")
if config_set != "" do
Emails.set_ses_configuration_set(config_set)
end
region = prompt("AWS Region", @default_region)
Emails.set_aws_region(region)
enable_ses = prompt_boolean("Enable SES event management?", true)
Emails.set_ses_events(enable_ses)
IO.puts("\n✅ Configuration completed!")
IO.puts("💡 Run 'mix phoenix_kit.configure_aws_ses --status' to verify")
end
# Helper functions
defp format_boolean(value) do
case value do
true -> "✅ Yes"
false -> "❌ No"
end
end
defp prompt(message, default) do
default_text = format_default(default)
input = IO.gets("#{message}#{default_text}: ") |> String.trim()
if input == "", do: default, else: input
end
defp format_default(""), do: ""
defp format_default(default), do: " [#{default}]"
@spec prompt_boolean(String.t(), boolean()) :: boolean()
defp prompt_boolean(message, default) when is_boolean(default) do
default_text =
case default do
true -> " [Y/n]"
false -> " [y/N]"
end
input = IO.gets("#{message}#{default_text}: ") |> String.trim() |> String.downcase()
case input do
"" -> default
"y" -> true
"yes" -> true
"n" -> false
"no" -> false
_ -> default
end
end
defp print_help do
IO.puts("""
🔧 PhoenixKit AWS SES Configuration
USAGE:
mix phoenix_kit.configure_aws_ses [options]
OPTIONS:
--config-set NAME Set AWS SES configuration set name
--region REGION Set AWS region (default: eu-north-1)
--enable-polling Enable SQS polling
--status, -s Show current configuration status
--help, -h Show this help
EXAMPLES:
mix phoenix_kit.configure_aws_ses --status
mix phoenix_kit.configure_aws_ses --config-set "phoenixkit-system"
DESCRIPTION:
This task helps configure AWS SES integration for comprehensive email
management including delivery status, bounces, complaints, and engagement
events. Supports interactive setup or automated configuration.
""")
end
end