Elixir + SendGrid でメール送信!
fukuoka.ex の Koyo です!
(この記事は「fukuoka.ex Elixir/Phoenix 2021 Advent Calendar」の7日目です)
ログイン時の認証とかでメール送信したいときありますよね。
今回は Elixir(Swoosh) + SendGrid の組み合わせでメール送信を試してみようと思います!
Elixirバージョン
$ elixir -v
Erlang/OTP 24 [erts-12.0.4] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit]
Elixir 1.12.2 (compiled with Erlang/OTP 22
Swoosh
Phoenix 1.6 からは phx.gen.auth を使うことでメール送信機能付きの認証システムが一通り揃うようになっています。
その中では Swoosh というメール送信クライアントのライブラリが使われています。
Adapter が提供されており、SaaSを使ったりローカルから送信したりと様々にカスタマイズできます。
今回はその中でも SendGrid を用いてみようと思います
SendGrid
SendGrid は広く使われているメール配信の SaaS です。
Web APIが提供されており、アプリケーションからの利用が簡単に行えますね。
無料でも12000通/月を送ることができるので、今回はそれを使ってみます。
やってみる
SendGrid の登録 ※1日以上かかる
右上の「無料で始める」をクリック
このようなフォームが出るので、必要事項を入力してください。
なおアカウント登録には審査が必要なので 1営業日 ほどかかるので注意!
登録完了後にアカウント情報が送られてくるのでログインして Settings -> API Keys の画面を開きます。
APIキーを作成します
これで SendGrid 側の準備は完了です!
Elixir
今回は Phoenix を使わずに素の mix プロジェクトでやってみます。
Phoenix でも同様にすれば使えると思うので、参考にしてみてください。
$ mix new email_sample
# Run "mix help deps" to learn about dependencies.
defp deps do
[
{:swoosh, "~> 1.5"},
{:hackney, "~> 1.9"}
]
end
※ config は自動で作られないのでディレクトリとファイルを作ります
$ mkdir config
$ touch config/config.exs
$ mkdir lib/email_sample
$ touch lib/email_sample/mailer.ex
先ほど作成したAPIキーを入れてください↓
import Config
config :email_sample, EmailSample.Mailer,
adapter: Swoosh.Adapters.Sendgrid,
api_key: "SG.x.x" # 自分のAPIキーを入力
defmodule EmailSample.Mailer do
use Swoosh.Mailer, otp_app: :email_sample
end
メール送信内容を組み立てます!
to/from は自分のメールアドレスを入力してくださいね!
defmodule EmailSample do
import Swoosh.Email
def email do
new()
|> to("xxxxx@gmail.com")
|> from({"Koyo", "xxxxx@gmail.com"}) # 登録時に記載した送信元 Emailアドレス
|> subject("Test email")
|> text_body("Hello from Koyo\n")
end
end
実行!
ドキドキの実行...
$ iex -S mix
iex(1)> EmailSample.email |> EmailSample.Mailer.deliver
{:ok, %{id: "iNX0QMPBQR6Fv_phRhOXIg"}}
Gmailを見てみます...届いている!!!
まとめ
Elixir(Swoosh) + SendGrid の組み合わせでメール送信をしてみました。
実際には Phoenix アプリケーションで使うことが多いと思いますが、今回の内容を参考にすれば同様にできるかと思います。
たったこれだけでメール送れるのすごい時代ですね!
Elixir だとサクサクっと作れるので、みなさんも是非試してみてください!
自分が作ったアプリケーションからメールを送れるので、色々遊べそうですね!
今回使用したリポジトリは↓においてます。APIキーとかメールアドレスを自分のものに設定すれば動くと思いますので、ぜひ使ってみてください。