sendmail のかわりに mail を使用するには?

[上に] [前に] [次に]
IMO [E-Mail] 1998/04/08(水) 14:04:14
 サーバに、sendmail へのパスを聞いたところ、
次のような答えが返ってきました。

>sendmail を直接操作することはシステム上問題が多いので mail コマンド
>をご利用になって下さい。mail のパスは whereis コマンドで検索出来ます。

 このような場合、どのような設定をすれば、
フォームからメールが届くようになるのですか?
ちなみに、今設置しようとしているスクリプトは、
掲示板で、新規書き込みがあったときに私のところへ、
メールが届くようにするものです。

 このあたりのスクリプトをどう変えればよいか、教えて下さい。

B-Cus 1998/04/08(水) 17:24:34
/usr/sbin/sendmailなどとなっているところを、
/bin/mailか/usr/bin/mailに直すだけでいけると思います。

IMO 1998/04/09(木) 16:05:49
 こちらの方も無事にメールが届いております。

 が、文字化けてるんです。jpde.pl のパーミッションも775になってるし、
恐らく PATH も通ってるはずなのですが、なぜなのでしょう?

 初めの質問の趣旨とは変わってきてしまいましたが、分かる方はお願いいたします。

B-Cus 1998/04/09(木) 16:12:20
どんな風に化けてますか?アルファベットだけですか?
open(OUT,"|/usr/local/bin/nkf -j|/bin/mail");
としたらどうなりますか?
あと、一応 nkf -e とnkf -sも試してみてください。

IMO 1998/04/09(木) 16:31:41
 まず、文字の化け方なんですが、アルファベットではなく、難しい漢字やよく分からない
記号混じりです。恐らく漢字コードに起因しているものと思われます。

 それと、B-Cus さんが書いて下さったスクリプトなんですが、cgi ファイル全て調べてみても、
