sendmailを使うためのミニマム?サブルーチン

 CGI(Perl)でmailを生成することを調べているうちに、シンプルに宛先のアドレスと件名と内容のみを引数として受けてmailを送信してくれるサブルーチンが欲しいと思うようになりちょっと作ってみましたのでメモとしてUPします。例えば、このサブルーチン(または、ライブラリ)を掲示板などのCGIに組み込んでおくと、掲示板に書き込みが有ったことをメールで確認できるので便利になるかな、と思います。

 尚、このサブルーチンを作成するに当たって、The Room様で配布していらっしゃる、MailFormを参考にさせていただきました。カスタマイズし易く綺麗なメールフォームCGIですので、メールフォームをお探しの方にお勧めです。

 ここにあるコードは、私の環境ではコピー&ペーストして、ピンクに塗ってある部分を設定すれば動く状態ですが、環境によっては動かない可能性もあります。

サブルーチン本体

sendmailのパスをサーバーによって設定します。
sub send{
    # メールを送信するためのサブルーチンです。
    #
    # 戻り値=&send(送り先アドレス,件名,文書,リターンアドレス);
    #
    # 戻り値は、sendmailが使えずエラーとなった場合は'error…'
    # 無事送信できたと認識している場合は'success!'
    # の部分を適当に書き換えて使用してください。
    #
    # 尚、このサブルーチンを作成するに当たって、
    # URL:http://dream.lib.net/room/様の“mail.cgi”と
    # URL:http://oshiete1.goo.ne.jp/qa2849083.htmlを参考にさせていただきました。

#*********************************************************
#sendmail のパス(要変更)
    $sendmail = '/usr/lib/sendmail';
#*********************************************************

local $ret_dat;
#-----------------------------------------------
local $send_dat=<<"HIA";
To: $_[0]
From: $_[3]
Subject: $_[1]
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=ISO-2022-JP
X-Mailer: Mail Form by The Room\n\n$_[2]\n
HIA
#-----------------------------------------------
    &jcode::convert(\$send_dat,'jis');

    open(MAIL,"|" . "$sendmail -t ") || die return 'error…';
    print MAIL $send_dat;
    close (MAIL);
    sleep(1);
    return 'success!';
}

sendmail_test.cgi(取り急ぎ上記サブルーチンをチェックするためのCGI)

jcode.plを別途準備する必要があります。
#!/usr/bin/perl

# jcode.plを組み込む必要があります。PATHは、設置の環境により指定します。
    require '../lib/jcode.pl';
#-----------------------------------------------
#   ↓サブルーチンを呼んでみる
#   xxxxxxx@xxxxxxxxx を自分のメールアドレスに置換え。
#   from@form.mail を適当なアドレスに置換えてテストしてみてください。

    $message = &send('xxxxxxx@xxxxxxxxx','実験です','こんな"メール"送信できますか?','from@form.mail');

#   ↓結果表示の部分です。ご自由にアレンジして下さい。
    print "Content-type:text/html; charset=shift_jis\n\n$message";
exit;
#*****************************************************************************
sub send{
    # メールを送信するためのサブルーチンです。
    #
    # 戻り値=&send(送り先アドレス,件名,文書,リターンアドレス);
    #
    # 戻り値は、sendmailが使えずエラーとなった場合は'error…'
    # 無事送信できたと認識している場合は'success!'
    # の部分を適当に書き換えて使用してください。
    #
    # 尚、このサブルーチンを作成するに当たって、
    # URL:http://dream.lib.net/room/様の“mail.cgi”と
    # URL:http://oshiete1.goo.ne.jp/qa2849083.htmlを参考にさせていただきました。

#*********************************************************
#sendmail のパス(要変更)
    $sendmail = '/usr/lib/sendmail';
#*********************************************************

local $ret_dat;
#-----------------------------------------------
local $send_dat=<<"HIA";
To: $_[0]
From: $_[3]
Subject: $_[1]
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=ISO-2022-JP
X-Mailer: Mail Form by The Room\n\n$_[2]\n
HIA
#-----------------------------------------------
    &jcode::convert(\$send_dat,'jis');

    open(MAIL,"|" . "$sendmail -t ") || die return 'error…';
    print MAIL $send_dat;
    close (MAIL);
    sleep(1);
    return 'success!';
}
_END_



mails.pl(更にライブラリ化)

package mails;
sub smailsend {
    # メールを送信するためのサブルーチンです。
    # メインのプログラムでjcode.plを組み込む必要があります。
    #
    # 戻り値=&send(送り先アドレス,件名,本文,リターンアドレス);
    #
    # 戻り値は、sendmailが使えずエラーとなった場合は'error…'
    # 無事送信できたと認識している場合は'success!'
    # の部分を適当に書き換えて使用してください。
    #
    # 尚、このサブルーチンを作成するに当たって、
    # URL:http://dream.lib.net/room/様の“mail.cgi”と
    # URL:http://oshiete1.goo.ne.jp/qa2849083.htmlを参考にさせていただきました。

#*********************************************************
#sendmail のパス(要変更)
    $sendmail = '/usr/lib/sendmail';
#*********************************************************

local $ret_dat;
#-----------------------------------------------
local $send_dat=<<"HIA";
To: $_[0]
From: $_[3]
Subject: $_[1]
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=ISO-2022-JP
X-Mailer: Mail Form by The Room\n\n$_[2]\n
HIA
#-----------------------------------------------
    &jcode::convert(\$send_dat,'jis');
    open(MAIL,"|" . "$sendmail -t ") || die return 'error…';
    print MAIL $send_dat;
    close (MAIL);
    sleep(1);
    return 'success!';
}
1;

libtest.cgi(ライブラリのサブルーチンを呼ぶには)

#!/usr/local/bin/perl

# jcode.plを組み込む必要があります。PATHは、設置の環境により指定します。
    require '../lib/jcode.pl';
# mails.plを組み込む必要があります。PATHは、設置の環境により指定します。
    require '../lib/mails.pl';
    $message=&mails'smailsend('xxxxxxxx@xxxxxxxx','サブジェクト','本文','from@form.mail');

print "Content-type: text/html\n\n$message";
exit();
_END_
2006.01.14
2007.07.02改訂

[HOME][とまて週報TOP]