Once you get familiar to using the Linux terminal, you wish to do everything on your system by simply typing commands including sending emails and one of the important aspects of sending emails is attachments.
Especially for Sysadmins, can attach a backup file, log file/system operation report or any related information, and send it to a remote machine or workmate.
In this post, we will learn ways of sending an email with attachment from the Linux terminal. Importantly, there are several command line email clients for Linux that you can use to process emails with simple features.
Requirement
To effectively and reliably use this tutorial, you must have a working mail system or setup one of the mail transfer agents (MTA’s) for Linux on your system.
A MTA is an application responsible for sending and receiving emails from one host to another.
Below are the various, well known methods of sending email with attachment from the terminal.
1. Using mail Command
mail is part of the mailutils (On Debian) and mailx (On RedHat) package and it is used to process messages on the command line.
$ sudo apt-get install mailutils # yum install mailx
Now its time to send an email attachment using mail command a shown.
$ echo "Message Body Here" | mail -s "Subject Here" [email protected] -A backup.zip
In the above command, the flag:
-s
– specifies the message subject.-A
– helps to attach a file.
You can as well send an existing message from a file as follows:
$ mail -s "Subject here" -t [email protected] -A backup.zip < message.txt
2. Using mutt Command
mutt is a popular, lightweight command line email client for Linux.
If you do not have it on your system, type the command below to install it:
$ sudo apt-get install mutt # yum install mutt
You can send an email with attachment using the mutt command below.
$ echo "Message Body Here" | mutt -s "Subject Here" -a backup.zip [email protected]
where the option:
-s
– indicates the message subject.-a
– identifies the attachment(s).
Read more about Mutt – A Command Line Email Client to Send Mails from Terminal
3. Using mailx Command
mailx works more like the mutt command and it it also a part of mailutils (On Debian) package.
$ sudo apt-get install mailutils # yum install mailx
Now send the attachment mail from the command-line using mailx command.
$ echo "Message Body Here" | mailx -s "Subject Here" -a backup.zip [email protected]
4. Using mpack Command
mpack encodes the named file in one or more MIME messages and sends the message to one or more recipients, or writes it to a named file or set of files, or posts it to a set of newsgroups.
$ sudo apt-get install mpack # yum install mpack
To send a message with attachment, run the command below.
$ mpack -s "Subject here" file [email protected]
That’s all! Do you have in mind any other methods of sending emails with attachment from the Linux terminal, that are not mentioned in the list above? Let us know in the comments.
I’m using the following command:
But i’m getting too many arguments error.
Can you please help.
I have a problem for redhat 7 while trying to attach a test file (test.txt) to let’s say [email protected]. The server it is coming from is called server4B
When I view my email, it shows it as:
[email protected]; [email protected]; Me
The body of the email is blank… I tried it using the “<" technique and same thing
thoughts?
@Lawrence,
May I know which command you used to send attachment? Also have you tried other method as mentioned in the article?
I tried sending mail attachment, but it’s not working. Help me please..
@pratik
Which tools are you using? You can try the other options as well and find out the one that works for you.
My mail on Red Hat Enterprise Linux Server release 6.10 was a little different:
I had to do the email address target(s) last (after attachments) and the attachment was
-a
not-A
.If the address came first it tried to email to attachment filename, and
-A
was something else entirely (do not know or care).@J.B.
Okay, many thanks for sharing your experience with us.
Your mutt example doesn’t work with current mutt versions (on Debian), the list of files to attach (
-a
option) must be terminated by a double-dash(--)
, so your example tries to find the target address as an additional file to attach.From the mutt -h help options:
-a […] — attach file(s) to the message
the list of files must be terminated with the “–” sequence
@Gregory
Thanks for mentioning this, we will cross-check it.
Current Debian mail &mailx have no -A option, and the -a is for additional headers, not attachments.
@Gregory
We will cross check this. Thanks for the heads up.
You didn’t check it, made me lost a couple of minutes over it. May you please correct?
$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
$ man mailx
MAILX(1) User Commands MAILX(1)
NAME
mailx – send and receive Internet mail
SYNOPSIS
mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[=value]] to-addr . . .
mailx [-BDdeEHiInNRv~] [-T name] [-A account] [-S variable[=value]] -f [name]
mailx [-BDdeEinNRv~] [-A account] [-S variable[=value]] [-u user]
DESCRIPTION
Mailx is an intelligent mail processing system, which has a command syntax reminiscent of ed(1) with lines replaced by messages…
The following options are accepted:
-A name
Executes an account command (see below) for name after the startup files have been read.
-a file
Attach the given file to the message.
on current release of Debian:
MAIL(1) BSD General Commands Manual MAIL(1)
NAME
mail, mailx, Mail — send and receive mail
SYNOPSIS
mail [-dEIinv] [-a header] [-b bcc-addr] [-c cc-addr] [-r from-addr] [-s subject] [–] to-addr …
mail [-dEIiNnv] -f [file]
mail [-dEIiNnv] [-u user]
DESCRIPTION
mail is an intelligent mail processing system which has a command syntax reminiscent of ed(1) with
lines replaced by messages.
The options are as follows:
-a Specify additional header fields on the command line such as “X-Loop: foo@bar” etc. It can
be also used to override MIME headers mail adds by default to each outgoing mail, see
Character sets and MIME below. You have to use quotes if the string contains spaces. This
argument may be specified more than once, the headers will then be concatenated.
uuencode is an option I’ve used in the past.
@Robert
Many thanks for sharing info about it with us.
Yeah, that is nice, but could we have some shell stuff and some programmers sweets…
@NotMe
I seem not to get what you mean here, but there is nothing more than the commands we can offer you. Simply try them out and in case of any errors, let us know. If this has not answered your question yet, try to get back and explain it in simple terms.
I think 1 and 3 are the same due mail must be a soft link to mailx also you can use sendEmail (http://caspian.dotconf.net/menu/Software/SendEmail/):
@sedlav
That is correct, mail and mailx are more like the same commands. Thanks for mentioning SendMail command, we shall add it to the list above.
On my Linux Mint 17.3 I already had “mail” installed. Attempting to follow the instructions this error occurs:
——————————————————————————————————————
$ Please install an MTA on this system if you want to use sendmail!
——————————————————————————————————————
It would be nice to have been informed about how to install an MTA, etc.
@keithterill
Oh sorry about that, but you can follow this guide to install and setup Postfix MTA: https://www.tecmint.com/setup-postfix-mail-server-in-ubuntu-debian/