Packages
swoosh
1.22.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.
Security advisory:
This version has known vulnerabilities.
View advisories
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)
> ### Dependencies {: .info}
>
> In addition to the `:gen_smtp` 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
## 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
See also:
[Getting started with ExAws](https://hexdocs.pm/ex_aws/readme.html#getting-started)
"""
use Swoosh.Adapter,
required_deps: [gen_smtp: :mimemail, ex_aws: ExAws.Config],
required_config: []
alias Swoosh.Email
alias Swoosh.Adapters.AmazonSES
def deliver(%Email{} = email, config \\ []) do
region_override = Keyword.get(config, :region)
credentials = get_credentials(region_override)
config = add_credentials(config, credentials)
email
|> add_security_token(credentials)
|> AmazonSES.deliver(config)
end
defp get_credentials(nil), do: ExAws.Config.new(:ses)
defp get_credentials(region), do: ExAws.Config.new(:ses, region: region)
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