From 09e6f641ca98d19e5b17564ec2626fb9de088ee9 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Mon, 27 Jan 2025 16:40:33 +0800 Subject: Update --- bin/mail/deliver.sh | 79 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 34 deletions(-) (limited to 'bin/mail/deliver.sh') diff --git a/bin/mail/deliver.sh b/bin/mail/deliver.sh index 4ed60ff..bd5bd82 100755 --- a/bin/mail/deliver.sh +++ b/bin/mail/deliver.sh @@ -1,9 +1,9 @@ #! /bin/bash -# Process each incoming mail +# Deliver incoming mail to proper mailbox # TODO image/audio mail part -# message for logging delivery +# log each delivery {{{ log=$(grep -rlE 'From:\s+>$log shopt -s nocasematch extglob @@ -25,8 +26,8 @@ trap 'doveadm force-resync ${mailbox:-/}' EXIT tmp_mailbox=$(mktemp -d); mkdir -p ${tmp_mailbox}/{tmp,new,cur} cat >${tmp_mailbox}/cur/mail trap 'rm -rf ${tmp_mailbox}' EXIT - -# Restore mail into vars +# }}} +# vars about message {{{ MAIL="$(decodemail ${tmp_mailbox})" # TODO process multi-line header field header="$(<<<"$MAIL" sed '/^$/ q; /^[[:blank:]]/ d;')" @@ -36,8 +37,8 @@ body="$(<<<"$MAIL" sed -n '/^$/,$ p' | sed '1d')" date=$(date --iso=seconds) maildir=${HOME}/Maildir mailbox= - -# Set set_stdout +# }}} +# FUNCTION: Set set_stdout {{{ set_stdout() { filename=${Subject// /_} path=${maildir}/${mailbox}${mailbox:+/}new/${date//:/}.${filename//[^[:alnum:]_]/} @@ -45,12 +46,40 @@ set_stdout() { exec 1>$path } - +# }}} +# FUNCTION: print mail {{{ print_mail() { - echo "$MAIL" + if [ "$private" = true ]; then + <<-MAIL cat + From: me + Date: $(date --rfc-email) + Message-ID: ${Message_ID} + Self: true + Subject: ${heading} + + $(sed 1d <<<"$body") + MAIL + else + echo "$MAIL" + fi } +# }}} +# FUNCTION: save as private message {{{ +private_message() { + heading="$(head -1 <<<"${body}")" + + if [[ "${heading}" =~ ^"." ]]; then + mailbox=act + heading=${heading#.} + else + mailbox=box + fi -# save each field of header into vars + private=true +} +# }}} + +# save each header field into vars {{{ # TODO Use GNU MailUtils to save header while read line; do [[ "${line}" =~ ^" "|^" " ]] && ${field}+=" ${line##*( )}" && continue @@ -60,31 +89,12 @@ while read line; do field="${field//-/_}" declare ${field}="${value}" done <<<"$header" - -# save to mailbox +# }}} +# decide mailbox by vars {{{ if [[ "$SENDER" = pham@topo.tw && -n $CHAT_VERSION ]]; then - heading="$(head -1 <<<"${body}")" - - if [[ "${heading}" =~ ^"." ]]; then - mailbox=act - heading=${heading#.} - else - mailbox=box - fi - - print_mail() { - <<-MAIL cat - From: me - Date: $(date --rfc-email) - Message-ID: ${Message_ID} - Self: true - Subject: ${heading} - - $(sed 1d <<<"$body") - MAIL - } + private_message elif [[ "${TO}" =~ '+'|'=' ]]; then - mailbox=${TO#*[+=]} # remove chars before symbol of mailbox + mailbox=${TO#*[+=]} # remove chars before symbol of mailbox mailbox=${mailbox%@*} # remove suffix for mail address elif [[ "${FROM}${RETURN_PATH}" =~ notifications@github.com|noreply@github.com ]]; then mailbox=DEV/github @@ -111,7 +121,7 @@ elif [[ "${SUBJECT}" =~ login|verify|sign-in|密碼|安全性警示|登入|存 mailbox=login elif [[ "${TO}" = cloudflare@topo.tw ]]; then mailbox=SRV/cloudflare -elif [[ +elif [[ "${SUBJECT}" =~ 未讀|更新|核對表|嘟文|unread|summary|introduc || "${FROM}" =~ no-reply@hackmd.io \ ]]; then @@ -123,6 +133,7 @@ elif [[ ]]; then mailbox=MISC/promote fi +# }}} # deliver mail to mailbox set_stdout && print_mail -- cgit v1.2.3-70-g09d2