NT(IIS)でCmail.exeを使ってwwwmailを起動するとNTにタスクが残りメールが送信できません。

[上に] [前に] [次に]
松下 2000/01/19(水) 11:49:14
実現したいこと
質問コーナー(掲示板)を作成し、情報が更新されたら、回答担当者にメールを送信する。
メールの内容は問いません(「更新されたよ」という定形テキストでもかまいません)

質問内容
NT(IIS)でCmail.exeを使ってwwwmailを起動するとNTにタスクが残りメールが送信できません。
実際には、cmd.exeとCmail.exeのプロセスが発生しているようです。
なお、タスクマネージャーではプロセスを終了させることもできませんでした。
メッセージ「アクセスが拒否されました」

NTからコマンドプロンプトでCmail.exeを使ってメールの送信はできています。
下記は、動作したコマンド
Dir c:\ | e:\bin\cmail.exe 宛先アドレス -s 'TestMail'

環境
WindowsNT Server4.0(SP5)(部門用Webサーバ)
IISはWebとftpサーバとして運用しています。(CGIは動作しています)

../199911/99110371.htm
を見て、設定したのですが、メールが送信できません。
自己診断用のwwwmail.cgi?testではエラーが出ていません。

----------------設定ファイル-------------------
#!/usr/local/bin/perl
# ★ 送信先メールアドレス
$mailto = '実際はメールアドレスを記入してあります';

# ★ サブジェクト(件名)
$subject = 'TestMail';

# ★ メール送信コマンド
$sendmail = 'e:\bin\cmail.exe';

if (-x $sendmail) {
unless (open(OUT,  "| $sendmail $mailto -s $subject > NUL")) {
---------------ここまで---------------------------

sendmailは、購入できません。
http://www.ant.co.jp/products/sm26_index.html

Mail Address申請中 2000/01/26(水) 11:54:17
便乗質問で申し訳有りませんが、私も同じ現象が出ています。

ただし、httpdというソフトを使うと正常に動作するのですが、
IIS上で動作させると、Mailが送れずタスクが残ってしまいます。
因みに、BLATJ及び、CMAIL共に使用してみましたが同じような現象
が出ています。
(BLATJはSubject無しで送っています。)

過去ログには目を通したのですがわかりません。

解決する手段が有りましたらご教授下さい。
よろしくお願いします。

無責任官庁 2000/01/26(水) 14:04:32
私のところではなんてことはなく動作しているので、
いまいち分からないですけど…
ちなみに環境は、NT4+IIS4+ActivePerl522+cmail.exe です。

CGIでは以下のようにしてます。

$mailprogram = "フルパスでcmail.exe指定";
$mailaddress = '送信先';
$mailsubj = "件名";
$kanrisyaddress = '送信者アドレス(管理者)';
$mailtext = "本文";

if(-e $mailprogram){
open (MAIL,"| $mailprogram $mailaddress -s $mailsubj -a $kanrisyaddress > NUL") ||
die "$mailprogramオープンエラー";
print MAIL "$mailtext\n";
close MAIL;
}

で、cmail.cfgの設定は、以下の二つのみ。
-l NUL
-S SMTPサーバのアドレス

ちょっと書き方が違うだけかな。(オリジナルだから当然か…)
if(-x ...) が使えないかもってのは、未確認。(思いつき)
あと、CGIのカレントディレクトリがすっ飛ぶんで、
CGIの頭にでも、chdir("e:/wwwroot/cgi-bin");
ってな感じでCGIディレクトリにカレントの移動をするのは必須。
(これはrequireより前に無いと意味ない)
ついでに、IISの設定で、「アプリケーションの拡張子マッピング」の所で、
“ファイルの存在を確認する”にチェックしておくと、ひょっとしたらエラーが
出てくれるかも…(アクセス権のチェックもしてくれるし)

予想では、cmailが黙り込むのは標準入力を待っている状態だと思うので、
必要な引数・データはすべて渡してあげて、その後cmailとの接続を切れば、
帰ってくると思います。
本文が無いと、「本文を入力してください」が内部で出てて、固まります。

hiro-kim 2000/01/26(水) 15:18:42
NT4(SP5) + IIS4 + ActivePerl517 + BlatJ 1.8.2 J1.1
でちょちょっと試してみました。動いています。

上記のとおり,if (-x $sendmail) が使えないのでコメントアウトしました。
chdir("e:/wwwroot/cgi-bin") はしていません。

BlatJの場合,version一覧 http://www.piedey.co.jp/softs/blat.html
>1999年3月4日 1.7+J1.2 (x86)
>「標準入力からデータを読ませると落ちる」という症状の原因を調査した結果、
>MSVCRT.DLLを呼び出すと落ちるということが分かり、これを呼ばないように変更した。
とあります。一応,紹介しておきます。

松下 2000/01/26(水) 18:29:52
松下です。

お教えいただいた通り、
下記の項目を2行目以降に「追記」しました。
パールのバージョンは5.0.9.0です。
Cmailは2.07です。
wwwmail.cgiは3.00です。

chdir("c:/perl/bin");
$mailprogram = "e:/bin/cmail.exe";
$mailaddress = 'y-matsushita@sorryhide';
$mailsubj = "送信テスト";
$kanrisyaddress = 'y-matsushita@sorryhide1';
$mailtext = "テスト用本文";

とし、現在のメール送信のところをコメントアウトし、

if(-e $mailprogram){
open (MAIL,"| $mailprogram $mailaddress -s $mailsubj -a $kanrisyaddress > NUL") ||
die "$mailprogramオープンエラー";
print MAIL "$mailtext\n";
close MAIL;
}

をそのまま追記いたしました。

なお、「>NUL」を削除したところ、
エラーメールが返ってきました。

=======================
The original message was received at Wed, 26 Jan 2000 18:12:21 +0900
from [192.168.25.253] (may be forged)

   ----- The following addresses had permanent fatal errors -----
<:>

   ----- Transcript of session follows -----
sorryhide Lost input channel from [192.168.25.253] (may be forged)
<<< RCPT TO:<:>
550 <:>... User unknown
421 sorryhide Lost input channel from [192.168.25.253] (may be forged)

Reporting-MTA: dns; sorryhide
Received-From-MTA: DNS; [192.168.25.253]
Arrival-Date: Wed, 26 Jan 2000 18:12:21 +0900

Final-Recipient: RFC822; :@sorryhide
Action: failed
Status: 5.1.1
Last-Attempt-Date: Wed, 26 Jan 2000 18:12:21 +0900

=======メールの終わり=======================

よろしくお願いいたします。

松下%やっと解決 2000/02/01(火) 17:54:43
[[解決]]
教えていただいたソースの最後のところを
「>NUL」を 「-n」 に変更したところ自分宛てにメールが届きました。
変更したところは
 open (MAIL,"| $mailprogram $mailaddress -s $mailsubj -a $kanrisyaddress -n") ||
です。
ちょっと変な感じで管理者には届きませんでしたが、
$mailaddressを変更すれば、何とかなりそうな気がしてきました。
どうもありがとうございました。

[上に] [前に] [次に]