open(OUT 〜 で始まるところはありませんでした。
 もしかしたら、この1文を書き加えろ、ということなんですか?
もしそうなら、どこに書き加えればよいのでしょうか?

IMO 1998/04/09(木) 16:35:27
 すいません、先ほど書き忘れました。今私が使っているスクリプトなんですが、
オリジナルは、「浜ちゃん〜」というホームページありまして、

http://www.c-5.ne.jp/~hamachan/cgihtm/gb50.txt

 にオリジナルのものがあります。もしよろしかったら、これも参照にしていただくと幸いです。

B-Cus 1998/04/09(木) 16:54:43
$mailprog = "/usr/local/bin/nkf -j | /bin/mail";
としてみてください。

こういうときは$mailprogをキーワードとして検索すれば
sub mailOptionにopne(OUT,"|$mailprog");的な記述が
見つけられます。

あと、、、/bin/mailが8ビットスルーじゃないって可能性は
、、、ないか。もし心配なら適当に漢字を含んだ文を書いて
(たとえばファイル名はsample)、コマンドラインから
% mail imoさんのメールアドレス < sample
などとやってみてください。さらにnkfも通してみてください。
たとえば
% cat sample | mail foo@bar.com
とか
% cat sample | nkf -j | mail foo@bar.com
とかね。

IMO 1998/04/09(木) 18:02:48
 $mailprog を B-Cus さんのおっしゃる通り書き換えてやってみたところ、
今度は、メール自体が届かなくなってしまいました。

 また、コマンドラインから試してみたところ、1、2番のコマンドはうまくいったのですが、
3番目のものは、

>$ cat sample | nkf -j | mail imo@mail.at-m.or.jp
>nkf: not found
>No message !?!

と表示され、メールも届いていませんでした。

 私は素人なので、よく分かりませんが、ここら辺がカギなのでしょうか?


IMO 1998/04/09(木) 18:05:50
 すいません、また書き忘れました。

 mail への PATH なんですが、whereis で調べたところ、

>/etc/mail /usr/bin/mail /usr/ucb/mail /usr/lib/mail.local /usr/man/man1/mail.1';

 と出て来ました。

この中でどれを  PATH として採用すればよいかも教えて下さい。

B-Cus 1998/04/09(木) 19:12:36
あー、じゃあnkfがないのかな。ls /usr/local/bin/nkf
として、nkfがなかったら管理者にnkfはどこにありますか
と質問してみてください。

find / -name nkf | grep nkf でもいいですけど、
ちょっと負荷がかかります。

/etc/mailって、ほんとに/etc/mailがありました?
たぶん/bin/mailじゃないかと思うんですが。
まぁ、/bin/mailか/usr/bin/mailで問題はないと
思います。

おそらくnkf通せば直ると思うんだけどなぁ。

B-Cus 1998/04/09(木) 19:26:54
失礼。find / -name nkf |& grep nkf でした。

IMO 1998/04/09(木) 20:23:00
 B-Cus さんのおっしゃったことを試してみたところ、ls 〜 の方では、
not found と表示され、find 〜 の方では、find: cannot chdir to ............ : Permission denied
と表示されました。管理者の方にもメールを書いたのですが、
nkf はもしかしたらないのかもしれません。

 もし、nkf がなかったら、どのように設定すればよいのでしょうか?
jcode.pl というのはこのようなメール送信には関係ないのでしょうか?
んー、難しいですね、本当に。

IMO 1998/04/09(木) 20:26:48
 あっ、そうそう、やっぱり、/etc/mail ありましたよ。それで、/bin/mail はありませんでした。
これだったら、とりあえず、/usr/bin/mail を使えばいいんですね。
今まで /usr/ucb/mail と書いていたような気もするので、チェックしてみます。

飯塚 1998/04/10(金) 02:03:36
以下の戦法はいかがでしょうか(全部同時にやってください)?
「メールが送れるけど化ける」スクリプトに対して、

(1) $mailprog = "/etc/mail";
   とする。
(2) require './jcode.pl';
   とあるところを
   require 'jcode.pl';
   にする。

なお、このスクリプトは「メールをShift JISで送る」という
言語道断のことをしているようです。

B-Cus 1998/04/10(金) 02:13:47
mailOptionをそっくり以下のものと差し替えたらどうなりますか?

sub mailOption {
local($from) = @_;
local($buf) = "";
open (MAIL, "|$mailprog $mail_ad") || &errExit('メールが送れません','');
$buf = "Subject: $guest Board\n\n";
&jcode'convert(*buf,'jis'); print MAIL $buf;
$buf .= "$resp への返信\n\n" if $resp;
&jcode'convert(*buf,'jis'); print MAIL $buf;
$buf = "$from \n\n$mtitle\n$comments\n";
&jcode'convert(*buf,'jis'); print MAIL $buf;
$buf = "$longdate\n";
&jcode'convert(*buf,'jis'); print MAIL $buf;
$buf = "$hst_name\n";
&jcode'convert(*buf,'jis'); print MAIL $buf;
$buf = "$agent\n";
&jcode'convert(*buf,'jis'); print MAIL $buf;
$buf = "$email\n";
&jcode'convert(*buf,'jis'); print MAIL $buf;
$buf = "$url\n";
&jcode'convert(*buf,'jis'); print MAIL $buf;
close (MAIL);
}

これでダメなら…「への返信」を削ってみてください。
これでもダメなら…この部分のprintを、半分ずつ
コメントアウトしてみてください。上半分をコメント
アウトして化けなかったら下半分が原因だし、化けなかったら
そのまた上半分をコメントアウトしていけば、原因の行が
つかめるはずです。

一番いいのはnkfを自分でインストールすることなんですが、
トラブったときはめんどくさいからなぁ…。

B-Cus 1998/04/10(金) 02:49:01
全然関係ない話ですが、ひとりごと。

> あっ、そうそう、やっぱり、/etc/mail ありましたよ。

一言でUNIXといっても管理者によって千差万別ですな。
# まさかデフォルトで/etc/mailがあるUN*Xはないですよねぇ。

IMO 1998/04/10(金) 10:14:07
[[解決]]
 飯塚さんと B-Cus さんのおっしゃったように、スクリプトを変えてみたところ、
飯塚さんの方では、メールが届かなかったのですが、B-Cus さんのスクリプトで、
無事、文字化けはなくなりました。どうもありがとうございました。

 それと、なぜか mail コマンドは、/usr/ucb/mail じゃないと、メールが届かないようです。
これも、私にはよく分かりませんが。

 でも、これで無事に掲示板が設置できます。どうもありがとうございました。

P.S.みなさん、何でそんなに詳しいのでしょう。うらやましいかぎりです。


B-Cus 1998/04/10(金) 19:43:22
対処療法しか書いてなかったので、なにをしていたのか
軽く説明しておきますと、、、

日本語コードにはJISとEUCとSJISがあります。
で、メールはJISで送らなければなりません。
で、nkf -j というのはJISコードに変換する
ためのコマンドですので、mailに送る前にnkfに
変換させたかったのです。

でもnkfがないようなので、perlの中でjcode.plの
&jcode'convertを使ってJISに変換してからmailに
出力したわけです。

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