sendmail-wrapper: initial draft
This commit is contained in:
parent
f03dad35e4
commit
d90d6eb6ff
73
crux-wiki/sendmail-wrapper
Normal file
73
crux-wiki/sendmail-wrapper
Normal file
@ -0,0 +1,73 @@
|
||||
==== SSH session that runs sendmail instead of an interactive shell ====
|
||||
|
||||
=== What? ===
|
||||
A wrapper for your local mail transfer agent (MTA) that initiates an SSH
|
||||
session when your pubnix email address appears in the "From:" header.
|
||||
|
||||
=== Why? ===
|
||||
You want to send email from your pubnix address without running the risk
|
||||
that the receiving server will reject it due to a mismatch between the
|
||||
"From" header and your ISP's IP block, but ...
|
||||
|
||||
* the low volume of your outgoing mail cannot justify the cost of an
|
||||
upgraded membership, or
|
||||
* your Internet connection has too high a latency to be running a
|
||||
full-screen editor within an SSH session.
|
||||
|
||||
=== Where? ===
|
||||
a *BSD, Linux, or WSL environment with a client that generates
|
||||
MIME-formatted mail (as expected by sendmail-compatible MTAs such as
|
||||
msmtp)
|
||||
|
||||
=== How? ===
|
||||
- Set up [[ssh public key authentication|SSH public key authentication]],
|
||||
if you have not already done so. This step can be omitted if you
|
||||
prefer to type your password for each outgoing mail.
|
||||
- Save the wrapper script below somewhere in your $PATH. Change the
|
||||
value of $MTA to the mail transport agent that you would otherwise be
|
||||
using for outgoing mail, the value of $PATH if any of the commands live in
|
||||
non-standard locations, and of course all the hard-coded email addresses
|
||||
in the script.
|
||||
- Configure your mail user agent (MUA) to call the wrapper script,
|
||||
rather than calling your MTA directly.
|
||||
|
||||
<code>
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# msmtp.wrap - bypass local in favor of remote sendmail,
|
||||
# if certain headers are found
|
||||
|
||||
PATH=/bin:/usr/bin:/usr/local/bin
|
||||
Account0=me@pubnix-0.org
|
||||
Account1=me@other-pubnix.net
|
||||
MTA=msmtp
|
||||
draft="$(mktemp -t sendmail.XXXXXX)"
|
||||
cat /dev/stdin > "$draft"
|
||||
sender="$(grep '^From:' "$draft" | head -n 1 | cut -d: -f2)"
|
||||
|
||||
case "$sender" in
|
||||
*$Account0*)
|
||||
sendmail="ssh $Account0 sendmail -t" ;;
|
||||
*$Account1*)
|
||||
sendmail="ssh $Account1 sendmail -t" ;;
|
||||
*)
|
||||
sendmail="$MTA $*" ;;
|
||||
esac
|
||||
|
||||
< "$draft" $sendmail; status=$?
|
||||
rm -f "$draft"; exit $status
|
||||
</code>
|
||||
|
||||
=== What Next? ===
|
||||
|
||||
The possibilities for customization of this wrapper are only limited by
|
||||
your imagination. You can parse the outgoing messages to look for
|
||||
particular recipients, subject lines, etc., and define a custom $sendmail
|
||||
command to handle each case. On the pubnix side, the arguments following
|
||||
''ssh $Account0'' will be passed to your usual login shell after the
|
||||
''-c'' option(( see the sshd(8) man-page, [[ https://man.openbsd.org/sshd ]] )),
|
||||
so you will enjoy all the environment variables defined in
|
||||
''$HOME/.bash_login'' if you use bash as your login shell. Save your
|
||||
custom scripts in a directory that your pubnix login shell considers part of
|
||||
$PATH, and you can then perform all kinds of tasks (like updating your
|
||||
website) without leaving your mail client.
|
Loading…
Reference in New Issue
Block a user