- 1. 概要
- 2. 状況
- 3. 対策
- 4. 参考サイト
1. 概要
「cron」からのメールが、スパム扱いされちゃったのです。
2. 状況
現象は、まさに概要のとおりなのですが。
状況として、対象となった「cron」の処理は、自前のスクリプトを実行したときのものです。
かつ、「cron」の処理を実行しているのは、「nt.sing.ne.jp」、メールを受信してスパム判定するのは「ns.sing.ne.jp」なのです。
自分の中であれば、スパム判定することもなかったのかな?
「cron」の処理は、下記のようなものです。
#minute hour mday month wday who command
30 2 * * * hogehoge /home/hogehoge/sh/update.sh
「Rspamd」のチェック結果の、主な個所は。
R_BAD_CTE_7BIT(3.50)[unknown];
BROKEN_CONTENT_TYPE(1.50)[];
R_MISSING_CHARSET(0.50)[];
DMARC_POLICY_ALLOW_WITH_FAILURES(-0.50)[];
ONCE_RECEIVED(0.20)[];
とまあ、文字コード関係が主な個所を占めています。
「ChatGPT」くんに相談しましたらば。
FreeBSD の cron ではデフォルトだとメールに MIME ヘッダや charset が付かず、Rspamd の R_BAD_CTE_7BIT や BROKEN_CONTENT_TYPE がスコアを上げる原因になっています。
3. 対策
「ChatGPT」くん提案の対策として、「cron 出力を自動的に正しい MIME 付きで送信する方法」をあげてくれたので、その対策をとります。
「root」ユーザ権限で。
vi /usr/local/bin/cron-mail-wrapper.sh
以下を記述します。
#!/bin/sh
# cron-mail-wrapper.sh
# 引数: 宛先メールアドレス、件名
# 使用例: cron-mail-wrapper.sh root@sing.ne.jp "Cron Output"
TO="$1"
SUBJECT="$2"
# 標準入力を本文として取得
BODY=$(cat)
# MIME ヘッダ付きで sendmail 送信
{
echo "From: cron@hogehoge.ne.jp"
echo "To: $TO"
echo "Subject: $SUBJECT"
echo "MIME-Version: 1.0"
echo "Content-Type: text/plain; charset=UTF-8"
echo "Content-Transfer-Encoding: 7bit"
echo ""
echo "$BODY"
} | /usr/sbin/sendmail -t
メールヘッダをつけて、「Content-Type」「Content-Transfer-Encoding」等をつけています。
編集したら、実行権限をつけておきます。
chmod +x /usr/local/bin/cron-mail-wrapper.sh
「crontab」の内容を次のように変更します。
#minute hour mday month wday who command
30 2 * * * hogehoge /home/hogehoge/sh/update.sh 2>&1 | /usr/local/bin/cron-mail-wrapper.sh root@sing.ne.jp "Cron /home/hogehoge/sh/update.sh"
これで、メールのスコアが「4.8」から「0.65」になりました。
4. 参考サイト
本ページは、「ChatGPT」くんを参考にさせていただきました。
|
|