LoginSignup
0
1

More than 5 years have passed since last update.

ユーザーごとのメール送信先一覧を出す

Last updated at Posted at 2017-08-20

journalctl -u postfix の結果を tmpに一旦出力し、
from= の QUEUE_ID を元にto= を一覧にする。


  • ~/cron/mailto_history/main.sh
main.sh
#!/bin/sh
LANG=C

#SINCE=$(date "+%Y-%m-%d 05:00:00" -d "7 days ago")
#UNTIL=$(date "+%Y-%m-%d 05:00:00" -d "2 days ago")

#SINCE=$(date "+%Y-%m-%d 05:00:00" -d "1 days ago")
#UNTIL=$(date "+%Y-%m-%d 05:00:00" -d "0 days ago")

SINCE=yesterday
UNTIL=now

set -eu
cd ~/cron/mailto_history/

journalctl --since="$SINCE" --until="$UNTIL" \
  -u postfix > tmp

sh analyze.sh
  • ~/cron/mailto_history/analyze.sh
analyse.sh
#!/bin/sh
LANG=C

# メール送信先一覧を出したいユーザーを列挙
USERS="root miku pepper"
# 無視したい送信先一覧
IGNORES="pepper@gmail.com|miku@outlook.jp"
# メールアドレスが長ったらしいので、メールアドレスからドメイン名をカット。変数名変えればよかった。
IGNORE_DOMAIN="@qiita.com"

get_from() {
    USERNAME=$1
    # 例: Aug 20 19:50:24 hogehoge.jp postfix/qmgr[560]: 0D44F3BAF5: from=<root@hogehoge.jp>, size=1170, nrcpt=1 (queue active)
    grep "from=<$USERNAME" tmp 2>/dev/null \
    | cut -f '6' -d " " | sed 's/://'
}

send_list() {
    QUEUEID=$1
    grep "$QUEUEID" tmp 2>/dev/null
}


#-----------
QUEUE_LIST=""
for u in $USERS
do
    echo "[$u]----------"
    QUEUE_LIST=`get_from $u`

    for i in $QUEUE_LIST
    do
        RESULT=`send_list $i`
        # 例: Aug 20 22:00:27 hogehoge.jp postfix/local[662]: 0D44F3BAF5: to=<miku@hogehoge.jp>, relay=local, delay=0.01, delays=0.01/0/0/0.01, dsn=2.0.0, status=sent (delivered to command:  IFS=' ' && exec /usr/bin/procmail -f- || exit 75 )
        RESULT=$(echo "$RESULT" | grep to= 2>/dev/null | cut -f 3,7 -d " ")
        echo "$RESULT" \
          | egrep -v "$IGNORES" 2>/dev/null \
          | sed -e 's/to=<//' -e "s/$IGNORE_DOMAIN//"  -e 's/>,//'
    done

    echo
done

exit 0
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1