パーソナルレベルの話です。ふと、ある時メールサーバのメールログを見たら何通かのメールがキューに溜まっていました。僕のメールサーバはある特定のアドレスにて受け取ったメールを無条件にgmailのアカウントに転送しています。ささやかなメールのバックアップのつもりです。キューに溜まっているメールは某日経のメールのみで特に読む必要もなく保管しておく必要もないのでgmailへの再送は無駄と考え、1日1回適当な時間にキューを見て削除したいと思いました。
もちろん、放っておいても何度か再送が行われてそのうちgmailに届くようです。
メールキューの該当メッセージの例です
A478010F60BE 101167 Thu Jul 5 18:40:14 21-101999-70191-0-1-1739585-1-xxxxxxxx_com@mx4.nikkei.com
(host alt1.gmail-smtp-in.l.google.com[108.177.104.26] said: 421-4.7.0 [xxx.xxx.xxx.xxx 15] Our system has detected an unusual rate of 421-4.7.0 unsolicited mail originating from your IP address. To protect our 421-4.7.0 users from spam, mail sent from your IP address has been temporarily 421-4.7.0 rate limited. Please visit 421-4.7.0 https://support.google.com/mail/?p=UnsolicitedRateLimitError to 421 4.7.0 review our Bulk Email Senders Guidelines. c18-v6si2773616oiy.298 - gsmtp (in reply to end of DATA command))
xxxxxxxx@gmail.com
これを読むと僕のIPから迷惑メールが大量に来ているから、一時的に制限するという内容に見えます。いやいやいや、せいぜい1日にgmailへ転送しているメールなんか100通くらいでっせ。
## 環境
* CentOS7.5
* postfix 2.10.1
## 内容
* gmailから421-4.7.0 rate limitedで拒否されたメールがキューにあったら削除する
## コード - code
!/bin/bash
bounce_sender="postmaster@xxxxx.com"
bounce_to="root@xxxxx.com"
bounce_subject_prefix="Delivery to Gmail failed: "
bounce_body="date +"%F"
421-4.7.0 mail report"
while read -r qid size wday month mday time sender recipient ; do
bounce_body="$bounce_body
qid = $qid
size = $size
date = $wday $month $mday $time
sender = $sender
recipient = $recipient"
postsuper -d $qid >/dev/null
done < <(postqueue -p
|sed -n -e '/^[0-9A-Z]* /N'
-e 's/\n/ /g'
-e '/(host ..google.com.* said: 421[- ]4.7.0 /N'
-e 's/\n *(.gmail.com)/ \1/p'
| sed -e 's/(.)//g')
echo "$bounce_body" |mail -s "$bounce_subject_prefix" -r $bounce_sender $bounce_to
スタックオーバーフローに以下のような記事があり、コードは参考にさせていただきました。
>[Postfixでメール送信が失敗した時にリトライせずにエラーメールを送信者に返すにはどうしたらいいですか?
](https://ja.stackoverflow.com/questions/2242/postfix%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%9F%E6%99%82%E3%81%AB%E3%83%AA%E3%83%88%E3%83%A9%E3%82%A4%E3%81%9B%E3%81%9A%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E4%BF%A1%E8%80%85%E3%81%AB%E8%BF%94%E3%81%99%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%97%E3%81%9F%E3%82%89%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B/2284#2284)
1日1回はanacronで実施しました。
/etc/cron.dailyに上記シェルのシンボリックリンクをはります
残念ながら、僕のメールサーバはスパムフィルタリングはやっていません。postfixの機能で手動フィルタをやってます。どうしても迷惑メールが来てしまいますが、明らかな迷惑メールですらgmailに転送できているようなのですが、上記の某日経メールだけはgmailが拒否判定します。なんでかはよくわからないです。
### 参考
* [Postfixでメール送信が失敗した時にリトライせずにエラーメールを送信者に返すにはどうしたらいいですか?
](https://ja.stackoverflow.com/questions/2242/postfix%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%9F%E6%99%82%E3%81%AB%E3%83%AA%E3%83%88%E3%83%A9%E3%82%A4%E3%81%9B%E3%81%9A%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E4%BF%A1%E8%80%85%E3%81%AB%E8%BF%94%E3%81%99%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%97%E3%81%9F%E3%82%89%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B/2284#2284)
* [シェルスクリプトを書くときに気をつける9箇条](https://qiita.com/b4b4r07/items/9ea50f9ff94973c99ebe)