Wednesday, April 11, 2012

Sending email using unix shell scripting

I have to write a script to send mails using unix shell scripts.



The following script allows me to have variable message body.



Is it possible to have a variable subject part in the code below?



#!/bin/bash
# Sending mail to remote user

sender="root@sped56.lss.emc.com"
receiver="root@sped56.lss.emc.com"
body="THIS IS THE BODY"
subj="THIS IS THE SUBJECT."


echo $body | mail $receiver -s "THIS IS THE SUBJECT" // this works fine
echo $body | mail $receiver -s $subj // ERROR - sends one mail with only
//"THIS" as subject and generates another error mail for the other three words




2 comments:

  1. You forgot the quotes:

    echo $body | mail $receiver -s "$subj"

    Note that you must use double quotes (otherwise, the variable won't be expanded).

    Now the question is: Why double quotes around $subj and not $body or $receiver. The answer is that echo doesn't care about the number of arguments. So if $body expands to several words, echo will just print all of them with a single space in between. Here, the quotes would only matter if you wanted to preserve double spaces.

    As for $receiver, this works because it expands only to a single word (no spaces). It would break for mail addresses like John Doe .

    ReplyDelete
  2. you can use mailx and always put your quotes around variables

    mailx -s "$subj" my.email@my.domain.com < myfile.txt

    ReplyDelete