よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

May 05, 2005 [おもひで]

[Hiki] sendmailプラグイン

Ruby-GNOME2 Project WebsiteのHikiでは、更新がかかった際にruby-gnome2-cvs@lists.sourceforge.jpにメールを投げるようになっているんだけど、2005/4/4を境にぷっつりとメールが投げられなくなったことに今更気づいた。

今まではHiki標準の機能(net/smtpでのメール送信)が使えていたんだけど、その際はsourceforge.jpをSMTPサーバとして使っていた。どうもこのsourceforge.jpが現在ではSMTPサーバとして使えなくなったような感じだ。まぁ、今までの使い方が若干Relayっぽい使い方なような気もしなくもないので、セキュリティの絡みかなぁ、と思ったり。

SF.jpのバグトラッカーや要望を読んでみると、sendmailコマンド自体は使えるようになってるらしかったので以下のようなプラグインを作ってみたら無事動作した。SF.jpにホスティングしてる人で同様の悩みがある人がいたら使ってみて。

def sendmail(subject, body)
  require 'time'
  message = <<EndOfMail
From: #{@conf.mail_from ? @conf.mail_from : @conf.mail}
To: #{@conf.mail.untaint}
Subject: #{subject.to_jis}
Date: #{Time.now.rfc2822}
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
X-Mailer: Hiki #{HIKI_VERSION}
 
#{body.to_jis}
EndOfMail
 
  open( "|/usr/sbin/sendmail #{@conf.mail}", 'w' ) do |o|
     o.write(message)
  end
end

汎用的にするには/usr/sbin/sendmailを外出しにした方が良いね。

それから、このプラグインはhiki/hiki/util.rbのsendmail()メソッドを上書きしてるのだけど、元のsendmail()メソッドは微妙に文字列をuntaintしたりしてなかったりしてて、そのルールがよく分からなかったのと面倒くさかったのでこちらは全部untaintしなかった。

もしかしたらそっち系でエラー出る(というか何も起きない)かもしれないので、その場合は文字列(特に@conf.foobar)をuntaintしてみると良いかもしれない。


編集