2019-09-02 18:36:00
【Elixir Phoenix】Elixirでメール送信してくれる"bamboo_smtp"を試してみた記録
目次
- バージョン情報
- bamboo_smtpとは
- 使用までの流れ
- 参考文献
バージョン情報
Elixir: 1.8.1
Phoenix: 1.4.2
bamboo_smtpとは
Elixirでメール送信を可能とするモジュールです。
使用までの流れ
この記事ではSMTPサーバーとしてGmailを利用します。
- モジュールのインストール
- GmailのSMTPサーバーを利用できるようにする
- config.exsにメール設定
- 必要なモジュール用意
- 実行確認
モジュールのインストール
mix.exs に依存関係を記載し、mix deps.get します。
{:bamboo_smtp, "~> 1.7.0"}
GmailのSMTPサーバーを利用できるようにする
アプリパスワードを生成する必要があります。アプリパスワードを利用することによって、Gmail以外のメーラーからメールを送信することが可能になります。詳しくはこちらをご参照ください。
config.exsにメール設定
アダプター、SMTPサーバー、ポート、ユーザー名、パスワードなどを設定する。最小構成が何なのかは試していません。
config :nao000dotcom, Nao000dotcom.Mailer,
adapter: Bamboo.SMTPAdapter,
server: "smtp.gmail.com",
port: 587,
username: "XXXXXXXX@gmail.com",
password: "XXXXXXXXXXXXX",
tls: :if_available, # can be `:always` or `:never`
ssl: false, # can be `true`
retries: 1
必要なモジュール用意
メール送信モジュールを用意します。Bamboo.Mailerモジュールにあるdeliver_now関数を使用します。
defmodule Nao000dotcom.Mailer do
use Bamboo.Mailer, otp_app: :nao000dotcom
end
メール内容を用意します。宛先、差出人、件名などを設定していきます。今回は自分宛てに送信します。
本文にハッシュ値を渡していますが特に意味はありません。アカウント登録するときに「こちらのリンクをクリックして登録してください」みたいなのを実装しようかと思ってやりました。
defmodule Nao000dotcom.Email do
import Bamboo.Email
def send_register_account_email(hash) do
new_email(
to: "XXXXXXXXXX@gmail.com",
from: "XXXXXXXXXX@gmail.com",
subject: "Welcome to the app.",
html_body: "
テスト送信です。
<br>
https://www.nao000.com/?uid="<>hash<>"
<br>改行タグ
",
text_body: "
テスト送信です。
" <> hash <> "
<br>改行タグ
"
)
end
end
関数を呼び出す関数をコントローラーに用意します。別にコントローラーに書かなくても大丈夫です。
defmodule Nao000dotcomWeb.User.BlogController do
use Nao000dotcomWeb, :controller
def send_register_account_email do
hash = :crypto.hash(:sha256, ["XXXXXXXXXXXX@gmail.com", "tekitounasalt"]) |> Base.encode16
Nao000dotcom.Email.send_register_account_email(hash) # Create your email
|> Nao000dotcom.Mailer.deliver_now() # Send your email
end
end
実行確認
画面更新でも実行できますが、実行の分かり易さのために対話型で実行します。
iex -S mix
~いろいろコンパイルされます~
iex(5)> Nao000dotcomWeb.User.BlogController.send_register_account_email
[debug] Sending email with Bamboo.SMTPAdapter:
%Bamboo.Email{assigns: %{}, attachments: [], bcc: [], cc: [], from: {nil, "XXXXXXX@gmail.com"}, headers: %{}, html_body: "
テスト送信です。
<br>
https://www.nao000.com/?uid=617748401A04CC3227F49D3AD1B3FCBEC4360C2E7FB85D345271E746A97F23C4
<br>改行タグ
", private: %{}, subject: "Welcome to the app.", text_body: "
テスト送信です。
617748401A04CC3227F49D3AD1B3FCBEC4360C2E7FB85D345271E746A97F23C4
<br>改行タグ
", to: [nil: "XXXXXXX@gmail.com"]}
%Bamboo.Email{
assigns: %{},
attachments: [],
bcc: [],
cc: [],
from: {nil, "XXXXXXX@gmail.com"},
headers: %{},
html_body: "
テスト送信です。
<br>
https://www.nao000.com/?uid=617748401A04CC3227F49D3AD1B3FCBEC4360C2E7FB85D345271E746A97F23C4
<br>改行タグ
",
private: %{},
subject: "Welcome to the app.",
text_body: "
テスト送信です。
617748401A04CC3227F49D3AD1B3FCBEC4360C2E7FB85D345271E746A97F23C4
<br>改行タグ
",
to: [nil: "XXXXXXX@gmail.com"]
}
iex(6)>
受信したGmailです