diff options
Diffstat (limited to 'bin/mail')
| -rwxr-xr-x | bin/mail/deliver.sh | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/bin/mail/deliver.sh b/bin/mail/deliver.sh index ea21ac7..ef3d461 100755 --- a/bin/mail/deliver.sh +++ b/bin/mail/deliver.sh | |||
| @@ -2,8 +2,9 @@ | |||
| 2 | 2 | ||
| 3 | # Deliver incoming mail to proper mailbox | 3 | # Deliver incoming mail to proper mailbox |
| 4 | # TODO image/audio mail part | 4 | # TODO image/audio mail part |
| 5 | date=$(date +%s) | 5 | |
| 6 | mail_date="$(date --rfc-email -d @${date})" | 6 | epoch=$(date +%s) |
| 7 | mail_date="$(date --rfc-email -d @${epoch})" | ||
| 7 | 8 | ||
| 8 | # shell opt/trap {{{ | 9 | # shell opt/trap {{{ |
| 9 | shopt -s nocasematch extglob | 10 | shopt -s nocasematch extglob |
| @@ -17,24 +18,27 @@ cat >${tmp_mailbox}/cur/mail | |||
| 17 | trap 'rm -rf ${tmp_mailbox}' EXIT | 18 | trap 'rm -rf ${tmp_mailbox}' EXIT |
| 18 | # }}} | 19 | # }}} |
| 19 | # log each delivery {{{ | 20 | # log each delivery {{{ |
| 20 | log=~/Maildir/cur/deliver.log.${date} | 21 | log=~/Maildir/cur/deliver.log.${epoch} |
| 21 | exec 2>>$log | ||
| 22 | trap 'doveadm force-resync /' EXIT | 22 | trap 'doveadm force-resync /' EXIT |
| 23 | 23 | ||
| 24 | logfile=$(grep -rlE 'From:\s+<?MDA' ~/Maildir/cur | head -1) | 24 | # add a new log file, or reuse existing log file |
| 25 | if [ -z "$logfile" ]; then | 25 | outdated_log=$(grep -rlE 'From:\s+<?MDA' ~/Maildir/cur | head -1) |
| 26 | <<-HEADER cat >&2 | 26 | if [ -z "$outdated_log" ]; then |
| 27 | <<-HEADER cat >${log} | ||
| 27 | From: MDA <pham@topo.tw> | 28 | From: MDA <pham@topo.tw> |
| 28 | Date: ${mail_date} | 29 | Date: ${mail_date} |
| 29 | Message-ID: <deliver.log> | 30 | Message-ID: <$log> |
| 30 | Content-Type: text/plain; charset=UTF-8 | 31 | Content-Type: text/plain; charset=UTF-8 |
| 31 | Subject: Delivery Log | 32 | Subject: Delivery Log |
| 32 | 33 | ||
| 33 | HEADER | 34 | HEADER |
| 34 | else | 35 | else |
| 35 | mv $logfile $log 2>/dev/null | 36 | mv "$outdated_log" $log |
| 36 | sed -i "1,/^$/ s/^Date: .*/Date: ${mail_date}/" $log | 37 | sed -i "1,/^$/ {s#^Date: .*#Date: ${mail_date}#; s#^Message-ID: .*#Message-ID: <${log}>#}" $log |
| 37 | fi | 38 | fi |
| 39 | |||
| 40 | # Set stderr after process $log properly | ||
| 41 | exec 2>>$log | ||
| 38 | # }}} | 42 | # }}} |
| 39 | # vars about message {{{ | 43 | # vars about message {{{ |
| 40 | MAIL="$(decodemail ${tmp_mailbox})" | 44 | MAIL="$(decodemail ${tmp_mailbox})" |
| @@ -127,7 +131,7 @@ elif [[ | |||
| 127 | "${FROM}${TO}" =~ substack|service@kucw.io \ | 131 | "${FROM}${TO}" =~ substack|service@kucw.io \ |
| 128 | ]]; then | 132 | ]]; then |
| 129 | mailbox=news | 133 | mailbox=news |
| 130 | elif [[ "${SUBJECT}" =~ login|verify|sign-in|密碼|安全性警示|登入|存取 ]]; then | 134 | elif [[ "${SUBJECT}" =~ 密碼|安全性警示|登入|存取|驗證|login|verify|sign-in ]]; then |
| 131 | mailbox=login | 135 | mailbox=login |
| 132 | elif [[ "${TO}" = cloudflare@topo.tw ]]; then | 136 | elif [[ "${TO}" = cloudflare@topo.tw ]]; then |
| 133 | mailbox=SRV/cloudflare | 137 | mailbox=SRV/cloudflare |