スポンサーリンク

コマンドラインでメール送信する方法 (SMAILでリマインダシステムを3分で作ろう)


Windowsで,コマンドラインからメール送信する方法。


バッチなどに組み込めば,自分だけの「リマインダ」ソフトが作れる。


2〜3分ほどで完成する。



(1)SMTPの設定

SMAILというフリーソフトを使う。

ダウンロード
http://dip.picolix.jp/page3.html

gmailでの設定
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が使いやすいようだ。

無料で,ユーザ登録の必要もなく,ただ指定されたアドレスに携帯からメールを送っておくだけ。

そうすると,送った際に件名に書いた時刻が来ると,携帯にメールが送り返されてくる。

ToDoMail
http://www.aivy.co.jp/products/todomail.html

Googleカレンダーをリマインダとして使っている人も多い。

補足2

SMAILなどのソフトが無くても,メモ帳にプログラムを書くだけでメール送信できる。

別エントリに記載した。

コマンドラインでメール送信する方法 (WindowsのバッチでSMTP通信)
http://d.hatena.ne.jp/language_and_engineering/20100913/p1