9

This question already has an answer here:

I know how to send an email from command line (script)

echo "body" | mail -s "subject" my@email.com

Is it possible to send attachments from commandline (script) as well?

I am using heirloom-mailx on Debian Wheezy.

marked as duplicate by slm, jasonwryan, terdon, Anthon, Renan Nov 22 '13 at 9:45

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • man mail didn't hint me a thing, so I suppose people do not use the standard mail in your UNIX or UNIX-like OS, or they just use another UNIX or UNIX-like OS. – john Nov 21 '13 at 14:52
  • I am using heirloom-mailx – Martin Vegter Nov 21 '13 at 14:56
  • See the answer in the duplicate I marked, it shows how to do this. – slm Nov 21 '13 at 22:30
20

The simple way: to use uuencode (part of sharutils package). Any formatting or body text are unavailable. Just a email with attachement and custom subject.

uuencode /path/to/file file_name.ext | mail -s subject my@email.com

The complex way: to use sendmail and html formatting:

v_mailpart="$(uuidgen)/$(hostname)"
echo "To: my@email.com
Subject: subject
Content-Type: multipart/mixed; boundary=\"$v_mailpart\"
MIME-Version: 1.0

This is a multi-part message in MIME format.
--$v_mailpart
Content-Type: text/html
Content-Disposition: inline

<html><body>Message text itself.</body></html>

--$v_mailpart
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream; name=file_name.ext
Content-Disposition: attachment; filename=file_name.ext

`base64 /path/to/file`
 --$v_mailpart--" | /usr/sbin/sendmail -t

in case with several attachments last part may be repeated.

  • 1
    The message text does not have to be html, you can use text/plain – glenn jackman Nov 21 '13 at 18:59
  • @glennjackman yes, that's right. thanks for your note. – rush Nov 21 '13 at 19:01
  • Thanks, but this does not work as I intended: uuencode /path/to/file file_name.ext | mail -s subject my@email.com I get the email, but instead of attachment, I see the uuencoded text in the body. i.e. there is no "attachment" displayed, no way to "save" the attachment. The only way I can imagine is to cut and paste the text and run it through uuencode again. – Martin Vegter Nov 22 '13 at 22:16
12

With mutt instead of mail you would simply call

echo "body" | mutt -s "subject" -a attachment0 attachment1 [...] -- my@email.com

Here, attachmentN are the list of files that you want to attach.

Not the answer you're looking for? Browse other questions tagged or ask your own question.