84 lines
3.1 KiB
Markdown
84 lines
3.1 KiB
Markdown
|
Title: (Neo)mutt fuckery with multipart messages
|
||
|
Date: 2018-07-03T23:40+02:00
|
||
|
Author: Wxcafé
|
||
|
Category:
|
||
|
Slug: content/(neo)mutt_fuckery_with_multipart_messages
|
||
|
|
||
|
I've been using Mutt, and then Neomutt, as an email client on my laptops for
|
||
|
a while (I generally use Evolution on my desktop, because it runs on GNOME,
|
||
|
while the laptops run on i3wm). Today while talking with colleagues who also use
|
||
|
a TUI, text-only email client, we realized we had one shared pain about this,
|
||
|
which was receiving multipart emails where the text/plain part was either the
|
||
|
HTML source of the text/html part or a single line saying "This email has no
|
||
|
plain text version, refer to the HTML version" (If you don't know how multipart
|
||
|
emails and MIME work, [wikipedia has a good
|
||
|
primer](https://en.wikipedia.org/wiki/MIME#Multipart_messages)).
|
||
|
|
||
|
We thought it might be fun as retaliation to send multipart emails, with the
|
||
|
text/html part saying "This email has no HTML version, please refer to the plain
|
||
|
text". An hour and a few curses at mutt's documentation later, I'd come up with
|
||
|
this solution:
|
||
|
|
||
|
First, create the HTML document:
|
||
|
|
||
|
```html
|
||
|
|
||
|
<!DOCTYPE html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
<style type="text/css"> body { margin : 40px auto;
|
||
|
max-width : 650px;
|
||
|
line-height : 1.6;
|
||
|
font-size : 18px;
|
||
|
color : #444;
|
||
|
padding : 0 10px
|
||
|
}
|
||
|
h1,h2,h3 { line-height : 1.2
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<h1>
|
||
|
Sorry, this email is not available in HTML<br/>
|
||
|
Please refer to the plain text version!
|
||
|
</h1>
|
||
|
</body>
|
||
|
</html>
|
||
|
```
|
||
|
|
||
|
and put it in `~/.mutt/multipart.html`
|
||
|
|
||
|
Then we simply need to add to our .muttrc this line:
|
||
|
|
||
|
```
|
||
|
send-hook ~A "push 'a~/.mutt/multipart.html<enter>'\CDkTT&"
|
||
|
```
|
||
|
|
||
|
This is a send-hook that will match any outgoing email, add the html file as an
|
||
|
attachement, then tag it as inline, tag both parts of the message and merge them
|
||
|
into a multipart/alternative file (The `&` command only exists in ~recent (May
|
||
|
2, 2018) versions of neomutt).
|
||
|
|
||
|
You can now do anything you'd normally do with the email, add further
|
||
|
attachements, PGP sign it (or not), add ccs, whatever. When you send the email,
|
||
|
it will be sent as a multipart/alternative message with the HTML document we set
|
||
|
earlier as the text/html part and your message as the text/plain part, and
|
||
|
basically every graphical client will only display the HTML version.
|
||
|
|
||
|
---
|
||
|
|
||
|
### Sample fuckery:
|
||
|
|
||
|

|
||
|
|
||
|
---
|
||
|
|
||
|
P.S.: I know I shouldn't have to say this but please don't actually use this to
|
||
|
annoy people who use graphical email clients. We're the weird ones, basically
|
||
|
everyone uses a graphical email client, and they're clearly the standard now,
|
||
|
plus it's clearly a dick move to do this. Please refrain. Thank you for your
|
||
|
understanding ❤️
|