Send mail like a boss!
This will basically let you send email from the terminal, using mailx
and Gmail as SMTP server.
First, create a certificate directory then create new certificate and key databases:
$ mkdir ~/.certs
$ certutil -N -d ~/.certs
Then fetch the certificate from Gmail and import the cert file into the new database:
$ echo -n | openssl s_client -connect smtp.gmail.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/gmail.crt
$ certutil -A -n "Google Internet Authority" -t "C,," -d ~/.certs -i ~/.certs/gmail.crt
Now, send a mail:
$ echo -e "Email content" | 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="username@gmail.com(John Doe)" -S smtp-auth-user=username@gmail.com -S smtp-auth-password=s0m3p@zzW0rD -S ssl-verify=ignore -S nss-config-dir=~/.certs recipient@some.com
Woah! That is friggin' long! Let's make it a bit shorter by adding the account settings in /etc/mail.rc
: (insert at the end of the file)
account gmail {
set smtp-use-starttls
set ssl-verify=ignore
set smtp-auth=login
set smtp=smtp://smtp.gmail.com:587
set from="username@gmail.com(John Doe)"
set smtp-auth-user=username@gmail.com
set smtp-auth-password=s0m3p@zzW0rD
set ssl-verify=ignore
set nss-config-dir=/home/path/to/.certs
}
Let's try again and send a mail to a single recipient:
$ echo -e "Mail body text" | mailx -A gmail -s "Mail subject" recipient@some.com
...or send to multiple recipients: (-b
= BCC, -c
= CC)
$ echo -e "Mail body text" | mailx -A gmail -s "Mail subject" -b bcc_user@some.com -c cc_user@some.com recipient@some.com
Now, that's much better!
Use Case: Send work report like a boss!
Based on Create your work report using Git Log
$ git report | mailx -A gmail -s "Last Week Activity Report" client@company.com
Sources: Sending email from mailx command in linux using Gmails SMTP, mailx and Gmail NSS config dir, SMTP Gmail.com from bash gives error in certificate peers certificate issuer
Written by Ryan Yonzon
Related protips
8 Responses
Wow, very detailed. Nice!
Great tip
i love it!
it works but I get this message while sending. Should I worry about it?
Error in certificate: Peer's certificate issuer is not recognized
Error in certificate: Peer's certificate issuer is not recognized.
smtp-server: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbtFO
smtp-server: 534-5.7.14 nWhmXiLx099999ddZaWck5du8QKDFOkKft
smtp-server: 534-5.7.14 N8TD1dW4NEOm-KrWRBPqAOUsY5uuSE5QSNhpu3TrpY61nm6kJwDGDgW4q4s3FfL7tjtSv
smtp-server: 534-5.7.14 z427IQco7GRD-wfDoz2CiFV7JJc7Cc_bb0AiOksdX4JSvYrdi99999999999vcN5XhwQpyWgq
smtp-server: 534-5.7.14 q6TjxrzmzT2Vg1UzEzuQgpgYfnRs> Please log in via your web browser and
smtp-server: 534-5.7.14 then try again.
smtp-server: 534-5.7.14 Learn more at
smtp-server: 534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 b109sm15313249qgf.40 - gsmtp
"/root/dead.letter" 11/373
. . . message not sent.
and. gmail stop my attempt and I got an email from them indicating that the login form my vps was suspicious... :(
I guess. I will to try with Mandrill
the message got never sent in my case.
if I did something wrong or there are any suggestions...
On Ubuntu, I tried it with /etc/mail.rc
.
Account gmail does not exist.
/usr/lib/sendmail: No such file or directory
"/home/vagrant/dead.letter" 9/236
. . . message not sent.
Googling around, SOLUTION, I found out that /etc/nail.rc
solves the problem.
thank you so much for writing this. i had to make one minor change to your excellent instructions. where you said:
-connect smtp.gmail.com:465
i had to do:
-connect encrypted.google.com:443
but besides that very minor point, it worked great. thanks again.
this article has become my go-to instructions for sending email to Gmail. thank you so much.
is there any chance you can write a similar article sending mail through mailx using Google Oath2 clientId & clientSecret as nodeMailer uses?
https://nodemailer.com/smtp/oauth2/