俺だけのために Ore! Tips!

Windows サーバに、sendmail 互換プログラムを導入

2004年10月20日 作業


「send まね〜る」のインストール。

Windows 上に、UNIX マシンで動いていたメールフォーム CGI 等をなるべく手をかけずに移植したいので、Windows で動作する sendmail 互換ソフトである「send まね〜る」をセットアップしてみる。(ちなみに、コマンドとしての sendmail 互換なだけで、デーモン機能はない。だから SMTP サーバ機能は別途必要(ま、今回は Windows 標準搭載の SMTP サービスを利用ということで))

http://hypweb.net/xoops/modules/mydownloads/viewcat.php?cid=1 から、最新バージョンを落としてくる。(2004/10/20 現在の最新版は sendm098.zip)

sendm098.zip を解凍すると、sendm というフォルダが出来るので、その中の sendmane.exe を、sendmail.exe という名前に変更する。


sendmail.exe を実行すると、コマンドプロンプトが開き、初期設定が始まる。


 ******** sendまね〜る * 初期設定 *********
  [ ]内は、現在の値です。変更のない時は
  [Enter]だけを押してください。

SMTPサーバのアドレス?(IPを奨励)
[]:127.0.0.1

SMTPポート番号?(通常は25)
[25]:<改行のみ>

 送信者のメールアドレスとは、SMTPサーバとの
 (接続)通信時に使用されるメールアドレスです。
 通常、受信者は知ることができません。
 SMTPサーバによっては、メールアドレスにより
 接続を許可しているところがありますので
 その場合は適切なアドレスを設定してください。
 -sf オプション使用時には、このアドレスが
 ヘッダのFrom: 行にセットされます。

送信者のメールアドレス?
[]:shinoda@netandfield.com

 送信者の名前は、-sf オプション使用時に
 ヘッダのFrom: 行に設定される名前です。
 -sf オプションを使用しない場合は、
 この設定内容は使用されません。

送信者の名前?
[]:SHINODA Masanori

POP before SMTPの使用 Yes=1 No=0 ?
[0]:1

POP3サーバのアドレス?(IPを奨励)
[]:202.232.129.110

POP3サーバのポート番号?(通常は110)
[110]:<改行のみ>

POP3サーバのユーザー名?
[]:shinoda

POP3サーバのパスワード?
[]:hogehoge

設定が完了しました。
修正するには -init オプションで起動してください。

何かキーを押すと終了します。


・・・で、設定は終了

sendmail.exe と sendmail.ini(今の設定作業で生成されたもの)を c:\usr\sbin の下へコピー。(UNIX っぽく)

で、c:\usr\sbin にパスを通しておく。
(システムのプロパティの環境変数設定画面から、環境変数 path を編集する)


パスを通したら、試しに「send まね〜る」についてくるテストデータを使って、自分宛にメールしてみる。(コマンドプロンプトより)


Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\Documents and Settings\shinoda>x:

X:\>cd \data\download\archives\pg\sendm

X:\data\download\archives\pg\sendm>type sendtest.txt|C:\usr\sbin\sendmail shinoda@netandfield.com
sendmane.exeでエラーを検出しました。

Error: 550 5.7.1 Unable to relay for shinoda@netandfield.com


ありゃりゃ。エラーが出てもうたがな。
何か、relay 出来ないって言われているので、これは SMTP サービスの設定がちゃんと出来てないからか。外部への relay はディフォルトで止められているのかな?
踏み台防止のために当たり前のことだけど、Windows でそういう考慮がちゃんとされているとちょっと感動じゃのお。ただし、Local User からの外部への relay は許しておくべきじゃろう。どうも、最後の詰めが甘いのお、Microsoft 。

つーことで、sendmail.ini を修正して、外部の(POP before SMTP 対応の)サーバを使うことにする。

[SMTP]
Host=127.0.0.1

 ↓
Host=182.212.212.15(例えば、プロバイダのメールサーバ)

とする。で、試しに送ってみる。

