20070802

sendmailのパスに関する考察

大概の人は興味無いと思うんですが、ちょっとスクリプト、つーかsendmailのパスについての話。
当サイトで配布している『さくらメール』というスクリプトがあるんですけどね?これってば初心者でも簡単に設置できるメールフォームスクリプト。どういう事かと言うとperl及びsendmailへのパス設定を不要にして、メールアドレスの設定のみで動作するようにお膳立てされたスクリプトなんスよ。
当然パス類なんてのはサーバーによってまちまちだから、あらゆる環境で使えるモノではないのですが、代表的なレンタルサーバー十数社にちまちま問い合わせしてみたんですよ(ちなみにそん時一緒にJcodeモジュールの使用が可能かどうかも一緒に問い合わせ致しました)

ちなみに問い合わせの結果、全てのサーバーで
 perl → /usr/bin/perl もしくは /usr/local/bin/perl
 sendmail → /usr/sbin/sendmail もしくは /usr/lib/sendmail
この2種類のパスのどちらか(あるいは両方)を採用しているという事が判明いたしました。結局私は多数決の結果perlは『/usr/bin/perl』、sendmailは『/usr/sbin/sendmail』をデフォルトの設定としたんですけど…

さっきメシ食べてるときに唐突にひらめいたんですよ!
perlのパスはどうしようもないけれど、sendmailのパスは2種類とも試してみればより沢山の環境で使用できるようになるんじゃないかい?って事を。
あー、つまりですね、マリー・アントワネット風に言えば、
『/usr/sbin/sendmail』でsendmailを開けなかったら、『/usr/lib/sendmail』で開けば良いじゃない?
って感じ。

つまりですね、大概のスクリプトではメール送信する際に以下のようなルーチンを実行していると思うんです。

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

if (! open(MAIL, "| $sendmailpath -t")) {
    &error('sendmailのオープンに失敗しますた');
}

スカラー変数$sendmailpathで設定したパスが通らなかったらエラー処理、みたいな。
ここでさ!たった一回の失敗にへこたれずにもう一度チャレンジしてみようよ!

$sendmailpath1 = '/usr/sbin/sendmail';
$sendmailpath2 = '/usr/lib/sendmail';

if (! open(MAIL, "| $sendmailpath1 -t")) {
    if (! open(MAIL, "| $sendmailpath2 -t")) {
        &error('sendmailのオープンに失敗しますた');
    }
}

ね?これならどっちのパスのサーバーにも両方対応できちゃうんじゃね?
うわ!やべ!もしかしてアタシ大発見した?(もしかしてひっそりと常識だったり?知らなかったの私だけ?)

追記

さらにコレ以外のパス(あるのか?)にも対応できるように、ユーザーが任意に設定できるスカラー変数を用意しておけば完璧なんじゃね?

$sendmailpath = ''; ←ユーザーさんに入力してもらう

$sendmailpath1 = '/usr/sbin/sendmail';
$sendmailpath2 = '/usr/lib/sendmail';

if (! open(MAIL, "| $sendmailpath1 -t")) {
    if (! open(MAIL, "| $sendmailpath2 -t")) {
        if (! open(MAIL, "| $sendmailpath -t")) {
            &error('sendmailのオープンに失敗しますた');
        }
    }
}

[CLAP]

トラックバック

このエントリーのトラックバックURL:
http://magokorokikaku.com/mt/mt-tb.cgi/68