Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
#!/bin/sh # ~/bin/intermail - intercepts mail sent with sendmail (kind of) # By Edrx, 2004dec23 # The problem: my main e-mail address is <edrx@mat.puc-rio.br>, but my # account at mat.puc-rio.br only allows me shell access through ssh -- # no pop3, so smtp, no imap, no anything... how can I read the mail # that falls there, and how can I send mails that seem to originate # from there? # # I know that most of you will have several answers ready: "use # another e-mail account and set the `reply-to' field"; "use procmail, # .forward and reply-to", etc etc -- # # but: # # I DON'T BLOODY FSCKING UNDERSTAND HOW E-MAIL WORKS!!! I've tried to # experiment with sendmail, exim4, postfix, and even a bit of qmail, # I've read tons of docs and RFCs and tried to assimilate what was # there, but these programs are still surprising me all the time; a # few days ago I tried to fetchmail mails from another ssh-able # account that I've had for years, one in which running "mail" showed # just five messages, and fetchmail reported 1117 messages, then # started to download them, and when I noticed I wasn't receiving them # and aborted it I found that the 20-something messages it fetched # (certainly all spam, but whatever) were either lost or in some # mysterious limbo directory, because I didn't have an MTA # installed... yeah, really, no MTA, because due to a disk crash I # recently had to reinstall my home machine, and I used debootstrap # for that and for some reason I didn't choose an MTA... # # FSCK! FSCK EVERYTHING! FSCK ME! FSCK THE SYSTEM! FSCK FSCKING ESR! # BASTARD! TRAITOR! FSCK! FSCK! AAAAAAAARGH! AAAAAAA! AAAAAAA! # # E-mails are made to be *deleted*, not to be *lost*. If I have an # e-mail account that is more or less dependable -- the one at puc-rio # -- I shouldn't be risking my precious spammy e-mails because I'm # bloody trying to play the sysadmin and I'm bloody incompetent to do # so. I *will* understand this e-mail shit someday, when I'll have a # virtual second machine to play with, but right now qemu just broke, # I still don't know how to use user-mode-linux, and I'm *not* going # to use that fscking sourceless vmware thing, especially because my # old HD just went "poof" and with it went my shiny new, never # untarred tarball of bloody bloated fscking vmware, and when I did # download it I had broadband and I don't have fscking broadband # anymore, I'm on fscking dial-up now. # # Reading puc-rio's e-mails is fine, I just rsync my mailbox there # from time to time. Sending e-mails is more of a problem: I used to # write each e-mail as an invocation of mail -s SUBJECT TO1 TO2 etc # etc, with the body of the e-mail as a here-document; then I would # upload that to puc as a script and run it there. But the machine at # puc runs that wonderfully crappy RH 6.1, in which "mail" doesn't # even accept an "-a" to set extra headers, so no In-Reply-To's or # such stuff. Yeech. Yeah, I *did* live for years without ever # replying properly, and I just discovered "-a" some weeks ago. But # for mailing lists I do need "In-Reply-To"s, and if I want qemu and # user-mode-linux working then blah-blah-blah blah mailing lists. # # Now I just found out that oldy deary sweety nifty cuddly Emacs has a # very simple mode for composing mail that does the headers thing # right; after we compose the mail it invokes /usr/bin/sendmail, # passes on all the headers and stuff, and all things work. # # (find-efile "mail/") # (find-enode "Mail Headers" "`In-reply-to'") # (require 'sendmail) # (find-efunction 'mail) # (find-efunction 'sendmail-send-it) # (find-efunction 'sendmail-send-it "boundp 'sendmail-program") # # Args are usually "- -oi -oem -odb -t": # (find-node "(exim4)-oi" "a dot on a" "not terminate") # (find-node "(exim4)-oem") # (find-node "(exim4)-oee") # (find-node "(exim4)-odb") # (find-node "(exim4)-t") # # So instead of invoking /usr/lib/sendmail we make it invoke this # script; this script writes the sendmail arguments and input into # files in ~/INTERMAIL/, and then we can do funny things with that, # like uploading those files to puc and running a real sendmail there, # and/or storing the files forever. # (setq sendmail-program "~/bin/intermail") # (setq sendmail-program "/usr/lib/sendmail") # (makunbound 'sendmail-program) # (find-angg ".emacs" "intermail") # (find-angg ".zshrc" "intermail") mkdir -p ~/INTERMAIL cd ~/INTERMAIL || exit 1 if [ ! -e n ]; then echo 0 > n fi N=$[$(<n)+1] echo "$*" > $N.args cat > $N.input echo $N > n # That's it. # Cheers.