さくらレンサバに入れたTracから通知メールが飛ばせない2008年04月03日 16時05分58秒

前々から使っているさくらレンタルサーバ上に、最近 Trac を入れて使おうとしているのですが、メール通知の設定をしても、通知メールがうまいこと飛んでこなくて困っています。

trac.ini の [notification] ディレクティブの設定内容は以下の通り (ドメイン名、メールアドレスは便宜上変えてあります)。

[notification]
always_notify_owner = true
always_notify_reporter = true
always_notify_updater = true
mime_encoding = base64
smtp_always_bcc =
#smtp_always_cc = example@example.sakura.ne.jp
smtp_default_domain =
smtp_enabled = true
smtp_from = example@example.sakura.ne.jp
smtp_password =
smtp_port = 587
smtp_replyto = example@example.sakura.ne.jp
smtp_server = example.sakura.ne.jp
smtp_subject_prefix = __default__
smtp_user =
use_public_cc = false
use_short_addr = false
use_tls = false

smtp_always_cc のコメントアウトをはずすと、そこで指定したメールアドレスがレンタルサーバー上に設定されたアドレスであれば、そのアドレスにだけはメールが届きます。

smtp_always_cc をコメントアウトしたままの場合、以下のような動作になるようです。

  • Ticket の報告者がレンタルサーバー上に設定されたメールアドレスを設定している場合、通知メールは問題なく配信される。

  • Ticket の報告者がレンタルサーバー外の (例えば ISP などが提供する) メールアドレスを設定している場合、通知メールは届かない。そして、log/trac.log には以下のようなエラーログが出力される。

    2008-04-03 16:13:26,873 Trac[web_ui] ERROR: Failure sending notification on change to ticket #3: {u'murachi@example.ne.jp': (553, '5.3.0 <murachi@example.ne.jp>... Please receive your mail before sending')}
    Traceback (most recent call last):
      File "/home/example/local/lib/python2.4/site-packages/trac/ticket/web_ui.py", line 562, in _do_save
        tn.notify(ticket, newticket=False, modtime=now)
      File "/home/example/local/lib/python2.4/site-packages/trac/ticket/notification.py", line 129, in notify
        NotifyEmail.notify(self, ticket.id, subject)
      File "/home/example/local/lib/python2.4/site-packages/trac/notification.py",line 216, in notify
        Notify.notify(self, resid)
      File "/home/example/local/lib/python2.4/site-packages/trac/notification.py",line 115, in notify
        self.send(torcpts, ccrcpts)
      File "/home/example/local/lib/python2.4/site-packages/trac/ticket/notification.py", line 275, in send
        NotifyEmail.send(self, torcpts, ccrcpts, hdrs)
      File "/home/example/local/lib/python2.4/site-packages/trac/notification.py",line 368, in send
        self.server.sendmail(msg['From'], recipients, msgtext)
      File "/usr/local/lib/python2.4/smtplib.py", line 691, in sendmail
        raise SMTPRecipientsRefused(senderrs)
    SMTPRecipientsRefused: {u'murachi@example.ne.jp': (553, '5.3.0 <murachi@example.ne.jp>... Please receive your mail before sending')}
    

別に通知機能自体は今すぐ必要なわけではないんですが、何でこうなっちゃうのかだけは一応知っておきたいので、とりあえずメモってみます。。。

そもそもさくらのレンサバの sendmail がそういうものなのかなぁ。。。あ、ちなみに smtp_port が 587 になってますが、25 のままでももちろんダメでした。


Thu Apr 3 21:30:39 JST 2008 - 追記

とりあえず調べてみたらエラーの内容はなんとなくわかってきた。

  • SMTPRecipientsRefused は、 Python のモジュール smtplib が送出する例外で、すべての受取人が (sendmail コマンドによって) 弾かれた場合にのみ発生するらしい。
  • ログの最終行の 553 という数字は、 sendmail コマンドが返すエラーコードで、不正中継っぽいもの (spam の踏み台である可能性があるケース) を弾いたときのものっぽいです。

さくらのレンサバの sendmail コマンドのポリシーがどうなってるのかがいまいちよくわからんのですが、その辺の設定が仮に変えられるのだとして、その為に spam の踏み台になるリスクが生まれるんだとするとそれはさすがにまずいので、この辺は良く調べてから対応したほうがよさそう。そもそも回避できないのかもしれないけど。。。

当面は通知なしで運用しようかな。(←ひよったw)

ついに ActivePerl も2008年04月03日 22時20分16秒

5.10.0 の配布が始まってしまった。。。

さくらのレンサバでの採用も秒読み段階だろうか? 個人的に動かしてる自作 CGI が pseudo hash 使っちゃってるもんだから、気が気でしょうがないのよね ((((/;^^)/

とりあえず後で落として動かしてみますか。。。

Gentoo Linux の方はどうなってるんだろ? そっちも確認してみないとなぁ。。。