現在Youtubeに注力してますので是非チャンネル登録お願いします!

胡田昌彦のコンピューター系チャンネル

DOS, コマンドプロンプト, バッチファイルからメールを送りたいあなたへ

コマンドプロンプトテクニック
この記事は約4分で読めます。

このブログへのGoogleから結構な数の人が「メール dos」とか「バッチ メール」とか「コマンドプロンプト smtp」とかのキーワードで以下のページにアクセスしています。

「コマンドプロンプト smtp」の人はまだしも、その他のキーワードの人は上記のページを見てもがっかりして帰るだけだろうと思うので、今回は「コマンドプロンプト、バッチからメールを送る方法」を紹介しようと思います。telnetで…というのはちょっと目的と違うと思うので。

外部プログラムを使う方法

方法はいくつかありますが、まずは外部プログラムを使う方法があります。が、私はほぼ使ったことがないので検索して見つかったものの紹介に留めておきます。プログラムなわけですからどうにでもなるわけですし、コマンドプロンプトやバッチからメールを送信したいということはおそらく自動化したいのだと思いますので、引数に宛先や本文を渡せるよなものが良さそうに思います。本文は外部のテキストファイルなどでも良いですけどね。

探せばほかにも沢山あると思いますが、SMAILというソフトが各種認証、暗号化、添付ファイル等に対応している上に、キャラクタセット、トランスファーエンコーディング指定も可能なようなのでよさそうな気がします。

これらを使えば問題解決!なのですが、一度インストールするなり、exeファイルを配置しておくなりの対応が必要なのでそういったことができない環境では厳しいですね。

CDO.Messageを使う方法

というわけで、何も入れなくてもWindowsの標準機能で簡単にメールを送信したい!という場合には私はいつもCDO.Messageを使っています。DOS, コマンドプロンプト、バッチファイル…と書いておきながらすいません。VBScript, JScriptを使うことになります。でもまぁ、「cscript xxxx.vbs」なんて感じで記述するだけですので問題ありません。Windows 2000以降なら動くはずなので、現存するたいていの環境でまず間違いなく動くと思います。

手元にVBScript版とJScript版のサンプルもあったので貼り付けておきます。

VBScript版

Dim oMsg
Set oMsg  = CreateObject("CDO.Message")
oMsg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
oMsg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.hoge.jp"
oMsg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
oMsg.Configuration.Fields.Update

oMsg.From     = "from@hoge.jp"
oMsg.To       = "to@huga.jp"
oMsg.Subject  = "タイトル"
oMsg.TextBody = "メールの本文"

oMsg.Send
JScript版
var oMsg = WScript.CreateObject("CDO.Message");

oMsg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
oMsg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.hoge.jp";
oMsg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
oMsg.Configuration.Fields.Update();

oMsg.From     = "from@hoge.jp";
oMsg.To       = "to@huga.jp";
oMsg.Subject  = "タイトル";
oMsg.TextBody = "メールの本文";

oMsg.Send();

      

コメント

  1. 名無し より:

    サンプルコードでは認証に対応していないので今時のメールサーバでは弾かれるのではないでしょうか?

    • コメントありがとうございます。

      2つの観点がありまして・・・。

      【1. 自分の属しているネットワークから外に出ていく時】
      単純なTCP25番での外部への通信はブロックされていることが多いです。スパムメールを投げて悪さする人あるいはそのための踏み台にされる人が多いのでその対策です。
      この場合ブロックされるのはメールサーバーによってではなく、インターネットに出ていく前のFireWallによってブロックされることになります。

      【2. インターネットのどこかから送られてくるメールを受け取る時】
      ここは、認証が無いのがまだ普通ですので認証に対応していないから弾かれるということはありません。(そのように構成はできるけど、その場合メールを受け取れない可能性が非常に高くなる)

      このあたり本に書いたような気もします。

  2. お名前 より:

    コメント

  3. […] DOS, コマンドプロンプト, バッチファイルからメールを送りたいあなたへ 週間人気記事 […]

タイトルとURLをコピーしました