XMail configuring in openwrt
I had to learn how to send emails from the command line, simply I needed a script which would send emails to specific email addresses upon the occurrence of certain events.
Of course the easiest way is to create a mailbox on any mail service like gmaile with further sending messages from it to other addresses. But probably much better will be when the box itself (without creating any email address on third party hosting) will be able to send the messages.
The easiest way of realisation was using Xmail. I don't know maybe there are more simple solutions of this problem, but they are unknown to me and so here below I briefly describe how to send emails from the command line in openWrt using Xmail.
Install the package XMail using make menuconfig.
Don't know why, but after the openwrt building there will be some archiv files MailRoot.tar.bz2 in the folder /etc, which probably would be needed for xmail working. Probably it should be unpacked, but where? Let it be the folder named www for this purpose.
In other words we create in www the directory MailRoot and put there the contents of the archiv files.
Further we open the file /etc/config/xmail and see the following lines there:
config xmail option mail_root '/var/MailRoot'
This lines tell us that the directory www where we unpacked the archiv files is not the right choiсe. But we have already choosen the directory www so we should change this line as follows:
config xmail option mail_root '/www/MailRoot'
Let's try to send an email using the utility sendmail which is a part of xmail. sendmail needs a file in a specific format. For example, let's create a file with a message in /home/email.example:
From: box1@openwrt To: myemail@gmail.com Subject: test email from openwrt hi this is openwrt xmail. bye!
Let's send the email from the command line as follows:
# sendmail myemail@gmail.com < /home/email.example
We get the following message:
cannot find environment variable: MAIL_ROOT
Let's set MAIL_ROOT as follows:
export MAIL_ROOT=/www/MailRoot
Send again:
# sendmail myemail@gmail.com < /home/email.example
Check myemail@gmail.com. There is no email. Check the contents of this directory:
# ls -l /www/MailRoot/spool/local/ -rw-r--r-- 1 root root 200 Jan 28 23:47 949092438000.3555.TR628M1 -rw-r--r-- 1 root root 200 Jan 28 23:47 949092445000.3576.TR628M1
The emails have been placed in the directory for sending but not sent. Because the Xmail service have not been run. It can be done as follows:
/etc/init.d/xmail start
or restart the system.
Check the output ps:
# ps | grep Xmail 1941 root 5020 S /usr/bin/XMail -Ms /www/MailRoot -PX 4 -B- -SX 4 -X-
It seems like ok.
Let's try to send the email:
# sendmail myemail@gmail.com < /home/email.example
The letter should be in your Inbox of myemail@gmail.com. But if your ip address is blacklisted, the email will be discarded by the server and will not fall into Inbox.
Email sending using a third party mail service in openWrt.
Another way of email sending from the console in openwrt using a third party mail service is using the SMTP.
In this case we use the service gmail.com
Install/build the package ssmtp in openwrt.
Let's edit the configuration file /etc/ssmtp/ssmtp.conf as follows:
# # /etc/ssmtp.conf -- a config file for sSMTP sendmail. # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=myemail@gmail.com # The place where the mail goes. The actual machine name is required # no MX records are consulted. Commonly mailhosts are named mail.domain.com # The example will fit if you are in domain.com and your mailhub is so named. mailhub=smtp.gmail.com:587 # Where will the mail seem to come from? #rewriteDomain=myemail@gmail.com # The full hostname hostname=tr628M1 # Set this to never rewrite the "From:" line (unless not given) and to # use that address in the "from line" of the envelope. FromLineOverride=YES # Use SSL/TLS to send secure messages to server. #UseTLS=YES # Use SSL/TLS certificate to authenticate against smtp host. #UseTLSCert=YES # Use this RSA certificate. #TLSCert=/etc/ssl/certs/ssmtp.pem # Get enhanced (*really* enhanced) debugging information in the logs # If you want to have debugging of the config file parsing, move this option # to the top of the config file and uncomment #Debug=YES UseSTARTTLS=YES AuthUser=myemail AuthPass=mypass
Let's create the file /tmp/msg.txt with the following text:
Subject: ahaha ohohoho
Send the email to ourself using the following command:
ssmtp myemail@gmail.com < /tmp/msg.txt
After sending we can get the error message:
ssmtp: Authorization failed (534 5.7.14 https://support.google.com/mail/answer/78754 q4sm582746lfq.45 - gsmtp)
To fix the error we need to follow the link: https://www.google.com/settings/security/lesssecureapps
and choose "Activate" in the menu "Account access" from unverified applications.
If it is nessesary to generate an email dynamically and without using of any files then the command line can looke like this:
local email_cmd="ssmtp -t <<EOF\ From: <%s>\ To: <%s>\ Date: info\ Subject: сообщение ПУИД\ %s\ EOF"