shellとperlとpostfixを使った超簡単なリマインダーを作成してみた。今のとこ、必要なタスクが1件しかないので全然汎用的ではないけれど。
構想
そもそもこの機能は、「Jizile」の支払方法変更手続を毎月ちゃんとしなければという意識から生まれることとなりました。手続きしないとリボ手数料がとられてしまう可能性がありますからね。
さらに言うと、そのためにアプリを入れたりすると無駄に電池食ってしまいそうで嫌だったんです。その点スマホに届いたメールに返送するだけっていう仕組みなら、アプリの追加はいりませんから。
中身(簡易)
以下のような簡単な内容です。
- 特定できないランダムなアドレスを決める。aaaaa@xxx.netなど。
- 毎月特定日、特定時間にメールを送信。(送信元アドレスは、上記のアドレス)
- 送信元に対し、返信すると、その月の作業を完了したとみなし、次の日からメールを送らない。
- 次の月の特定日になると、また作業しなさいとメールを送る。
(以下連鎖。ばよえ~ん)
中身(詳細)
■期間判定・メール送信
毎日朝8時にcronが期間判定バッチ(shell)を起動。
期間判定バッチは、期間判定ファイルに記載されている日付を確認する。
本日の日付、および期間判定ファイルに記載されている日付から、それぞれの期間を判定する。
(期間判定方法)
日が01~15の場合→今月度(例 2014/05/01→2014/05月度)
日が16~末日の場合→次月度(例 2014/05/20→2014/06月度)
本日の日付から期間判定した結果(X)と期間判定ファイルに記載されている日付から期間判定(Y)の比較結果により、メールを送信するか判断する。
⇒X > Y の場合、メールを送信する。※メール送信バッチ(perl)を利用。
■メールが返信されてきた時の処理
期間判定ファイルの中身を現在の日付(YYYYMMDD)に書き換える。
⇒postfixのaliasesに以下のように追加するだけでOK。
aaaaa: "| date +'%Y%m%d' > /tmp/yyy.txt"
上記の場合、「aaaaa@xxx.net宛のメールを受信したときに期間判定ファイル(/tmp/yyy.txt)のファイル内容を現在の日付に書き換えるよ!」という意味になります。もちろん、あとでpostaliaseしましょうね。
汎用的にするならDBと、設定画面が必要ですね。必要性が出てこれば検討したいと思います。