9

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.

3
  • 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.
    – 41754
    Nov 21, 2013 at 14:52
  • I am using heirloom-mailx Nov 21, 2013 at 14:56
  • See the answer in the duplicate I marked, it shows how to do this.
    – slm
    Nov 21, 2013 at 22:30

2 Answers 2

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.

3
  • 1
    The message text does not have to be html, you can use text/plain Nov 21, 2013 at 18:59
  • @glennjackman yes, that's right. thanks for your note.
    – rush
    Nov 21, 2013 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. Nov 22, 2013 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.

4

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