I am working on a KornShell (ksh) script running on a Solaris server that will send out an email when and error condition is met. I am sending the email via mailx.
Question: How to I set the "From" email address on the mailx command?
Current Code:
echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
Note: The command works fine, however, the "From" is the name of the user I am running the script as and I would like for this to another email address.
How would I accomplish this?
In case you also want to include your real name in the from-field, you can use the following format
If you happen to have non-ASCII characters in you name, like My AEÆoeøaaå (Æ= C3 86, ø= C3 B8, å= C3 A5), you have to encode them like this:
Hope this can save someone an hour of hard work/research!
On macOS Sierra, creating ~/.mailrc with smtp setup did the trick:
Then to send mail from CLI:
On Ubuntu Bionic 18.04, this works as desired:
$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx --append='FROM:Foghorn Leghorn <fleghorn@yourisp.com>' -s "test cli email $(date)" -- recipient@acme.com
On debian where
bsd-mailx
is installed by default, the-r
option does not work. However you can usemailx -s subject recipient@abc.com -- -f sender@abc.com
instead. According to man page, you can specify sendmail options after--
.Just ran into this syntax problem on a CentOS 7 machine.
On a very old Ubuntu machine running
mail
, the syntax for a nicely composed email isHowever on a CentOS 7 box which came with
mailx
installed, it's quite different:Consulting
man mail
indicates that-r
is deprecated and the 'From' sender address should now be set directly using-S "variable=value"
.You may then find, as I did, that when you try to generate the email's body content in your script at the point of sending the email, you encounter a strange behaviour where the email body is instead attached as a binary file ("ATT00001.bin", "application/octet-stream" or "noname", depending on client).
This behaviour is how Heirloom mailx handles unrecognised / control characters in text input. (More info: https://access.redhat.com/solutions/1136493, which itself references the mailx man page for the solution.)
To get around this, I used a method which pipes the generated output through
tr
before passing tomail
, and also specifies the charset of the email:In my script, I'm also explicitly delaring the locale beforehand as it's run as a cronjob (and cron doesn't inherit environmental variables):
(An alternate method of setting locales for cronjobs is discussed here)
More info on these workarounds via https://stackoverflow.com/a/29826988/253139 and https://stackoverflow.com/a/3120227/253139.
The package
nail
provides an enhanced mailx like interface. It includes the-r
option.On Centos 5 installing the package
mailx
gives you a program calledmail
, which doesn't support themailx
options.