Creating a multipart email and sending it in Linux
We use mutt to send out emails.
mutt -s "Test" -e "Content-Type: text/html" [email protected] < message.html
We send out our email updates in HTML format. We would like to send emails as multi-part containing both a text version and an html version.
- How do we create such a multipart message in Linux when the email subject, and HTML and text versions of the email body are given?
- Can we use mutt to send the multipart email created in step 1, from the linux prompt?
Envirnonment: RedHat Enterprise Linux 5, mutt
Solution 1:
How do we create such a multipart message in Linux when the email subject, and HTML and text versions of the email body are given?
Create a message of type multipart/alternative
as documented in RFC 2046:
From: Example Company <[email protected]> To: Joe User <[email protected]> Date: Sat, 21 May 2011 17:40:11 +0300 Subject: Multipart message example MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=asdfghjkl --asdfghjkl Content-Type: text/plain; charset=utf-8 Hello everyone! --asdfghjkl Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <body> <p>Hello everyone!</p> </body> --asdfghjkl--
See RFC 2046 and RFC 5322 for the exact syntax.
Can we use mutt to send the multipart email created in step 1, from the linux prompt?
If you find a way to set the right Content-Type header. (In your example, you are using -e
, but mutt uses -e
for different purposes. Even -e "my_hdr Content-Type: ..."
leaves the original text/plain header intact.)
It's better to send generated mail directly through sendmail
. You'll have to create the headers yourself – see the example; use strftime("%a, %d %b %Y %T %z")
for Date and a string of random alphanumeric characters for the boundary. Then pipe the prepared message, including headers, to sendmail -i -t
:
sendmail -i -t < above-example.txt
(The -t
option means "get recipients from the To: line"; you can alternatively use sendmail -i [email protected]
)