10

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.

Martin Vegter
  • 358
  • 75
  • 236
  • 411

2 Answers2

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.

kenorb
  • 20,988
rush
  • 27,403
  • 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
14

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.

tkrennwa
  • 3,525
  • 1
  • 15
  • 17