X:\data\download\archives\pg\sendm>type sendtest.txt|C:\usr\sbin\sendmail shinoda@netandfield.com

X:\data\download\archives\pg\sendm>

よし、今度はエラーが出ずに終了したぞ!!
↓メールもちゃんと届いていた。

From: Sendまね〜る <web-master@hypweb.net>
Subject: Sendまね〜るの送信テストです。
Date: Wed, 20 Oct 2004 19:42:12 +0900

このメールが届けば、Sendまね〜るは正常にセットアップされています。
CGIから利用して、メール送信が正しく処理されない場合は、CGI側の sendmail設定 をご確認ください。

○本ソフトウェアのサポート方法は、現在は次のようになっています。
・感想やバグ報告などは、Webページに設置した
 「sendまね〜る 要望・バグレポート」で受け付けています。
 メールでのお問い合わせはご遠慮ください。
・ホームページURL: http://hypweb.net/
・フォーラム Sendまね〜る:
  http://hypweb.net/xoops/modules/newbb/viewforum.php?forum=1
 
以上。


じゃ、今度は、CGI の中からうまく呼び出せるかやってみる。

#!/usr/bin/perl
#
# mail_test.cgi - メールを送信して、結果を表示するだけの CGI
#

$Sendmail  = '/usr/sbin/sendmail';

$Mail      =<<END_DATA;
To: shinoda\@netandfield.com
From: root\@netandfield.com
Subject: Mail Test

どうですか?
ちゃんと届きましたか?
END_DATA

print "Content-type: text/html\n\n";

if (!open(MAIL,"|$Sendmail shinoda\@netandfield.com")) {
    print "<html><body><h1>SYSTEM ERROR</h1></body></html>\n";
    exit();
}

print MAIL $Mail;
close(MAIL);

print "<html><body><h1>OK!!!</h1></body></html>\n";

exit();


こういう CGI を、FreeBSD 機で実行すると、無事メールが発信される。
↓ちゃんとメールが届く。

Return-Path: <anonymous@serv2.netandfield.com>
Delivered-To: shinoda@netandfield.com
Received: (qmail 73474 invoked by uid 80); 20 Oct 2004 20:07:19 +0900
Date: 20 Oct 2004 20:07:19 +0900
Message-ID: <20041020110719.73473.qmail@serv2.netandfield.com>
To: shinoda@netandfield.com
From: root@netandfield.com
Subject: Mail Test

どうですか?
ちゃんと届きましたか?


この CGI をそのまま Windows 2000 Server + Apache2 な環境に持ち込むと、Internal Server Error が発生してまともに動かない。
どうしても、ファイルのパス関係は直してやる必要があるのだ。

ということで、

#!/usr/bin/perl
  ↓
#!c:/usr/local/bin/perl

$Sendmail = '/usr/sbin/sendmail';
  ↓
$Sendmail = 'c:/usr/sbin/sendmail.exe';

と直して実行してみる。

すると、無事 CGI は実行され、

Return-Path: <shinoda@netandfield.com>
Delivered-To: shinoda@netandfield.com
Received: (qmail 73534 invoked by alias); 20 Oct 2004 20:15:26 +0900
Received: from unknown (HELO 182.212.212.15) (250.128.192.223)
  by serv2.netandfield.com with SMTP; 20 Oct 2004 20:15:26 +0900
To: shinoda@netandfield.com
From: root@netandfield.com
Subject: Mail Test
Date: Wed, 20 Oct 2004 20:15:26 +0900

どうですか?
ちゃんと届きましたか?


というメールも届いた。

ということで、「send まね〜る」を使えば UNIX 系サーバから持ってきた sendmail を使用する CGI を、ファイルのパスを書き換えるだけで Windows サーバ上で使用出来るということだ。(もちろん、ファイルパス以外も修正しないといけないケースがあるだろうが、少なくとも sendmail の部分はそのまま(実行体のパスを正しく設定するだけで)使えそうということ。)


前ページに戻る


Copyright (C) 2004 S.Maaasamasa.