User Tools

Site Tools


ssh_sendmail_instead_of_login_shell

This is an old revision of the document!


SSH session that runs sendmail instead of your login shell

What?

A wrapper for your local mail transfer agent (MTA) that initiates an SSH session when your SDF email address appears in the “From:” header.

Why?

You want to send email from your SDF 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 a VPM/VHOST/MetaARPA 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?

  1. Set up 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.
  2. 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.
  3. Configure your mail user agent (MUA) to call the wrapper script, rather than calling your MTA directly.
#!/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@sdf.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
    *me@sdf.org* )
        sendmail="ssh $Account0 sendmail -t" ;;
    *me@other-pubnix.net* )
        sendmail="ssh $Account1 sendmail -t" ;;
    * )
        sendmail="$MTA $*" ;;
esac

< "$draft" $sendmail; status=$?
rm -f "$draft"; exit $status
ssh_sendmail_instead_of_login_shell.1668220710.txt.gz · Last modified: 2022/11/12 02:38 by jquah