sendまね〜る は sendmail互換のスイッチを持つメール送信プログラムである。 sendmail を使う UNIX用 CGIを、Windows上で実行したいときに、sendmane.exeを使わない手はない。
ただし、sendまね〜る はメールサーバではなく、あくまでもメール送信プログラムなので、メール送信するためには自分のアカウントがあるプロバイダの SMTPサーバか、あるいは自前の自宅メールサーバが必須である。
以下では、sendまね〜る をインストールし、その使い方について解説する。
- ダウンロード
ダウンロード先は なおきの部屋 の「ダウンロード」である。
http://hypweb.net/xoops/modules/mydownloads/singlefile.php?cid=1&lid=1
最新バージョンは 2006/06/02 にリリースされた sendm100.zip(バージョン: 1.00) である。
- インストール
ダウンロードした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ではヘッダの文字変換にバグがあり、 全角文字の後に半角文字が続くケースで文字化けする。
- オプション設定
ここでは、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 > ファイル名 ヘルプ情報をファイルに書く- 複数の sendmaneを使う
sendmane.exeの設定値を変更して、複数の sendmane を使用したいときは、sendmane.exeをコピーし、例えば、sendmane2.exe や sendmail.exe として初期設定をすれば、設定値は sendmane2.ini や sendmail.ini に記憶され、別の設定で使うことが可能である。
- 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- メール送信用スクリプト -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";
- メール送信用スクリプト -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"; } ?>
- 同類のプログラム
以下の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に対応。
- 関連情報へのリンク
sendまね〜る:サポート
自宅マシン・メール送信計画
Windows自宅サーバー用フォームメールの設定例(sendmane.exe編)
ホームページにメール送信機能をつけてみよう
Perlからメールを送信する
フォームからのメール送信