Sending Mails through Command line "mail"
If you have been using Linux for sometime now then you must have used the mail command to send mails.
There is a Mail Client "Mutt" that enables you to send mails from shell but I would still prefer a one liner .... command which is much quicker to send mails,
say for eg. say you want to schedule mails for cron jobs.
Thats why I prefer the good old "mail" command
I have a Postfix running as a mail server on my system which accepts mail from
sriram.com domain.
Now my requirement is to be able to use "mail" command with postfix.
Step 1
I downloaded a command line smtp client msmtp
root@mybox sriram]# urpmi msmtp
ftp://gd.tuwien.ac.at/pub/linux/Mandriva/official/2006.0/i586/media/
contrib/msmtp-1.4.4-1mdk.i586.rpm
installing msmtp-1.4.4-1mdk.i586.rpm from /var/cache/urpmi/rpms
Preparing... #############################################
1/1: msmtp #############################################
[root@mybox sriram]#
By default "mail" command can be found in most of the linux system.
Step 2
I created a .msmtprc file inside the home directory /home/sriram
This is created to tell msmtp which SMTP server you want to use, and the information needed to access that account.
[root@mybox sriram]# cat .msmtprc
account default
auto_from off
host 10.10.93.220
from sriram@sriram.com
user sriram@gmail.com
#account default
#auto_from off
#host smtp.gmail.com
#from sriram@gmail.com
#auth on
#password mypassword
#user sriram@gmail.com
#tls on
[root@mybox sriram]#
The above hashed lines are comment, you can follow the syntax given in the hash lines if you are using a mail server which has smtp authentication
configured or if you wish to use a external mail server.
Step 3
Now to tell "mail" command to use "msmtp"
I created a file .mailrc in /home/directory and added a line
set sendmail=/usr/bin/msmtp
Note: Make sure your msmtp is in /usr/bin.
[root@mybox sriram]# which msmtp
/usr/bin/msmtp
[root@mybox sriram]#
Thats it now the "mail" command should work !!!
Now using mail commands,
$ mail sriram@linux.com
Subject: Test email
I'm sending you this email.
^D
(The ^D is Control-D, used to denote an end of file.)
Now the nice thing about the old "mail" command is that it would
accept anything from standard input. So if I wanted to send sriram a
really long email I could put it in a big file, and pipe it into the
mail command:
$ cat bigfile.txt | mail -s "Dear Sriram" sriram@gmail.com
or
$ mail -s "Dear Sriram" sriram@gmail.com <. bigfile.txt