Sending Email from mailx Command in Linux Using Gmail’s SMTP
mailx or mail command in Linux is still providing service for guys like me, especially when we need to send email automatically by script. gmail is great. Now, how to use gmail’s smtp in mailx/mail? gmail is a little special since gmail’s smtp server requires tls authorization. The good news is that mailx supports it. Let’s look at how to use it.
First, find out Fixforx’s profile directory in the home directory (I believe most of the users on Linux use Firefox. If you are not using Firefox, what you need to do is try it ;) . It has a format like this:
~/.mozilla/firefox/xxxxxxxx.default
xxxxxxxx is a random string that’s different for different users. You can easily find it out by looking into the directory ~/.mozilla/firefox.
There are two ways to do this: using all-in-one command or putting configurations into profile. The all-in-one-command way needs no other configurations except the command line itself, while the way using configuration has a clearer command.
All-in-one command
This is an all-in-one command that sends email to $TO_EMAIL_ADDRESS
mailx -v -s "$EMAIL_SUBJECT" -S smtp-use-starttls -S ssl-verify=ignore -S smtp-auth=login -S smtp=smtp://smtp.gmail.com:587 -S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" -S smtp-auth-user=$FROM_EMAIL_ADDRESS -S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD -S ssl-verify=ignore -S nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ $TO_EMAIL_ADDRESS
Replace the $XXX with the value that is actually used. The meaning is obvious. And remember to change xxxxxxxx to the string that’s part of the Firefox profile directory.
This command will ask for the email content. Type in the mail content and after finishing the email, use “Ctrl+d” to tell mailx you have finished. Then this mail will be sent out through gmail’s smtp server. You can also use pipe like this:
echo "The mail content" | mail -v -s ...
Use configuration file
There are too many options in the above command? Yes… I must confess so. We can write most of them into mailx/mail’s configuration file ~/.mailrc
set smtp-use-starttls set nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ set ssl-verify=ignore set smtp=smtp://smtp.gmail.com:587 set smtp-auth=login set smtp-auth-user=$FROM_EMAIL_ADDRESS set smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD set from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)"
Change the $XXX and xxxxxxx to the right value for you. When sending mails, use this command:
mailx -v -s "$EMAIL_SUBJECT" $TO_EMAIL_ADDRESS
Then, time to enjoy it!
Tags: Bash, Client config, Command line, Fedora, google, mail command, mail content, mozilla firefox, Server config, smtp auth, smtp server, Tutorial
Here’s a version wrapped in a function that asks for your password each time (avoid storing it on the disk):
https://gist.github.com/2307654
I could not find the firefox’s profile directory.. I would be really grateful if someone would help me out…
It is usually under ~/.mozilla/firefox with a name xxxxxxxx.default .
If you never run Firefox before, this directory may not exist. You can install it and run it once, then the directory should be there.
I was looking for this one, you saved me a lot of time!
Thank you!!!
mailx have no option ‘-S’ (ubuntu 10.10) :(
That’s strange. I find from Ubuntu’s site the mailx has -S option. Please try again and check whether the package you are using is right.
we find answer. two mailx exists. heirloom-mailx have -S option, but mailutil’s mailx haven’t :)