From 32e65c842962f038b4a59d0b76928001ff9a187d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Tempel?= Date: Mon, 30 Mar 2020 11:31:18 +0200 Subject: [PATCH 1/4] mrep: Set From header according to To/Cc header I use different mail addresses for different purposes. When replying to any email, mrep(1) currently uses the mail address configured as `Local-Mailbox` for the From header. While generally desirable, I do not want to reply to mails I received through my work address with my private email address. This commit introduces a change which uses the email address the email was sent to (as specified by To/Cc) for the From header, as long as this address was configured as an `Alternate-Mailboxes`. --- mcom | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mcom b/mcom index e2f7100..9bfeecc 100755 --- a/mcom +++ b/mcom @@ -10,9 +10,9 @@ commajoin() { END {print l}' } -notmine() { +grepmine() { mine="$(maddr -a -h local-mailbox:alternate-mailboxes: "$MBLAZE/profile")" - grep -Fv -e "$mine" + grep -F -e "$mine" "$@" } ouniq() { @@ -349,14 +349,15 @@ fi printf 'To: %s\n' "$to" printf 'Cc: %s\n' \ "$(mhdr -d -A -h to:cc: "$1" | - notmine |grep -Fv -e "$to" | + grepmine -v |grep -Fv -e "$to" | ouniq |commajoin)" printf 'Bcc: \n' printf '%s\n' "$hdrs" | awk '{ print }' | msed "/body/d" /dev/stdin fi | sed '/^$/d' printf 'Subject: Re: %s\n' "$(COLUMNS=10000 mscan -f '%S' "$1")" - from=$(mhdr -h local-mailbox "$MBLAZE/profile") + from=$(mhdr -d -A -h to:cc: "$1" | grepmine | head -n 1) + [ -z "$from" ] && from=$(mhdr -h local-mailbox "$MBLAZE/profile") [ "$from" ] && printf 'From: %s\n' "$from" mid=$(mhdr -h message-id "$1") if [ "$mid" ]; then From 6c54a1e08917a24ce92f8ee72dd92377317f9cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Tempel?= Date: Mon, 30 Mar 2020 19:36:31 +0200 Subject: [PATCH 2/4] fixup! mrep: Set From header according to To/Cc header --- mcom | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mcom b/mcom index 9bfeecc..70c46f8 100755 --- a/mcom +++ b/mcom @@ -356,8 +356,12 @@ fi msed "/body/d" /dev/stdin fi | sed '/^$/d' printf 'Subject: Re: %s\n' "$(COLUMNS=10000 mscan -f '%S' "$1")" - from=$(mhdr -d -A -h to:cc: "$1" | grepmine | head -n 1) - [ -z "$from" ] && from=$(mhdr -h local-mailbox "$MBLAZE/profile") + + from=$(mhdr -h local-mailbox "$MBLAZE/profile") + addr=$(maddr -a -h to:ccc:bcc: "$1" | grepmine | head -n 1) + [ -n "$addr" ] && from=$(printf "%s <%s>" \ + "$(maddr -d -h "local-mailbox" "$MBLAZE/profile")" "$addr") + [ "$from" ] && printf 'From: %s\n' "$from" mid=$(mhdr -h message-id "$1") if [ "$mid" ]; then From ec156e0fc4795e702fa7544915bc2d7e2b1514e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Tempel?= Date: Mon, 30 Mar 2020 19:46:11 +0200 Subject: [PATCH 3/4] fixup! mrep: Set From header according to To/Cc header --- mcom | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcom b/mcom index 70c46f8..c0f80d0 100755 --- a/mcom +++ b/mcom @@ -358,7 +358,7 @@ fi printf 'Subject: Re: %s\n' "$(COLUMNS=10000 mscan -f '%S' "$1")" from=$(mhdr -h local-mailbox "$MBLAZE/profile") - addr=$(maddr -a -h to:ccc:bcc: "$1" | grepmine | head -n 1) + addr=$(maddr -a -h to:cc:bcc: "$1" | grepmine | head -n 1) [ -n "$addr" ] && from=$(printf "%s <%s>" \ "$(maddr -d -h "local-mailbox" "$MBLAZE/profile")" "$addr") From 30dd0131141e8f72d5aebfd4c2840920d8f7ca75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Tempel?= Date: Mon, 20 Apr 2020 15:20:27 +0200 Subject: [PATCH 4/4] mrep: Set From header according to To/Cc/Bcc header If any of the address contained in the aforementioned headers matches an address configured in the Reply-From header in mblaze-profile(5). Without this change, mrep(1) uses the mail address configured as Local-Mailbox for the From header. While generally desirable, I use different mail addresses for different proposes. As such, I do not want to reply to mails I received through my work address with my private email address. --- man/mblaze-profile.5 | 3 +++ mcom | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/man/mblaze-profile.5 b/man/mblaze-profile.5 index e1fa01c..11fad7b 100644 --- a/man/mblaze-profile.5 +++ b/man/mblaze-profile.5 @@ -44,6 +44,9 @@ to recognize messages sent to you. A comma-separated list of mail addresses that also belong to you, for .Xr mscan 1 to recognize messages sent by or directly to you. +.It Li Reply-From\&: +A comma-separated list of mail addresses that are automatically used for +the From header in a reply if present in the Cc, To, or Bcc header. .It Li FQDN\&: The fully qualified domain name used for .Li Message\&-Id\&: diff --git a/mcom b/mcom index c0f80d0..674def5 100755 --- a/mcom +++ b/mcom @@ -15,6 +15,11 @@ grepmine() { grep -F -e "$mine" "$@" } +replyfrom() { + addrs="$(maddr -a -h reply-from "$MBLAZE/profile")" + grep -Fv -e "addrs" +} + ouniq() { awk '!seen[$0]++' } @@ -357,7 +362,15 @@ fi fi | sed '/^$/d' printf 'Subject: Re: %s\n' "$(COLUMNS=10000 mscan -f '%S' "$1")" - from=$(mhdr -h local-mailbox "$MBLAZE/profile") + addr=$(maddr -a -h to:cc:bcc: "$1" | replyfrom | head -n1) + if [ -n "$addr" ]; then + from=$(maddr -h reply-from "$MBLAZE/profile" | \ + awk "/$addr/ { print; exit }" | head -n1) + fi + if [ -z "$from" ]; then + from=$(mhdr -h local-mailbox "$MBLAZE/profile") + fi + addr=$(maddr -a -h to:cc:bcc: "$1" | grepmine | head -n 1) [ -n "$addr" ] && from=$(printf "%s <%s>" \ "$(maddr -d -h "local-mailbox" "$MBLAZE/profile")" "$addr")