@pages の時は、自宅の Linux の cron にベタベタなシェルスクリプトを
仕掛けていました。
→1 時間に 1 回、lftp でコメントのログファイルを取りに行く。前回と
diff があり、スパムでないコメントが含まれていたら、ローカルのメール
サーバから私宛にメール送信。

さくらインターネットになって、CGI からメールを送れるようになったの
で、コメントが投稿されたら私宛にメール送信するようにしました。

送信に使ったのは、Perl の MIME::Lite モジュールです。MIME::Lite は、
送信方法を sendmail と SMTP から選べたり、ファイル添付もできる便利
なモジュールです。今回は sendmail を使いました。

今回もオリジナル(kuttukibbs-1.0rc3.tar.gz)の kuttukibbs.conf と
kuttukibbs.cgi へのパッチを貼り付けておきますね。

--- orig/kuttukibbs-1.0rc3/kuttukibbs.conf	2004-04-08 22:27:02.000000000 +0900
+++ kuttukibbs-1.0rc3/kuttukibbs.conf	2009-05-23 14:19:29.000000000 +0900
@@ -33,6 +33,14 @@
 $charset = "EUC-JP";

 # --------------------------------------------------------------------
+# CGI の場所を http で記載。
+$CommentUrl = 'http://example.com/kuttukibbs/kuttukibbs.cgi';
+
+# --------------------------------------------------------------------
+# 記事が投稿されたら、このアドレスにメールする。
+$NotifyEmail = '[email protected]';
+
+# --------------------------------------------------------------------
 # デフォルトページ (全コメント見る・コメント投稿) のテンプレート
 $page_template_default = << 'PAGE'
 <html>
--- orig/kuttukibbs-1.0rc3/kuttukibbs.cgi	2004-12-15 23:09:58.000000000 +0900
+++ kuttukibbs-1.0rc3/kuttukibbs.cgi	2009-05-23 14:37:44.000000000 +0900
@@ -17,6 +17,8 @@
 my $page_template_latest;
 my $page_template_edit;
 my $charset = "EUC-JP";		# 文字コード
+my $CommentUrl = 'http://example.com/kuttukibbs/kuttukibbs.cgi';
+my $NotifyEmail = 0;		# 送信したい Email アドレス

 ### グローバル変数
 my $latest_id = -1;		# 最新のコメントの ID
@@ -138,6 +140,12 @@
     }
 }

+### コメントが投稿されたら私宛にメール送信する。
+if (($mode eq "write") && $NotifyEmail) {
+    notify_email($NotifyEmail, $logid, $name,
+		 $mail_or_url, $what_time_is_it_now, $q->remote_host());
+}
+
 ### 表示
 for (my $i = $latest_id; $i >= 0; $i--) {
     next unless defined $com_hash{$i};
@@ -335,3 +343,33 @@
     print $page_html;
     exit;
 }
+
+### メールを送る。
+sub notify_email {
+    my($email, $logid, $name, $mail_or_url, $now, $remote_host) = @_;
+    my $body =<<MAIL;
+New comment arrived to $logid!
+
+  Name:          $name
+  E-mail or URL: $mail_or_url
+  Date:          $now
+  UserAgent:     $ENV{'HTTP_USER_AGENT'}
+  RemoteHost:    $remote_host
+
+$CommentUrl?id=$logid
+MAIL
+    ;
+
+    use Jcode;
+    $body = Jcode->new ($body)->h2z->jis;
+
+    require MIME::Lite;
+    my $msg = MIME::Lite->new(
+	From => $email,
+	To => $email,
+	Subject => "[chalow] New Comment: $logid",
+	Type => "text/plain; charset=iso-2022-jp",
+	Data => $body,
+    );
+    $msg->send();
+}

機能追加にあたって、tb-standalone([2008-09-29-1] ) を大いに参考にさ
せていただきました。ありがとうございます。

私の場合はさらに cm.js の更新も行っています。単に system() で
recent_cm.pl を呼んでいるだけですが…。recent_cm.pl は
masutaka.net の cron でも 1 時間に 1 回、実行させています。

[2007-09-17-3] でも似たようなことをしていますが、こちらは
Net::SMTP を使う方法です。これは MIME::Lite よりも低レベルなモジュー
ルで、MIME::Lite からも呼ばれています。他に、smtp-client.pl という
のもあるようです。