前々から使っているさくらレンタルサーバ上に、最近 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 のままでももちろんダメでした。
とりあえず調べてみたらエラーの内容はなんとなくわかってきた。
SMTPRecipientsRefused
は、 Python のモジュール smtplib
が送出する例外で、すべての受取人が (sendmail コマンドによって) 弾かれた場合にのみ発生するらしい。553
という数字は、 sendmail コマンドが返すエラーコードで、不正中継っぽいもの (spam の踏み台である可能性があるケース) を弾いたときのものっぽいです。さくらのレンサバの sendmail コマンドのポリシーがどうなってるのかがいまいちよくわからんのですが、その辺の設定が仮に変えられるのだとして、その為に spam の踏み台になるリスクが生まれるんだとするとそれはさすがにまずいので、この辺は良く調べてから対応したほうがよさそう。そもそも回避できないのかもしれないけど。。。
当面は通知なしで運用しようかな。(←ひよったw)
セコメントをする