sendまね〜る(sendmane.exe) の使い方

作成日:2006.12.10

 sendまね〜る は sendmail互換のスイッチを持つメール送信プログラムである。 sendmail を使う UNIX用 CGIを、Windows上で実行したいときに、sendmane.exeを使わない手はない。
 ただし、sendまね〜る はメールサーバではなく、あくまでもメール送信プログラムなので、メール送信するためには自分のアカウントがあるプロバイダの SMTPサーバか、あるいは自前の自宅メールサーバが必須である。
 以下では、sendまね〜る をインストールし、その使い方について解説する。
  1. ダウンロード
     ダウンロード先は なおきの部屋 の「ダウンロード」である。
     http://hypweb.net/xoops/modules/mydownloads/singlefile.php?cid=1&lid=1
    最新バージョンは 2006/06/02 にリリースされた sendm100.zip(バージョン: 1.00) である。

  2. インストール
     ダウンロードしたzipファイルを例えば C:\sendm に解凍する(ドキュメントルート下は避ける)。
    次に、コマンドプロンプトから sendmane.exe を実行すると、以下のような初期設定が始まる。
    設定した値は、sendmane.iniファイルに格納されるので確認が可能である。

    コマンド実行例

    C:\sendm>sendmane SMTPサーバのアドレス?(IPを奨励) []:smtp.nifty.com SMTPポート番号?(通常は25) [25]: 送信者のメールアドレス? []:user@example.com 送信者の名前? []:Sei Mei SMTP認証の使用 Yes=1 No=0 ? [0]:1 SMTP認証のユーザー名? []:user SMTP認証のパスワード? []:password POP before SMTPの使用 Yes=1 No=0 ? [0]: 日本語文字コード変換の使用 Yes=1 No=0 ? [0]:0

    解説

    SMTPサーバのアドレスは、プロバイダのSMTPサーバなら、 例えば smtp.nifty.com などを設定する。 自宅サーバの場合には、メールサーバと sendmaneを 同じホストで実行するなら、127.0.0.1 に、 異なるホストのときは、192.168.xx.xx など メールサーバのプライベートIPアドレスを設定する。 SMTPポート番号は通常は 25番、サブミッションポートを 使うなら、587番にする。 送信者のメールアドレスは、メールサーバとの接続に 使うアドレスであり、Envelope From と呼ばれ、 MAIL FROMコマンドで使われる。 メールの Fromとは基本的に別物である。 送信者の名前は、-sfオプションでのみ使われる。 SMTP認証は PLAINと LOGINに対応し、CRAM-MD5には非対応 であるが、昨今の OP25B下では SMTP認証ができないと お手上げなのでうれしい限りである。SMTP認証を 使用するときは、ユーザ名とパスワードを設定する。 SMTP認証ではなく POP before SMTPのメールサーバのときは、 同様に以下を設定する。 POP before SMTPの使用 Yes=1 No=0 ? [0]:1 POP3サーバのアドレス?(IPを奨励) []:127.0.0.1 POP3サーバのポート番号?(通常は110) [110]: POP3サーバのユーザー名? []:user POP3サーバのパスワード? []:password 日本語文字コード変換は、通常は CGI側で実行するので sendmaneで実行する必要性はほとんどないであろう。 メール送信スクリプトを自作するときには便利である。 ただ、v.1.00ではヘッダの文字変換にバグがあり、 全角文字の後に半角文字が続くケースで文字化けする。


  3. オプション設定
     ここでは、sendmaneに同梱の sendtest.txt を送信する場合を例題として説明する。
    コマンド行で、< はりダイレクトである。sendmaneの作者の説明では
    type sendtest.txt | sendmane -t のように、パイプを使って書かれている。
    ■ メールアドレスオプション
    	sendtest.txt には To: は書かれていないが、書かれていたとして、
    	To: 宛には送信せず、コマンド入力したメールアドレスにのみ送信する。
    	メールをテスト送信するときに便利に使える。Bcc送信と結果的に同じである。
    	複数の宛先を設定するときは、コンマで区切り半角空白はなしでメールアドレスを並べる。
    	コンマなしで半角空白で並べたときは、最後のメールアドレスのみが有効になる。
    	コンマと半角空白ありで並べたときも、最後のメールアドレスのみが有効になる。
    	メールアドレスは他のオプションの前に置くが、後にでもよい(ただし、-f の後は除く)。
       sendmane user@example.com < sendtest.txt
    	user@example.com宛に送信
       sendmane user1@example.com,user2@example.com < sendtest.txt
    	複数の宛先 user1@example.com と user2@example.com宛に送信
    
    ■ -tオプション
    	ヘッダから宛先を読む(To:, Cc:, Bcc)。
    	通常の使用では設定必須。
       sendmane -t < sendtest.txt
    	To:, Cc:, Bcc 宛に送信
       sendmane user@example.com -t < sendtest.txt
    	To:, Cc:, Bcc と user@example.com宛に送信
    	user@example.com へはBccによる送信と同じ結果になる
    
    ■ -fオプション
    	MAIL FROM のメールアドレスを設定する。
    	設定しないときは、MAIL FROM は 初期設定の送信者メールアドレス が使われる。
       sendmane user@example.com -f < sendtest.txt
    	MAIL FROM にヘッダの From を設定する
    	ヘッダの From行は、From: user@example.com ではなく、
    	From: NAME <user@example.com> の形式にしないと
    	Error: 501 Sender is invalid になる(sendmaneのバグ)
       sendmane user1@example.com -f user2@example.com < sendtest.txt
    	MAIL FROM に user2@example.com を設定する
    	-f user2@example.com は半角空白なしで -fuser2@example.com でもよい
    
    ■ -sfオプション
    	ヘッダの From行を書き換える。
    	通常は設定しない。
       sendmane user@example.com -sf < sendtest.txt
    	ヘッダの From行が
    	From: 初期設定の送信者名 <初期設定の送信者メールアドレス>
    	になる
    
    ■ -i, -oiオプション
    	.(ピリオド)のみの行で読み込みを終了しない。
    	通常は設定しておいた方がよい。-i と -oiは同じである。
       sendmane user@example.com -i < sendtest.txt
    
    ■ -ndオプション
    	Date: ヘッダがない場合でもDate:ヘッダを付加しない。
    	設定しても後段のメールサーバで Date: は付加されるのではと思う。
    	通常は設定しない。
       sendmane user@example.com -nd < sendtest.txt
    
    ■ -nj, -njbオプション
    	初期設定の 日本語文字コード変換の使用 Yes=1 をオフ(No)にする。
    	CGIの中で文字コード変換をしていれば sendmaneでは不要であり、そのようなときに使うとよい。
    	初期設定で 日本語文字コード変換の使用 No=0 なら設定しても無意味である。
       sendmane user@example.com -nj < sendtest.txt
    	本文のJISコード変換とヘッダの ISO-2022-jp+Base64エンコードを行わない
       sendmane user@example.com -njb < sendtest.txt
    	本文のJISコード変換を行わない。ヘッダの ISO-2022-jp+Base64エンコードは行う
    
    ■ -dオプション
    	設定内容を確認するためのデバッグ用
       sendmane -d >
       sendmane -d > 出力ファイル
    	設定内容、ヘッダ、本文をファイルに書き出す。
    	メールは送信されない
    
    ■ -initオプション
    	初期設定を実行する。2回目以後の初期設定で使う。
    	全てのオプションを省略したときは、-initとみなされる
       sendmane -init
    
    ■ -help, /?オプション
    	ヘルプを表示する
       sendmane -help > ファイル名
    	ヘルプ情報をファイルに書く
    
  4. 複数の sendmaneを使う
     sendmane.exeの設定値を変更して、複数の sendmane を使用したいときは、sendmane.exeをコピーし、例えば、sendmane2.exe や sendmail.exe として初期設定をすれば、設定値は sendmane2.ini や sendmail.ini に記憶され、別の設定で使うことが可能である。


  5. CGIから sendmaneを使う
    [Perlの場合]
    CGIによって異なるが、例えば KENTさんの CGIでは、
    $sendmail = '/usr/lib/sendmail';

    $sendmail = 'C:\sendm\sendmane.exe';
    あるいは、
    $sendmail = 'C:/sendm/sendmane.exe';
    のように書き換える。

    [PHPの場合]
     PHPで mb_send_mail や mail関数を使ってメール送信するとき、Windowsでは php.ini で SMTP, smtp_port, sendmail_from を設定するのが一般的である。
     しかし、以下のように UNIX用の sendmail_path を設定すれば Windowosでも動作する。sendmail_from と sendmail_path はいずれか一方をコメントにして使う。両者ともにコメントではないときは、sendmail_path の方が優先されるようである。
    [mail function]
    ; For Win32 only.
    ;SMTP = localhost
    ;smtp_port = 25
    
    ; For Win32 only.
    ;sendmail_from = user@example.com
    
    ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    sendmail_path = C:\sendm\sendmane.exe -t -i
    
  6. メール送信用スクリプト -Perl版-
    以下のスクリプトを、testmail.pl というファイル名で保存し、
    コマンドプロンプトから perl testmail.pl を実行する。
    ファイルのダウンロード(SJIS)
    # $mailto, $fromaddr に自分のメールアドレスを設定し、テストする
    
    use Jcode;
    use MIME::Base64 ();
    $sendmail = 'c:\sendm\sendmane.exe';
    
    $mailto = 'user@example.com';
    $fromaddr = 'user@example.com';
    
    $subject = "テストメール(Perl)";
    Jcode::convert(\$subject, 'jis');
    $subject = MIME::Base64::encode($subject);
    chomp($subject);
    $subject = "=?ISO-2022-JP?B?$subject?=";
    
    $name = "差出人名";
    if($name =~ /[^\w\s]/) {
    	Jcode::convert(\$name, 'jis');
    	$name = MIME::Base64::encode($name);
    	chomp($name);
    	$name = "=?ISO-2022-JP?B?$name?=";
    }
    $from = "$name <$fromaddr>";
    
    $mailbody = <<"_MAILBODY_";
    Sendまね〜るを使ったメール送信 Perlスクリプトのサンプルです。
    _MAILBODY_
    
    Jcode::convert(\$mailbody, 'jis');
    
    $mailtext = <<"_MAIL_";
    From: $from
    To: $mailto
    Subject: $subject
    MIME-Version: 1.0
    Content-Type: text/plain; charset="iso-2022-jp"
    Content-Transfer-Encoding: 7bit
    
    $mailbody
    _MAIL_
    
    open(MAIL,"| $sendmail -t -i") or die("Can not open $sendmail.");
    print MAIL $mailtext;
    close(MAIL);
    
    print "Your e-mail has been successfully delivered.\n\t$fromaddr -> $mailto\n";

  7. メール送信用スクリプト -PHP版-
    以下のスクリプトを、testmail.php というファイル名で保存し、
    コマンドプロンプトから php testmail.php を実行する。
    ファイルのダウンロード(EUC)
    <?php
    # 文字コードは EUCにする
    # $mailto, $fromaddr に自分のメールアドレスを設定し、テストする
    
    $mailto = 'user@example.com';
    $fromaddr = 'user@example.com';
    
    $subject = "テストメール(PHP)";
    
    $name = "差出人名";
    if(mbereg("[^A-Za-z0-9\s]", "$name")) {
    	$name = mb_convert_encoding($name, "jis");
    	$name = base64_encode($name);
    	$name = "=?ISO-2022-JP?B?$name?=";
    }
    $from = "$name <$fromaddr>";
    
    $mailbody = <<<_MAILBODY_
    Sendまね〜るを使ったメール送信 PHPスクリプトのサンプルです。
    _MAILBODY_;
    
    $mail = mb_send_mail($mailto, $subject, $mailbody, "From: $from");
    if ($mail) {
    	echo "Your e-mail has been successfully delivered.\n\t$fromaddr -> $mailto\n";
    } else {
    	echo "Mail delivery failed.\n";
    }
    ?>


  8. 同類のプログラム
     以下の2つのプログラムは、いずれも sendmail の代用として使用可能である。
    オプションは sendmaneほど多くないが、実際に使う分には特に困ることはない。

    1. Spencer Network Communication の sendmail.exe V2.0
    http://www.spencernetwork.com/CommonGatewayInterface/WindowsProgram/sendmail.exe.html

    sendmail.ini を必ず C:\bin の下に置く必要あり。
    SMTP認証は PLAIN。CRAM-MD5は非対応。

    2. glob の fake sendmail for windows
    http://www.glob.com.au/sendmail/

    SMTP認証は LOGIN。CRAM-MD5は非対応。

    3. 夢幻の簡易型Perl製sendmail - sendmail.pl
    http://www.yumemaboroshi.net/cgi239/

    sendmail.plではなく、sendmail.batの方を使い、
    $sendmail = 'C:\sendmail\sendmail.bat -t -i';
    のように設定すればよい。
    SMTP認証は PLAIN。LOGIN, CRAM-MD5に対応。

    4. Xmailの sendmail.exe
    http://www.xmailserver.org/

    Xmail内部の sendmail.exeを使っても可能である。
    ただし、Xmailが動作していることが絶対条件である。
    つまり、この方法だけは自前でメールサーバ(Xmail)を立てることが必須である。
    他の方法では自前でメールサーバを立ててもいいし、プロバイダのSMTPサーバでも可能。
    $sendmail = 'C:\xmail\sendmail.exe -t -i';
    オプションの説明
    http://www.penguin-soft.com/penguin/man/8/sendmail.html
    SMTP認証は PLAIN。LOGIN, CRAM-MD5に対応。


  9. 関連情報へのリンク
     sendまね〜る:サポート
     自宅マシン・メール送信計画
     Windows自宅サーバー用フォームメールの設定例(sendmane.exe編)
     ホームページにメール送信機能をつけてみよう
     Perlからメールを送信する
     フォームからのメール送信


作成:いと,mailto:gfh05223@nifty.com