Packages
swoosh
1.10.1
1.26.3
1.26.2
1.26.1
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.0
1.23.1
1.23.0
1.22.1
1.22.0
1.21.0
1.20.1
1.20.0
1.19.9
1.19.8
1.19.7
1.19.6
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.10
1.17.9
1.17.8
retired
1.17.7
retired
1.17.6
1.17.5
1.17.4
retired
1.17.3
1.17.2
1.17.1
1.17.0
1.16.12
1.16.11
1.16.10
1.16.9
1.16.8
1.16.7
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
retired
1.16.1
retired
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.4
1.14.3
1.14.2
1.14.1
1.14.0
1.13.0
1.12.0
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
retired
1.11.0
1.10.3
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.2
1.5.1
1.5.0
1.4.0
1.3.11
1.3.10
1.3.9
1.3.8
retired
1.3.7
1.3.6
retired
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.9
1.0.8
retired
1.0.7
retired
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.25.6
0.25.5
0.25.4
0.25.3
retired
0.25.2
0.25.1
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.2
0.22.1
0.22.0
0.21.1
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.1
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Compose, deliver and test your emails easily in Elixir. Supports SMTP, Sendgrid, Mandrill, Postmark, Mailgun and many more out of the box. Preview your emails in the browser. Test your email sending code.
Current section
Files
Jump to
Current section
Files
lib/swoosh/adapters/ex_aws_amazon_ses.ex
defmodule Swoosh.Adapters.ExAwsAmazonSES do
@moduledoc ~S"""
An adapter that wraps `Swoosh.Adapters.AmazonSES` to use credentials from `ExAws`.
You may prefer this adapter to `Swoosh.Adapters.AmazonSES` if you have already
configured ExAws for your project and are using instance role credentials.
This allows you to use automatically managed, short-lived credentials, rather than provisioning
a static access key / secret key pair.
See also:
[IAM Roles for EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)
[IAM roles for ECS tasks](https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-iam-roles.html)
## Example
# config/config.exs
config :ex_aws,
access_key_id: [{:system, "AWS_ACCESS_KEY_ID"}, :instance_role],
secret_access_key: [{:system, "AWS_SECRET_ACCESS_KEY"}, :instance_role],
region: "us-east-1"
config :sample, Sample.Mailer,
adapter: Swoosh.Adapters.ExAwsAmazonSES
# lib/sample/mailer.ex
defmodule Sample.Mailer do
use Swoosh.Mailer, otp_app: :sample
end
## Dependencies
In addition to the `:gen_stmp` dependency that the `AmazonSES` adapter
requires, this adapter also depends on `:ex_aws`.
Ensure you have the dependencies added in your mix.exs file:
def deps do
[
{:swoosh, "~> 1.0"},
{:gen_smtp, "~> 1.0"},
{:ex_aws, "~> 2.1"},
# Dependency of `:ex_aws`
{:sweet_xml, "~> 0.6"}
]
end
See also:
[Getting started with ExAws](https://hexdocs.pm/ex_aws/readme.html#getting-started)
"""
use Swoosh.Adapter,
required_deps: [gen_stmp: :mimemail, ex_aws: ExAws.Config],
required_config: []
alias Swoosh.Email
alias Swoosh.Adapters.AmazonSES
@impl true
def deliver(%Email{} = email, config \\ []) do
credentials = ExAws.Config.new(:ses)
config = add_credentials(config, credentials)
email
|> add_security_token(credentials)
|> AmazonSES.deliver(config)
end
defp add_credentials(config, credentials) do
Keyword.merge(
[
access_key: credentials.access_key_id,
secret: credentials.secret_access_key,
region: credentials.region
],
config
)
end
defp add_security_token(email, %{security_token: token}) do
Email.put_provider_option(email, :security_token, token)
end
defp add_security_token(email, _), do: email
end