ScriptyScott
Hey Folks,
I’m trying to send emails with Phoenix 1.6.4 and Swoosh. I was using Bamboo in a previous app and created a test web app to play around with Swoosh. I used the hexdocs page, the Swoosh Git page and various forum posts from here as reference for setting up the mailers and emails.
I created the app as follows mix phx.new swoosh_mailer_tutorial --live.
I used the following configuration in config.exs to send mail via AmazonSES:
config :swoosh_mailer_tutorial, SwooshMailerTutorial.Mailer,
adapter: Swoosh.Adapters.AmazonSES,
api_key: "my_api_key"
I used the default mailer provided:
defmodule SwooshMailerTutorial.Mailer do
use Swoosh.Mailer, otp_app: :swoosh_mailer_tutorial
end
I copied the email creation code almost directly from the Swoosh Git readme:
defmodule SwooshMailerTutorial.SwooshEmail do
import Swoosh.Email
def welcome do
new()
|> to({"Test User", "test@user.com"})
|> from({"Dr B Banner", "hulk.smash@example.com"})
|> subject("Hello, Avengers!")
|> html_body("<h1>Hello Scott</h1>")
|> text_body("Hello Scott\n")
end
end
I then call the mailer and email creator within the PageController’s index/2 method before rendering the standard Phoenix index page:
defmodule SwooshMailerTutorialWeb.PageController do
use SwooshMailerTutorialWeb, :controller
require Logger
def index(conn, _params) do
SwooshMailerTutorial.SwooshEmail.welcome() |> SwooshMailerTutorial.Mailer.deliver()
render(conn, "index.html")
end
end
For some reason this setup produces the following error:
I’m not surer why this is happening. Why can’t my web app find SwooshMailerTutorial.Mailer.deliver/1? I had a similar issue when sending emails using Bamboo and changing SwooshMailerTutorial → SwooshMailerTutorialWeb in the mailer and email classes seemed to fix it. This makes no sense to me as the web app should have visibility of both SwooshMailerTutorial and SwooshMailerTutorialWeb. Please let me know what I’m missing.
Thanks,
Scott
Trending in Questions
Other Trending Topics
Latest Phoenix Threads
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #ai
- #phoenix_html
- #elixirconf-us
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming











Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
karlosmid
Hi! You need to create the following module as a file (any name is :ok) in your project:
ScriptyScott
Hey Folks,
So this took some time but I eventually figured it out. There were multiple issues and problems sending emails with Swoosh and Amazon SES. Also, since Swoosh has only just recently come packaged with Phoenix (Phoenix 1.6.x), the tutorials and usage guides for using it with Amazon SES are spotty at best. I basically had to use multiple sources that all focused on different details of this implementation to stitch together a working solution. Because of this, I’ll be authoring an in-depth tutorial on how to use Swoosh with the Amazon SES adaptor and the SMTP adapter using the Amazon SMTP endpoint and a SMTP IAM user. I was able to produce working solutions with both adapters. However, both implementations have their own pros and cons. I’ll be outlining this and the entire process in a tutorial that will be posted to my company’s blog. I’ll make sure to circle back and update this reply with the link when it’s completed in the coming months.
The solution for the original issue was rather simple:
The problem was that if you use any adaptors other than the
Swoosh.Adapters.SMTPyou need to include thegen_smtpdependency as the other adapters rely ongen_smtpas a SMTP client. To get passed theSwooshMailerTutorial.Mailer.deliver/1 is undefinederror I just simply addedgen_smtpas a dependency and updated.Add the
gen_smtpdependency to mix.exsdeps:Then run
mix deps.get --alland restart your server. Adding this as a dependency was mentioned in multiple docs and guides but I must have missed it. After fixing this issue I was then faced with the following:The solution for this error was less documented but basically consisted of adding another dependency. It turns out that Swoosh requires an
API clientif you use an adapter other than the SMTP. This is initially set tofalsein theconfig.exs:This should be changed to:
And the
Hackneydependency needs to be added to mix.exsdeps:Once again run
mix deps.get --allbefore restarting your server.This was my final issue, and after resolving a couple of problems with my
AmazonSESconfigurations, I was able to successfully send emails. I hope this reply helps and I’ll update it with my final tutorial when it’s up.Regards,
Scott
pdgonzalez872
Hi @ScriptyScott ! Thanks for sharing this! I will play with Swoosh later this week, so this was a great read. Do you mind sending me a link to your final tutorial when you are done with it? Maybe we can update the docs with something you found out/experienced?
Thanks!
ScriptyScott
Will do! I’ll post the link, we can go over the docs I used and where they could be a bit more comprehensive.
ScriptyScott
@pdgonzalez872 Created a discussion thread to talk about the pros and cons of using the
Swoosh.Adapters.SMTPandSwoosh.Adapters.AmazonSESadapters.krp
Thank you! You pulled me out of a rabbit hole
byronsalty
Me too!
gathubenson
Hello
I’m facing this error ( (elixir 1.15.4) lib/keyword.ex:979: Keyword.merge([otp_app: :email_notification], :email_notification))
kindly help
user20230119
I had to comment
config :swoosh, :api_client, falseindev.exs.cobra
thanks I ran into the same issue and this is a life saver