web-dev-qa-db-ja.com

リモートホストに到達できないときにsendmailがメールを失うのを防ぐ方法

複数のホストを持つ小さなドメインがあります。 Sendmailは、ローカルで生成されたすべてのメール(ほとんどの場合、cronジョブによって生成されたroot@localhostへのメール)を中央の「メールハブ」に転送するように設定されています。

define(`MAIL_HUB', `somehost.mydomain.org')

sendmail.mcで。最近、リモートエンドのメールサーバーに問題が発生したため、このホストからのメールを受け付けません。これにより、sendmailはすべてのメールをドロップしました。 /var/log/maillogから:

sendmail[3133]: n4461S5s003133: n4461S5t003133: return to sender: Service unavailable
sendmail[3133]: n4461S5t003133: to=root, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=34772, relay=XXXXX.org.  [91.184.38.153], dsn=5.0.0, stat=Service unavailable
sendmail[3133]: n4461S5s003133: Losing ./qfn4461S5s003133: savemail panic

この間に生成されたすべてのメールは破棄され、永久に失われました。

どうすればこれを防ぐことができますか?理想的には、sendmailでレイターを再試行するか、最後の手段としてメールをローカルファイルに保存することをお勧めします。

1
8jean

あなたのサーバーはここでほとんど「正しい」ことをしました。

遠端は「5xx」クラスのエラーメッセージを返しました。これは、メッセージの配信が永続的に失敗したことを示しているため、送信が完全に中止されました。

サーバーがメッセージをキューに入れ続けるには、一時的な障害を示す「4xx」クラスのメッセージを受信して​​いる必要があります。

ただし、メッセージが永久に失われるのを防ぐには、「savemailpanic」エラーの原因を特定する必要があります。メッセージは送信者に返送されているはずです。

2
Alnitak

通常、sendmailは、失敗した送信試行をローカルでスプールファイルに保存し、最大5日間再試行する必要があるため、構成エラーが発生している可能性があります。これらの参考文献によると:

あなたはあなたが持っていないことを確認する必要があります(上記の参照から):

  • /etc/aliasesにポストマスターエイリアスがありません
  • ハードディスクがいっぱいです
  • ポストマスターのメールスプールの所有権が間違っています
  • ポストマスターのmboxファイルが2GBを超えており、procmailが電子メールを配信できません

さらに、selinuxの問題が発生していないことを確認してください。 selinuxsendmailによるファイルの保存を妨げている可能性があります。電子メールが完全に失われることはありません。最悪の場合、元の送信者とポストマスターに返送される必要があります。 Eメールが完全に失われた場合は、構成エラーまたはsendmailのバグのいずれかです。

このエラーの意味するところは、コンテキストでは、sendmailがスプールファイル./qfn4461S5s003133でメッセージを配信しようとしたが、リモートメールサーバーが「サービスを利用できません」というエラー応答を返したことです。したがって、ローカルのsendmailはEメールをバウンスしようとしました。これを行おうとしたときに問題が発生したため、Eメールは破棄されました。

これは、CPUの2階建てバス障害に相当する電子メールです。つまり、致命的なエラー(sendmailが再試行を断念するのに十分な時間リモートサーバーが使用できない)に応答して発生する致命的なエラー(Eメールメッセージを保存またはバウンスできない)。

2
Eddie