夜にメールを書いて朝に送る(Gmail を特定時刻に自動で送信する)

この記事は KainokiKaede Advent Calendar 2014 16日目の記事です(大嘘)

生活リズムが崩壊しているので常識的な時刻にメールを送ることができない。できれば夜に書いて朝に送り、睡眠時間を偽装したい。

Thunderbird などのメーラーを使っているならアドオンでなんとかすればいいが、残念ながら完全に Gmail のウェブアプリに移行してしまっているためアドオンを付け加えることが不可能である。

Boomerang みたいな Gmail 自動送信アプリを使おうとも思ったが有料だし、なんか外部サービスに Gmail を預けるのがちょっと抵抗があるのでやめておきたい。

そこで Google Spreadsheets のスケジューリング機能を使って Gmail を送信しようということになる。幸い既にそのための コード を書いてくれている人がいて、それを簡単に利用できるようにする スプレッドシートを配布 してくれている人もいる。解説動画 もある(親切だ)。

手順としては:

  1. Gmail でメッセージを作成して、送信せずに下書きに保存する。送信予約をした後に編集をすると予約がキャンセルされてしまうので注意。ちゃんと完成させてから以下の手順に移る。
  2. このリンク をクリックして上記のコードが既に導入されているスプレッドシートを自分の Google Drive にコピーする。
  3. そのままだとタイムゾーンがインドになっているので(たぶん元の製作者がインド人)、File > Spreadsheet Settings からタイムゾーンを自分の場所のものに変更する。
  4. メニューバーの Gmail Scheduler > Step 1: Authorize を選択して Spreadsheet から Gmail を操作できるようにする。なにやってるのかわからないから不安だという人は、 Tools > Script Editor からこのシートで組まれているコードを読むことができる。300行弱の JavaScript コードなので読んでみると面白いかも。外部にメールなどを送るようなコードは書かれていないように見える(責任は持てないが……)。
  5. Gmail Scheduler > Step 2: Fetch Messages を押すと、下書きに入っているメールが Spreadsheet にリストアップされる。
  6. 時刻を設定する。適当に入力しても Google 先生がなんとかしてくれるが、私は 2014-12-16 08:00 のように(手で)入力している。
  7. Gmail Scheduler > Step 3: Schedule Messages を押すと、Status のところに Scheduled と表示される。この状態になったら勝手に送信されるので Spreadsheet を閉じてもかまわない。
  8. 送信予約をキャンセルしたい場合は Gmail Scheduler > Cancel Pending Jobs を押せばキャンセルされ、Status に Not Scheduled と表示される。
  9. 必要なくなった行は行ごと削除してしまってかまわない(たぶん)。

便利なのは、Gmail 上で編集したものをそのままスケジューリングできること。画像とか添付ファイルとかを設定しておけば、それをそのまま送ることができる(コードを読むと実はそのまま送っているわけではなくてまるまるコピーして送ったのちに元のメールを削除するということをしているのだが(それゆえ元のメールがゴミ箱に残るのだが)、まぁその部分の処理はわりと頑張って書かれているようなのでおおむね問題なかろう)。

でも正直 Gmail の標準機能として実装してほしいところである。はてなブログにすら「日時を指定して投稿」機能があるのに Gmail にないってのはどういう了見なのか。