17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

fukuoka.ex Elixir/PhoenixAdvent Calendar 2021

Day 7

Elixir + SendGrid でメール送信してみる

Last updated at Posted at 2021-11-11

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通/月を送ることができるので、今回はそれを使ってみます。

image.png

やってみる

SendGrid の登録 ※1日以上かかる

右上の「無料で始める」をクリック

image.png

このようなフォームが出るので、必要事項を入力してください。

image.png

なおアカウント登録には審査が必要なので 1営業日 ほどかかるので注意!

登録完了後にアカウント情報が送られてくるのでログインして Settings -> API Keys の画面を開きます。

image.png

APIキーを作成します

image.png
image.png

これで SendGrid 側の準備は完了です!

Elixir

今回は Phoenix を使わずに素の mix プロジェクトでやってみます。
Phoenix でも同様にすれば使えると思うので、参考にしてみてください。

$ mix new email_sample
mix.exs
  # 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キーを入れてください↓

config/config.exs
import Config

config :email_sample, EmailSample.Mailer,
  adapter: Swoosh.Adapters.Sendgrid,
  api_key: "SG.x.x" # 自分のAPIキーを入力
lib/email_sample/mailer.ex
defmodule EmailSample.Mailer do
  use Swoosh.Mailer, otp_app: :email_sample
end

メール送信内容を組み立てます!
to/from は自分のメールアドレスを入力してくださいね!

lib/email_sample.ex
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を見てみます...届いている!!!

image.png

まとめ

Elixir(Swoosh) + SendGrid の組み合わせでメール送信をしてみました。
実際には Phoenix アプリケーションで使うことが多いと思いますが、今回の内容を参考にすれば同様にできるかと思います。

たったこれだけでメール送れるのすごい時代ですね!
Elixir だとサクサクっと作れるので、みなさんも是非試してみてください!
自分が作ったアプリケーションからメールを送れるので、色々遊べそうですね!

今回使用したリポジトリは↓においてます。APIキーとかメールアドレスを自分のものに設定すれば動くと思いますので、ぜひ使ってみてください。

17
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?