Postfixのmaillogで確認しました。 そのまま他の環境で動くかは不明。
## Concat all existing maillogs # cat /var/log/maillog* > maillogs ## deferred_mids: status=deferred なメッセージIDリスト # cat maillogs | grep status=deferred | cut -d " " -f6 | tr -d ":" | sort | uniq > deferred_mids ## deferred_not_sent_mid: deferred_midsのうち、status=sentになってるメッセージIDを除去したメッセージIDリスト # cat maillogs | grep status=sent | grep -f deferred_mids | cut -d " " -f6 | tr -d ":" > deferred_sent_mid # cat deferred_mids | grep -v -f deferred_sent_mid > deferred_not_sent_mid ## not_sent_emails: 送信できていないfromアドレスリスト # cat maillogs | grep from | grep -f deferred_not_sent_mid | egrep -o "from=<.+>" | cut -d"=" -f2 | tr -d "<>" | sort | uniq > not_sent_emails # cat not_sent_emails hoge@example.com fuga@example.net piyo@example.jp ...
grep -f file
で複数キーワード指定なgrepができて素晴らしいです。
$ man grep ... -f file, --file=file Read one or more newline separated patterns from file. Empty pattern lines match every input line. Newlines are not considered part of a pattern. If file is empty, nothing is matched. ...