backstage

合唱音源の新着情報の舞台裏

AzureのSendGrid無料枠でメール送信してみた

Azure上の仮想マシンからlogwatchによるレポートメールを毎日送っていたのですが、ある日突然届かなくなってしまいました。

/var/log/maillog を見てみると「status=bounced」になっており、以下のようなメッセージが出力されていました。

Unfortunately, messages from ***.***.***.*** weren't sent. Please contact your Internet service provider since part of their network is on our block list. You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors. (in reply to MAIL FROM command))

合唱音源の新着情報.com のWebサーバのグローバルIPからのメール送信が弾かれてしまったようです。

logwatch程度なら届かなくても良いので長らく放置していました。 しかしアプリケーションからのメール送信を実装するにあたり、この問題を解決する必要が出てきました。

インフラがいろいろ面倒なので、クラウドサービスへ逃げることにしました。

メール送信のPaaSを使う

AWSにはメール送信サービス Amazon SES がありますが、Microsoft Azureにはありません。 Hotmailを持っている企業がなに寝ぼけているんだという感じなのですが、その代わりAzure上のPaaSとして SendGridマーケットプレイスに用意されています。

sendgrid.kke.co.jp

そして、Azure上でSendGridを申し込むとFreeプランの利用枠が通常400通/日から倍以上の 25,000通/月 へと増加します。 さすがMicrosoftですね。えっGoogle Cloud Platformsでも利用枠が増える?あーあー聞こえない

MicrosoftAzure のアカウントを持っていればSendGridへの登録は簡単です。

azure.microsoft.com

上記に従って登録し、接続情報(ユーザーネーム、パスワード、SMTPサーバのアドレス)を確認します。

Ruby on RailsアプリケーションからSendGridでメール送信

RailsのActionMailerを使ってメールを送信してみます。

  • secret.yml に先程の接続情報を記述
  • environment.rb で接続情報を設定
  • 送信するためのVewを定義
  • コントローラに相当するMailerクラスを定義

以上でメールを送信することができます。

参考: www.absolute-keitarou.net

これでOK。簡単ですね。

実際にtwitter投稿処理時にメールを送ってみました。

f:id:s2terminal:20151004192651p:plain

届きました。

なお、アプリケーションがViewを評価した時刻から実際にメールが届くまで1分程度かかりました。 SendGridがボトルネックなのかどうか調べていませんが、新規登録ユーザは意図的に配信を遅らせることがあるようです。

参考: qiita.com

まとめ

Azure上の仮想マシンから簡単にメールを送信することができました。 Azureにはメール送信サービスは用意されていませんが、SendGridのおかげで特に困ることはありませんでした。無料プランで 25,000通/月 と1日800通以上送信できるので、個人のWebサービスでは十分ですね。

sendgrid.kke.co.jp