@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
という
のもあるようです。