完全な再インストール後、設定に問題が発生しました:送信者アドレスが間違っていて、一部の受信者(メールサーバー)が拒否しました。
そのため、Postfixキューに大量のメールがスタックしています。
理想的には、キューに入れられたメールで送信者アドレスを直接変更してから、キューをフラッシュするのが最適です。
私は試しました この答え これはまさにこの問題に対処します。しかし、私が持っているバージョン(2.11.0)では、メッセージを簡単に変更できないようです。
たとえば、/var/spool/mqueue
dir、ただし、代わりに/var/spool/postfix/...
active
bounce
corrupt
defer
deferred
dev
etc
flush
hold
incoming
lib
maildrop
pid
private
public
saved
trace
usr
関心のあるディレクトリはdeferred
です。いくつかのファイルを修正して、間違ったドメインを正しいドメインに変更しようとしました(変更されたファイルのみが変更されるように注意しました)。
しかし、その後、それらのメールはcorrupt
に移動されました。つまり、単純なテキスト変更は機能しないようです(vi
で行われます)。
キューに入れられたメールの送信者を変更する他のよりきれいな方法はありますか?
私はこの問題に対処するために this answe rを試しました。しかし、私が持っているバージョン(2.11.0)では、メッセージを簡単に変更できないようです。
たとえば、/ var/spool/mqueue dirはありませんが、代わりに/ var/spool/postfix/...
二つはっきりさせておきたい。
したがって、ここにはいくつかのオプションがあります
この答えは、これに触発されたものです 優れた答え 。古いアドレスを新しいアドレスに自動的に書き換えます。 old-addressをnew-addressにマップするファイルを定義できます。
/etc/postfix/main.cf:
smtp_generic_maps = hash:/etc/postfix/generic
/etc/postfix/generic:
[email protected] [email protected]
postmap /etc/postfix/generic
を実行してpostfix reload
を実行することを忘れないでください
[email protected]
に一致するアドレス。最初のオプションの欠点を克服するには、sender_canonical_maps
を使用できます。 Postfix作者の提案 に基づくこのソリューション。最初のオプションと同じように、古いアドレスを新しいアドレスにマップするファイルを定義できます。
/etc/postfix/main.cf:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
/etc/postfix/sender_canonical:
[email protected] [email protected]
postmap /etc/postfix/sender_canonical
を実行してから、postfix reload
を実行します。 postfixキューのフローのため、コマンドpostsuper -r queueid
を使用して、影響を受けるキューを再キューイングする必要があります
postsuper -r ALL deferred
を使用して、延期されたすべてを再キューイングできます。これは、高度な処理のためにキューを変更する手動の古い方法です。この回答は postfix-usersメーリングリスト からのものです
要するに
キューを抽出
# postsuper -h queueid
# postcat -qbh queueid > tempfile.eml
# vi tempfile.eml
キューを再送信して古いキューを削除する
# sendmail -f $sender $recipient < tempfile.eml
# postsuper -d queueid
上記のコマンドのドキュメントについては、 このページ を参照してください
注:
postfix-users mailing list からの元の解決策、postcat -q queueid >tempfile
を使用してキューを抽出します。このコマンドは、キューのヘッダー、本文、メタ情報を抽出します。 以下のAzendaleで指摘 の場合、sendmail
はメタ情報のため、この不正な電子メールの送信を拒否します。
q
パラメータに加えて-bh
パラメータを使用すると、postcatは出力をヘッダーと本文のみにフィルタリングし、メタ情報は含みません。これの副次的な利点は、一時ファイルがほとんどの電子メールクライアントが.eml形式として認識する形式であるため、結果の(編集された)メッセージを表示できることです。
素晴らしい記事。設定が不適切な状態で数日間実行されていたメールサーバーに問題があったため、新しい受信者に再送信する必要のあるキューがたくさんありました。そこで、すべてのキューをループする2つのワンライナーを作成しました。
最初に、すべてのキューを見つけて保留にし、.emlファイルとして保存して再送信します。
for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -h $ID; postcat -qbh $ID > tempfile$ID.eml; sendmail -f $sender $recipient < tempfile$ID.eml; done
キューを削除するための2番目:
for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -d $ID; done
この最後のコードを実行する前に、保留されていない新しいキューがないことを確認してください。これを発行してそれを行い、「!」のないキューIDを探します最後に:
mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }'
オンではこれらの2つの1つのライナーを1つに簡単に入れることができましたが、キューを削除する前に実際にメールが受信されたことを確認することで、より細かく制御できると感じました。