From 06259405cd587d29eec78914f8df2dc88f8a9b33 Mon Sep 17 00:00:00 2001 From: Ken Hornstein Date: Fri, 23 Sep 2016 22:04:44 -0400 Subject: [PATCH] Add our sample localpostprox, and also pick up replaliases while we're at it. --- Makefile.am | 3 +- docs/contrib/localpostproc | 89 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100755 docs/contrib/localpostproc diff --git a/Makefile.am b/Makefile.am index 58e5141f..4197dc75 100644 --- a/Makefile.am +++ b/Makefile.am @@ -240,7 +240,8 @@ dist_doc_DATA = COPYRIGHT INSTALL NEWS README VERSION \ ## docs_contribdir = $(docdir)/contrib dist_docs_contrib_SCRIPTS = docs/contrib/replyfilter docs/contrib/build_nmh \ - docs/contrib/ml docs/contrib/vpick + docs/contrib/localpostproc docs/contrib/ml \ + docs/contrib/vpick docs/contrib/replaliases dist_docs_contrib_DATA = docs/contrib/replaliases ## diff --git a/docs/contrib/localpostproc b/docs/contrib/localpostproc new file mode 100755 index 00000000..c8f71702 --- /dev/null +++ b/docs/contrib/localpostproc @@ -0,0 +1,89 @@ +#!/bin/sh +# +# localpostproc - A sample postproc which changes the submission email server +# based on user-supplied criteria. +# +# The basic concept is that we change where we submit mail to based on the +# message contents. We use scan(1) to get out fields we care about. But +# really, you could use ANY criteria, such as environment variables, +# recipients, etc etc. +# + +# +# Find out which message is the draft message; yes, this sucks. +# +# The case statement has to know about switches that take arguments; +# add to this list as necessary. +# + +whom=0 + +find_draftmessage() { + while test $# -gt 0; do + case "$1" in + -al* | -filt* | -wi* | -client | -idanno | -server | \ + -partno | -saslmech | -user | -por* | -width | \ + -file* | -mhl* | -mt* | -cr* | -lib* | -auth* | -sendmail) + shift + ;; + -whom) + whom=1 + ;; + -*) ;; + *) + draftmessage="$1" + return 0 + ;; + esac + shift + done + + echo "Cannot find draft message name in argument list" + exit 1 +} + +realpost="$(mhparam libdir)/post" + +if [ $# -eq 0 ]; then + echo "Usage: [post switches] filename" + exit 1 +fi + +find_draftmessage "$@" + +if [ $whom -eq 1 ]; then + exec "$realpost" "$@" +fi + +fromhost=$(scan -format '%<{resent-from}%(host{resent-from})%|%(host{from})%>' -file "$draftmessage") + +if [ $? -ne 0 ]; then + echo "Unable to run scan on draft file $draftmessage, aborting" + exit 1 +fi + +if [ -z "$fromhost" ]; then + echo "Could not determine hostname of From: address" + exit 1; +fi + +# +# Here we use the hostname in the "from" address, but you could use anything +# + +case "$fromhost" in + *host1.com) + postflags="-server smtp.host1.com -sasl -port submission" + ;; + + host2.com) + postflags="-server smtp.host2.com -sasl -tls -port submission" + ;; + + *) + echo "Don't know how to send email from $fromhost" + exit 1 + ;; +esac + +exec "$realpost" $postflags "$@" -- 2.56.0