================================
「メール送信コマンド」 WinMailCmd
All Rights Reserved, Copyright(C) 2001-2009 F.Takasaki
http://homepage2.nifty.com/f_takasaki/
================================
1. 【概要】
「WinMailCmd」は、Windowsアプリケーション(CUIベース)のメール送信コマンドです。
UNIXのmailコマンドの様に、コマンドプロンプト や バッチファイル からメール送信できます。
1-1. メール機能、制約
(1)Eメールをコマンド送信できます
・メールサーバに対してコマンドでメッセージを送信します。(SMTPプロトコル)
・メッセージに加え、添付ファイルを送信することもできます。(MIME、BASE64)
・送信前に利用者認証を実施します。(POP before SMTP または SMTP AUTH)
・送信先をメーリングリスト風に指定できます。
なお、SMTP AUTHは、25番ポートブロック(Outbound Port25 Blocking)が実施されている
メールサーバが、回避策として提供している送信方法です。
詳細は、http://jeag.jp/swg/op25b/index.html を参照してください。
(2)処理履歴(ログ)を保存します
・送信ログ(メールヘッダ部分のみ)をWinMailer01.logに保存します。
・プログラムのエラーログを、WinMailCmdERR01.logに保存します。
・ログは 一定サイズを超えるとデータ内容を退避します。
退避時に、ログファイルは、退避用ファイルに名称変更されます。
(例えば、???01.log→???02.log)
・SMTPのプロトコルデバッグ機能。プロトコルレベルの送受信を確認できます。
(3)制約について
・(マナーとして)タイトルとメッセージ内の半角カタカナは
全角カタカナに強制的に変換して送信します。
・メールの送信はできますが、受信機能はありません。
(受信・転送ツールとしては、「WinMailPoper」を用意しています。)
2.【使用方法】
2-1. WinMailCmdコマンドのパラメータ説明
*パラメータは すべてカンマで記述。
*パラメータの省略時は、文字列指定なし または "" を使用する。
(1)初期設定(設定変更)時
WinMailCmd --conf, SMTPSRV, SMTPPORT, FROM, POPSRV , [POPPORT], USER, PASS
・フラグ = 設定 および 認証方式 を指示するフラグ。(--conf または --xcnf)
--conf:「POP before SMTP」認証を実施
・SMTPSRV = SMTPサーバ
IPアドレス、ホスト名のどちらでもかまいません。
・SMTPPORT = SMTPポート
--confの場合、通常 25 を指定します。
・FROM = 送信元メールアドレス
あなたのメールアドレスを指定します。
(なお、送信時に、FROMの表示名を変えたい場合は、「(2)メール送信時」の部分を参照)
・POPSRV = POP3サーバ
IPアドレス、ホスト名のどちらでもかまいません。
・POPPORT = POP3ポート [省略可]
通常 110 を指定します。(省略時:110)
・USER = ユーザ名
POP3サーバのアカウント名。
・PASS = パスワード
POP3サーバアカウントのパスワード。
WinMailCmd --xcnf, SMTPSRV, SMTPPORT, FROM, [POPSRV], [POPPORT], USER, PASS
・フラグ = 設定 および 認証方式 を指示するフラグ。(--conf または --xcnf)
--xcnf:「SMTP AUTH」認証を実施
・SMTPSRV = SMTPサーバ
IPアドレス、ホスト名のどちらでもかまいません。
・SMTPPORT = SMTPポート
--xcnfの場合、通常 587 を指定します。
・FROM = 送信元メールアドレス
あなたのメールアドレスを指定します。
(なお、送信時に、FROMの表示名を変えたい場合は、「(2)メール送信時」の部分を参照)
・POPSRV = POP3サーバ [省略]
--xcnfの場合POP3サーバの指定は省略します。指定時は無効です。
・POPPORT = POP3ポート [省略]
--xcnfの場合POP3ポートの指定は省略します。指定時は無効です。
・USER = ユーザ名
SMTPサーバのアカウント名。
・PASS = パスワード
SMTPサーバアカウントのパスワード。
(例)初期設定(設定変更)時のコマンド例
「POP before SMTP」認証を実施する例:
WinMailCmd --conf, smtpServer.aaaa.xx.jp, 25, myAddress@aaaa.xx.jp, pop3Server.aaaa.xx.jp, 110, myUser, myPasswd
・SMTPサーバ「smtpServer.aaaa.xx.jp」の 25番ポートにメールを送信する。
(通常、smtpは25番のポートです)
・メール送信元の自分のアドレスは、「myAddress@aaaa.xx.jp」とする。
・POP3サーバ「pop3Server.aaaa.xx.jp」の 110番ポートでメールアカウントの認証をする。
(通常、pop3は110番のポートです)
・POP3サーバで、アカウント:myUser、パスワード:myPasswdで認証をする。
認証が正しくできないとメールを送信しません。(不正利用の防止)
「SMTP AUTH」認証を実施する例:
WinMailCmd --xcnf, smtpServer.aaaa.xx.jp, 587, myAddress@aaaa.xx.jp, , , myUser, myPasswd
・SMTPサーバ「smtpServer.aaaa.xx.jp」の 587番ポートにメールを送信する。
(通常、SMTP AUTH方式のsmtpは587番のポートです)
・メール送信元の自分のアドレスは、「myAddress@aaaa.xx.jp」とする。
・POP3サーバ、POP3ポートは省略。
・SMTPサーバ で、アカウント:myUser、パスワード:myPasswdで認証をする。
認証が正しくできないとメールを送信しません。(不正利用の防止)
(2)設定確認時
WinMailCmd フラグ
・フラグ = 情報表示 を指示するフラグ。(--info)
--info:初期設定時(設定変更)時に指定した情報のうち、
パスワード以外のものを表示します。
(例)設定確認時のコマンド例
WinMailCmd --info
(3)メール送信時
WinMailCmd TO, [CC], SUB, MSG [,ATCH]
・TO = 宛先アドレス (メールアドレス or ファイル)
送信相手のメールアドレス(1つのみ) または アドレスを列挙したテキストファイル
の「ファイル名」のどちらか。(自動で判断します)
・CC = CCアドレス (メールアドレス or ファイル) [省略可]
ccで送る送信相手のメールアドレス(1つのみ) または アドレスを列挙したテキストファイル
の「ファイル名」のどちらか。(自動で判断します)
・SUB = タイトル
メールの件名
・MSG = メッセージ (ファイル or 本文)
メールの「メッセージ本文」 または メッセージを書いた"テキストファイル"
の「ファイル名」のどちらか。(自動で判断します。ファイル名指定を推奨。)
本コマンドが解釈できる「平文 = 普通のテキスト」である必要があります。
・ATCH = 添付文書 (ファイル) [省略可]
添付したい文書の「ファイル名」。 このファイルはどんなファイルでも構いません。
(イメージや圧縮ファイルなどでも可。)
(例)メール送信時のコマンド例
WinMailCmd yourAddress@bbbb.yy.jp, "", test mailです, テストメールを送信しています。
・相手の 宛先アドレス「yourAddress@bbbb.yy.jp」、CCアドレスなし。
メールのタイトルは「test mailです」、本文は「テストメールを送信しています。」
WinMailCmd c:\MailGroup.txt, "", test mailです, テストメールを送信しています。
・相手の 宛先アドレスは”c:\MailGroup.txtファイルの中身”に列挙したアドレス、CCアドレスなし。
メールのタイトルは「test mailです」、本文は「テストメールを送信しています。」
WinMailCmd yourAddress@bbbb.yy.jp, ccAddr@zz.jp, 確認:資料, c:\mail.txt, c:\資料.doc
・相手の 宛先アドレス「yourAddress@bbbb.yy.jp」、CCアドレスは「ccAddr@zz.jp」
メールのタイトルは「確認:資料」、本文は”c:\mail.txtファイルの中身”を送ります。
また、”c:\資料.doc”を添付します。
2-2. 便利な使い方
(1)「アドレスリスト」の利用
・複数のアドレス宛てに送信するため、「アドレスリスト」を記述できます。
以下の様に、”,”でアドレスを列挙します。複数行の記述も可能です。
(例)--- アドレスリストファイルの中身 ----------------
address1@bbbb.yy.jp, address2@aa.xx.jp
address3@ccc.zz.com
-------------------------------------------------
「アドレスリスト」は、コマンドのパラメータで "複数アドレス"を指定できないため
それを補完をする機能です。
また、「メーリングリスト」風に送信する場合にも使用できます。
以下の 「環境変数」の利用の「別名の指定」を参照して下さい。
(2)「環境変数」の利用
* 表示名の指定 −− 送信目的にあわせ"送信者名"を選択できます。
送信時に、メールの内容にあわせて、送信者の表示名を変更することができます。
・FROM_NAME (日本語 可):
送信元メールアドレス(FROM)の"表示名"を指定できます。
指定がない場合は、初期設定時の「送信元メールアドレス」の@以前を使用します。
(例) set FROM_NAME="定期メール送信サービス"
* 別名の指定 −− "メーリングリスト"に似た使い方ができます。
コマンドのパラメータで指定したアドレスと別のアドレス名で送信ができます。
ただし、この別名は(メールサーバ上に存在しないため)本コマンドでの
送信時以外は利用できません。(相手からの返信には利用できません。)
・TO_ALIAS (半角英数 のみ):
宛先アドレス(TO)の"別名"を指定できます。
(例) set TO_ALIAS="AllUsers@bbbb.yy.jp"
・CC_ALIAS (半角英数 のみ):
CCアドレス(CC)の"別名"を指定できます。
(例) set CC_ALIAS="MyStaffTeam@bbbb.yy.jp"
もし、指定するアドレスのドメイン表記が不完全だと サーバ側で補完されます。
また、"( )" で囲めば、アドレス表現でなく、任意の文字にすることもできます。
なお、指定した結果がどのように表示されるのか、
メールサーバにより変わる場合があります。
* 返信先の指定 −− "Reply-Toアドレス" が指定できます。
From以外のアドレスに返信させたいとき、ここで別のアドレスを指定できます。
・REPLY_TO (半角英数 のみ):
Reply-Toアドレスを指定できます。
(例) set REPLY_TO="MyAddr2@bbbb.yy.jp"
(3)「圧縮ツール」の利用
・複数ファイルを添付するには、圧縮ツールで1ファイルにアーカイブしてから送信します。
(例)--- CUIベース(LHA32.EXE等)のコマンドを利用するバッチの例 ----------
lha32 a /xr c:\atch.lzh c:\目次.doc c:\本文.doc
WinMailCmd addr@bb.jp,"", 資料です, c:\mail.txt, c:\atch.lzh
-----------------------------------------------------------------
(4)「再入力画面」の利用
*初期設定時:
・一部の必須パラメータが省略されていると、再入力を補助する「再入力画面」
を表示します。 ここで、必要な文字を入力することもできます。
(例)--- 再入力画面 を利用する例(これはUSER,PASSを省略した場合)-----
WinMailCmd --conf, smtp.aa.jp, , addr@aa.jp, pop.aa.jp
-----------------------------------------------------------------
・ユーザ、パスワードに、Windowsコマンドシェルとしての予約文字( % 等 )があると、
コマンドラインから正しくWinMailCmdにパラメータが渡せない場合があります。
その場合は、この方法で対処してください。
*メール送信時:
・一部の必須パラメータが省略されていると、再入力を補助する「再入力画面」
を表示します。 ここで、必要な文字を入力することもできます。
また、ここはパラメータの再入力なので、もし「アドレスリスト」を利用している場合は、
"ファイル名"を入力することになりますので ご注意ください。
(例)--- 再入力画面 を利用する例(これはSUB,MSGを省略した場合)-------
WinMailCmd addr@bb.jp,,,,
-----------------------------------------------------------------
再入力画面は、3分間しか表示しません。その間に不足分を入力し送信してください。
(本コマンドがバックグラウンドから起動された場合、入力要求待ちになり
不用意にプロセスが残るのを避けるためです。)
・再入力画面では、設定しているサーバ情報の参照が可能です。
「サーバ情報」ボタンでパスワード以外の設定情報を確認できます。
*パラメータ省略の注意事項:
すべてのパラメータを省略すると、使用方法を紹介する画面しか表示しませんので
ご注意ください。(この場合は、ボタンを押すまで"永久"に待ち続けます)
2-3. 送信スクリプト例
連続してメールを送信するスクリプトを記述してみました。 (ファイル:01ScriptWMC.txt)
多量のメールをする場合は、送信方法に注意してください。
アドレスリスト内のアドレス列挙数は、メールサーバの能力次第です。
(1回20〜30名程度でしょうか? 皆様の環境で調整してみてください。)
また、送信ループ内では 通信負荷を与えないように、sleepをしています。
(1)標準コマンドのみで記述したスクリプト例
* 環境変数について
・FROM_NAME="セミナー事務局" ← # 送信者の表示名 (好みで)
・TO_ALIAS="(WinterSeminarMembers)" ← # 宛先の別名 (受信者同士アドレスを伏せたいなら)
・REPLY_TO="SeminarStaff@bbbb.yy.jp" ← # 返信先アドレス (Fromとは別に変更する必要があるなら)
* (苦心の)標準コマンド 使用例の説明
・time<NUL | FIND "現在" ← # 時間表示! (システム時刻設定コマンドの利用)
# echo. | time | FIND "現在" でも可
・ping localhost >NUL ← # sleepもどき (自分にpingさせて時間稼ぎしている)
* 記述上の注意事項
・BATファイルには、不要な文字や 空白(半角、全角)などをコマンドの前後につけないでください。
誤動作の原因になります。
(2)標準コマンドとWSHを利用したスクリプト例
* Windows Scripting Host(WSH)の例について
・本例は、VBScriptで記述しています。
なお、技術的なドキュメントは、http://msdn.microsoft.com/library/ja/ で
「VBScript ランゲージ リファレンス」を検索することで閲覧できます。
(http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/vbscripttoc.asp)
(3)送信スクリプト(BATファイル、WSHのVBS・JSファイル)とWinMailCmdとの入出力情報について
* 環境変数による情報の受渡しについて
・"送信スクリプト"側から"WinMailCmd"に引渡すことはできますが、
"WinMailCmd"から"送信スクリプト"側に出力することはできません。
(WindowsOSのコマンドシェルがサポートしていないためです)
* リターンコード(ERRORLEVEL)による情報の受渡しについて
・"送信スクリプト"としては、リターンコード(ERRORLEVEL)を判定する手段がありますが、
"WinMailCmd" 側からリターンコード(ERRORLEVEL)を返すことはできません。
(WinMailCmdのプログラミング言語 VisualBasic6がサポートしていないためです)
* 送信スクリプトで "送信エラー対策"をするには
・複数回メールを送信する場合、エラーをチェックして送信をストップできればよいのですが、
上記の2つの理由で、スクリプトはプログラム側からの正常・異常の結果を受け取れません。
また「注意事項」にもあるとおり、"送信後にコマンドが終了しても、サーバと通信が終了
していない場合がある" ので、多量のメールを出す場合は、送信スクリプト側で十分に余裕
を見て "Sleep"をするようにしてください。
2-4. 詳細なログ の出力方法 ( -- 上級者向け -- )
(1)「デバッグ用 環境変数」を利用して、サーバとのプロトコル通信ログを保存できます。
ログの出力例を記述してみました。 (ファイル:09DebugWMC.txt)
* エラー等が発生し、サーバとの通信状況をプロトコルレベルで解析する必要がある
場合に指定します。 出力されるログファイルは以下のとおりです。
メール送信の通信履歴(SMTPプロトコル): WinMailerProtocol??.LOG
利用者認証の通信履歴(POP プロトコル): WinPoperProtocol??.LOG
・デバッグ用環境変数: DEBUG_MODE
ログを出力したい場合は、上記 環境変数に "PROTOCOL"という文字を指定してください。
(例) set DEBUG_MODE=PROTOCOL
指定できる文字は"PROTOCOL"のみです。
2-5. 注意事項 等
(1)本ソフトの注意事項
・[重要]インストールしたディレクトリのアクセス管理は厳密にしてください。
第3者に対して、「読み取り権」がある場合は、パスワード情報を保持したままCOPYされ、
持ち出される可能性があります。「実行権」がある場合、知らない間にあなたになりすまして、
メールを送付される可能性があります。
・エラー時にダイアログを表示することがあります。(極力出さない様にするつもりですが)
そのため、スケジュラやタスクで起動する際は注意してください。
(パラメータエラー、通信エラー、その他のエラー で発生します)
・アドレスリストに記述できるアドレス数の上限を検証していません。 また利用環境により
問題なく送信ができる条件が変わる場合があります。 なお、規定により1回の送信に使える
アドレス数は100を超えることはありません。
・アドレスパラメータ(TO、CC)は、本来 英数字であるため 無条件に半角変換しています。
(お節介ですが。。)
そのため、アドレスリストを使う場合に指定する「パス名」「ファイル名」には、半角英数字を
使用することを強く推奨します。(全角のカタカナや英数字は半角になって正しく読めません。)
・メッセージとしてファイル名を指定する場合、もし、指定したファイルの”内容”でなく、
”ファイル名”そのものが送信されたならば、ファイルが正しく読めなかった可能性があります。
(原因としては、「ファイルなし」「ファイル名の指定誤り」 など)
・コマンドに記述する文字列として「改行」を指定できません。そのため、コマンド上で
長いメッセージを指定する場合、欠落・文字化け等の原因になることがあります。
(メッセージ等が長文になる場合は、本文に改行を記述した「ファイル」から読込むことを
推奨します)
・送信後にコマンドが終了しても、サーバと通信が終了していない場合があります。
(通信完了は多少遅れる場合があります)
・送信性能等は保証できません。 メール送信に性能が要求される場合は、他のツールを
ご検討ください。
(2)既知の問題点
・十分大きな(例えば添付ファイルが1MB近くある)メールは、動作が遅くなります。
3. 【動作環境】
*Windows95 OSR2以降。WindowsNT4.0以降 で動作すると思います。
[動作確認環境]
・Win95 OSR2
・WinNT4.0 SP5、Win2000、WinXp、WinServer2003 RC2
・WinVista、WinServer2008 RC1、Win7 RC
4.【インストール】
4-1. インストール
*インストーラを起動しインストールします。
4-2. Windows Vista の場合の インストール注意事項
・システムフォルダへの書き込みについて
本アプリケーションでは、過去のOSとの互換を保つ上で、
特定のユーザディレクトリを意識しておらず、アプリケーションのある
カレントディレクトリに、各種設定情報、ログ情報、などを書込みます。
Windows Vistaでは、%WinDir%,%ProgramFiles%への書込みを
「%LocalAppData%\Virtual Store」配下にある「Program Files」や
「Windows」フォルダに再配置して書込みますのでご注意ください。
詳細は以下の私のホームページでご確認ください。
「Windows Vistaでアプリケーションを利用する際の注意事項」
→ http://homepage2.nifty.com/f_takasaki/t2_00index_vista.html
(追記)Windows Server 2008では、ProgramFilesへの書込みは
従来どおり可能なようです。
5. 【ソフトウェア使用上の注意】
[!] このプログラムは「フリーソフトウェア」です。
また、著作権は、F.Takasakiが保持します。
[○] 商用目的の利用は可能です。
[○] 再配布についても可能ですが、配布形態・内容を変更せずに行ってください。
[×] 無断で、販売や転載等はできません。
[×] 不利益・不快感を与えたり、公序良俗に反するような使用については、
これを禁止します。
[!] このプログラムの使用による、いかなる損害に対しても責任を負いません。
以上
|