Hail2u.net

メールでwritebackへの投稿を受信

そういや付けました。結構前に。writeback notifyというプラグインがあったんですけど、配布サイト消えてたり。なので、sendmailで適当に組んでみました。writeback最後の方に以下を追加。

sub notify {
  my $body = $_[0];

  if (open(MAIL, "| /usr/lib/sendmail -t")) {
    print MAIL <<"_MAIL_";
From:writeback\@blosxom.com
To:kyo\@hail2u.net
Subject:hail2u.net - Weblog - Comment/TrackBack
Content-Type:text/plain
X-Mailer:blosxom writeback plugin

$body
_MAIL_
    close(MAIL);
  }
}

これは、引数に渡された文字列をsendmailで送るサブルーチンです。さらに、128行目あたりのパラメータからファイルに書き込むところを、

foreach (@fields) {
  my $p = param($_);
  $p =~ s/\x0D\x0A|\x0D|\x0A/\t/gm;
  $p =~ s/^\t*(.*?)\t*$/$1/gm;
  $p =~ s/<.*?>//gm;
  $p =~ s/&/&amp;/gm;
  $p =~ s/</&lt;/gm;
  $p =~ s/>/&gt;/gm;
  $p =~ s/"/&quot;/gm;

  if ($_ eq 'comment' || $_ eq 'excerpt') {
    $p =~ s/(ftp:\/\/[!-~]+\.[!-~]+)/<a href="$1" title="$1">&#187; ftp<\/a>/g;
    $p =~ s/(h?ttp:\/\/[!-~]+\.[!-~]+)/<a href="$1" title="$1">&#187; http<\/a>/g;
    $p =~ s/(h?ttps:\/\/[!-~]+\.[!-~]+)/<a href="$1" title="$1">&#187; https<\/a>/g;
    $p =~ s/(^|[^\x81-\x9f])([!-~]+\@[!-~]+\.[!-~]+)/$1<a href="mailto:$2" title="$2">&#187; mailto<\/a>/g;
  }

  $p =~ s/\t/<br \/>/g;
  $temp .= "$_:$p\n";
}
$temp .= "-----\n";
print $fh $temp;
$fh->close();
$temp = "$blosxom::url$path/$fn.html\n-----\n$temp"; # *1
&notify($temp);

こんな風に書き換えます。タグ削除とか自動リンクとかそんなものも追加されてますが、根幹は元々各パラメータの値を順に書き加えているのを、一旦$tempに追加していく様にして、最後に書き込みしてます。その上で、$tempの先頭(後尾でも良いのですけど)ににそのエントリのParmanent linkを付け加え(*1のところ)、notifyサブルーチンに渡してます。

わかりにく。