Send mail with Sendmail from Bash command line

eMails are still the most important communication channel on internet. Most of the web applications you can find on the web require an eMail address to register because they will use it for important communications, to recover you password and so on. It’s still a reliable way to identify the users.

Well, today I was to write a monitor script who checks a server status and send an eMail to the admin if something wrong happens. For some reason I wanted to write it in Bash script and put it directly into the /etc/cron.daily/ folder. The check was pretty easy to write but then I had to send the eMail.

After some searching and trying I finally found out how to send emails directly from Bash with Sendmail and no need to write any file:

echo -e "To: "admin" <admin@example.com>nFrom: "The Server" <server@example.com>rnContent_Type: text/plainnSubject: [Server] Unexpected responsennResponse was wrongn" | sendmail -t

Now a little bit of explanation.

Basically I send all the needed headers and content to Sendmail with a pipe. Sendmail’s -t option forces to search the recipients addresses inside the header. Normally Sendmail expects this kind of addresses as a parameter, but this way everything has the same source, I mean the pipe.

The echo statement sends all the needed data to Sendmail. Remember the -e option to replace the backslashed special characters. This is very important because without it Sendmail will do not understand anything about you want to send.

You can add any kind of headers you need, such as the Cc and the Bcc fields or others, and check that after the last header and before the mail’s content there are two new line characters.

Leave a Reply

Your email address will not be published. Required fields are marked *