Macの「メール」なる標準アプリ (それ以上に詳しい名前がそのソフトウェアに与えられているか知らない) なら新着が来たら通知が少しの間だけデスクトップの右上にあるけど. すぐに消えるし, Macの上でだけだし.
すぐに気づくのはTwitterのリプライだ.
なにはともかく, メールの新着をチェックするところを書いた.
nodeの process_child
で openssl を呼んで, IMAPのコマンドを直に叩かせるだけである. IMAPの実際のコマンドを見るのは初めてだったが, コマンドラインから ssh をつかい GMail で読み書きする - KRAKENBEAL RECORDS ってゆう記事の 「コマンドラインでGMailのメールを読む」の節を参照した.
IMAPを用いてGMailでメール何件溜まってるかと最新のやつのfromだけ取ってくる
{spawn} = require 'child_process'
client = spawn 'openssl', ("s_client -crlf -connect imap.gmail.com:993".split ' ')
gmail = "your@gmail.com"
password = "yourS3cr3tPassowrd"
mail_number = -1
from = false
defer = ->
console.log "#{mail_number} mails exist in inbox"
console.log "the last one from #{from}"
client.stdout.on 'data', (data) ->
data = data.toString()
console.log data
switch
when (data.indexOf 'OK Gimap ready') >= 0
client.stdin.write "? login #{gmail} #{password}\n"
when (data.indexOf 'authenticated (Success)') >= 0
client.stdin.write '? select inbox\n'
when (/\*\s\d*\sEXISTS/.test(data))
mail_number = data.match(/\*\s(\d*)\sEXISTS/)[1] | 0
client.stdin.write "? fetch #{mail_number} body[]\n"
when (data.indexOf 'Message-ID: ') >= 0
lines = data.split '\n'
around = false
for i in [0...lines.length]
if (lines[i].indexOf 'From: ') is 0
around = lines[i] + lines[i+1]
from = if /<.*>/.test around
around.match(/<(.*)>/)
else
(around.split ' ')[1]
client.kill 'SIGHUP'
do defer
この defer の部分を Twitter にして, 全体を数分置きに呼ぶというものを csisv16:~/mail_notify/main.coffee
に置いて現在試用中である
先日Amazonで注文したイヤホンが今日の15時にポストを見ると入ってた