Shoichi Matsuda's diary

このブログは移転しました。 https://shoma2da.net/ が新しいブログです。

【無料】herokuからメールを送信する

お手軽でWebサービスが構築できてとても便利なheroku
アドオンがとても充実していて無料でもかなり色々なことができます。

今回はそんなherokuでメールを送ってみたので手順をまとめておきます。
設定はとても簡単、しかも基本料無料です!

使用したアドオン

今回使用したのはSendGridのアドオンです。

f:id:shoma2da:20140301234712p:plain

選んだ理由は主に以下の2つです。

  • プロダクト名にBetaが付いていないので安定して動いてるのかなーと思い込み
  • 一日200通のメールの送信までは無料

メールを送るまでの手順

アドオン登録

まずはSendGridのアドオン画面から登録を行うか、

f:id:shoma2da:20140302001257p:plain

もしくはプロジェクト内で以下のコマンドを使って

$ heroku addon:add sendgrid

でsendgridアドオンを登録します。

sendgrid内での設定

次にSendGridのページで設定作業を行います。(アドオン登録できていればherokuのアプリ詳細画面にリンクができています)
最初にこのページへ行くと×印が付いている個所があります。

f:id:shoma2da:20140302002053p:plain 

「Configure Account Settings」をクリックすると統計情報やテンプレートに関する設定が行えます。
僕は以下の設定で「Updating settings」しました。

f:id:shoma2da:20140302002253p:plain

これで全てのマークがチェック印に変わります。

sendgridパッケージの導入

ここからはローカルプロジェクトの設定です。
今回はNode.jsの場合で行っていきます。

その他の言語についてもherokuのドキュメントページで解説されていますのでそちらを参照してください。

Node.jsの場合の導入はnpm installを使って1コマンドです。

$ npm install sendgrid --save
コード記述

いよいよメールを送信していきます。
herokuのドキュメントページにもあるように以下のような記述をします。

var sendgrid  = require('sendgrid')(
  process.env.SENDGRID_USERNAME,
  process.env.SENDGRID_PASSWORD
);

sendgrid.send({
  to: 'receiver@domain',
  from: 'sender@domain',
  subject: "メールタイトル",
  text: "メール本文"
}, function(err, json) {
  callback(err);
});

あとはherokuにデプロイしてこのスクリプトを実行してみましょう。
上記の例だとreceiver@domain宛てにメールが送られます!

このスクリプトは基本的にはheroku上でしか動作しませんので注意です。
理由としてはprocess.env.SENDGRID_USERNAMEprocess.env.SENDGRID_PASSWORDはherokuの環境上で設定される環境変数のため、ローカルでは値が用意できずにメール送信できません。(逆に言えばherokuにデプロイした状態でこれらの環境変数を直接見てソースを書き換えればローカルからでもメール送信できます。)

こんな使い方がおすすめ

無料枠の範囲ではユーザへのメール送信には向いていないような気がします。(一日200件までなので)

そのため無料枠での有効なのはサーバの状態などを管理者にメール送信してお知らせするといった使い方に向いているのではないでしょうか。
例えば以下の様なシチュエーションです。

  • サーバが処理できなかったとき(500エラー)
  • 定期的に動くような処理の実行結果(Heroku Scheduler
  • herokuにデプロイされたことをメールでお知らせ