コマンドラインでメール送信する方法 (SMAILでリマインダシステムを3分で作ろう)
Windowsで,コマンドラインからメール送信する方法。
バッチなどに組み込めば,自分だけの「リマインダ」ソフトが作れる。
2〜3分ほどで完成する。
(1)SMTPの設定
SMAILというフリーソフトを使う。
ダウンロード
http://dip.picolix.jp/page3.htmlgmailでの設定
http://exeonline.client.jp/aggress/help/mail_gmail.html
smail.exeを開いて,GUI上で設定を書き込む。
- SMTPポート番号:25
- SMTP認証:AUTH_PLAIN
- SMTPユーザID:〜〜@gmail.com
- SSL暗号化:使用する(ポート465)
- POP:いじらなくてよい
保存→終了
(2)送信
コマンドプロンプトから次のように打ち込むと,メール送信できる。
smail.exe -d -hsmtp.gmail.com -f送信元アドレス -s件名 -F本文内容.txt 送信先アドレス
本文内容.txtの中には,本文を書き込んでおく。改行や空行があってもよい。
gmailだと,送信元と送信先が同じアドレスの場合は受信トレーに反映されないので注意。
SMTP専用にgmailアカウントを取得するのがいいかもしれない。
(3)リマインダを作る
上記のコマンドを「○分後に実行」してくれるようなスクリプトを,WSHで書けばよい。
まず,(2)に記したsmailコマンドを「sendmail.bat」などのファイル名で保存。
(これはクリックするだけでメール送信される。)
次に,下記のコードを「reminder.vbs」で同じフォルダに保存。
' 入力させる dim minute minute = InputBox( "何分後に送信しますか?", "入力", "0" ) ' タイマーセット if Len( minute ) > 0 and minute >= 0 then dim millsec millsec = minute * 60 * 1000 ' 眠る WScript.Sleep( millsec ) SendMail() else ' キャンセル押下時は長さ0の配列が返る WScript.Echo( "キャンセルされました。" ) end if ' メール送信 Sub SendMail() Set ws = WScript.CreateObject("WScript.Shell") ws.Run "sendmail.bat" WScript.Echo( "送信されました。" ) end Sub
なぜVBScriptなの?と思うかもしれないが,JScriptにはプロンプトが無くて面倒なのだ。
[WSH]ユーザから入力を得る方法 (JScriptで prompt/InputBoxもどき)
http://dqn.sakusakutto.jp/2008/06/wsh-jscript-promptinputbox.html
- wsfの同一job中で,VBSとJSを混在させる。VBS側でInputBoxの関数を作っておいて,その関数をJS側で呼び出す。
このvbsファイルをダブルクリックすると,下のようなプロンプトが開く。
デフォルトで「0分後に送信」(即座に送信)という事になっている。
数字を打ち込んで,OKを押すと,指定した分だけ待ってからメールが送信される。
自分の携帯宛てにメールを送る事にすれば,簡単なアラーム・タイマーのようなものになる。
メーリングリスト宛てに「そろそろ会議ですよ」とか送る事にすれば,ちゃんとしたリマインダだ。
面倒な設定がいらず,CUIコマンド一発で済むというのがよいところ。
既存のスケジューラを使うよりも拡張性が高いし,他のシステムにも組み込みやすい。(※悪用厳禁)
補足
一般のリマインダサービスでは,ToDoMailが使いやすいようだ。
無料で,ユーザ登録の必要もなく,ただ指定されたアドレスに携帯からメールを送っておくだけ。
そうすると,送った際に件名に書いた時刻が来ると,携帯にメールが送り返されてくる。
Googleカレンダーをリマインダとして使っている人も多い。
補足2
SMAILなどのソフトが無くても,メモ帳にプログラムを書くだけでメール送信できる。
別エントリに記載した。
コマンドラインでメール送信する方法 (WindowsのバッチでSMTP通信)
http://d.hatena.ne.jp/language_and_engineering/20100913/p1