How to use Exim4 to Send Email from Beaglebone Black Debian

394 views
Skip to first unread message

tcb2

unread,
May 26, 2015, 5:56:07 PM5/26/15
to beagl...@googlegroups.com
I've recently gotten Exim4 to send mail from the BBB with Debian, using the Gmail SMTP server. (I tried using the BBB as the server with SMTP port 25, but my ISP [Comcast] blocks that port to prevent spam.) I am running code to monitor a sensor, and wanted an email alert to me at certain detected values. Here are the general steps:

1. Tell Google that you'll be sending email from your BBB. From a browser on the BBB, sign in to your gmail account at:


2. Open port 587. For this you need to be root. Check your iptables (firewall) first to see if 587 is already open:
# iptables -L -n

If not, then
# iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

and, if you don't have any input rules, which is good (see http://unix.stackexchange.com/questions/104954/how-to-allow-outgoing-smtp-on-iptables-debian-linux), then
# iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
3. Install and configure exim4 as root. This is the package that sends the email. 
# apt-get install exim4
Now, configure exim as root:
# dpkg-reconfigure exim4-config
in the dialog, answer as follows:
Configuration type mail sent by smarthost; received via SMTP or fetchmail
 System mail name localhost
 IP-addresses to listen on for incoming SMTP connections 127.0.0.1 ; ::1 (to refuse external connections)
Other destinations for which mail is acceptedleave empty
Machines to relay mail forleave empty
IP address or host name of the outgoing smarthostsmtp.gmail.com::587
Hide local mail name in outgoing mail ?yes
Keep number of DNS-queries minimal (Dial-on-Demand) ?no
Delivery method for local mailmbox format in /var/mail/
Split configuration into small files ?no
check /etc/exim4/update-exim4.conf.conf to see if the file looks like the below, and if not, change it:
dc_eximconfig_configtype='smarthost'
dc_other_hostnames=''
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.gmail.com::587'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'
Then modify /etc/exim4/passwd.client to (substitute your gmail name and pwd):
gmail-smtp.l.google.com:yourgm...@gmail.com:yourpassword
*.google.com:yourgm...@gmail.com:yourpassword
smtp.gmail.com:yourema...@gmail.com:yourpassword
Change permissions, etc
# chown root:Debian-exim /etc/exim4/passwd.client
# chmod 640 /etc/exim4/passwd.client

restart Exim
# update-exim4.conf
# invoke-rc.d exim4 restart


4. Test sending mail
you can do this in perl, for example:
#!/usr/bin/perl $to = 'some-email-address'; $from = 'yourgm...@gmail.com'; $subject = 'Test Email'; $message = 'This is test email sent by Perl Script'; open(MAIL, "|/usr/sbin/sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; print MAIL $message; close(MAIL);
print "Email Sent Successfully\n";

or another way it to create a file called mail-body.txt:
to : some-email-address
from : yourgmailname@gmail.com
subject
: Test mail

This is the first mail sent by my server's sendmail !

and then do
# cat mail-body.txt | sendmail -t

if mail is not sending, then check /var/log/exim4/mainlog for errors.
# tail /var/log/exim4/mainlog

good luck!

Dieter Wirz

unread,
May 27, 2015, 10:44:18 AM5/27/15
to beagl...@googlegroups.com
If you only want to send mail, install mutt....
With mutt u can use any SMTP server, and mutt comes with its own;-)
> Other destinations for which mail is acceptedleave empty
> Machines to relay mail forleave empty
> IP address or host name of the outgoing smarthostsmtp.gmail.com::587
> Hide local mail name in outgoing mail ?yes
> Keep number of DNS-queries minimal (Dial-on-Demand) ?no
> Delivery method for local mailmbox format in /var/mail/
> from : yourgm...@gmail.com
> subject : Test mail
>
> This is the first mail sent by my server's sendmail !
>
> and then do
>
> # cat mail-body.txt | sendmail -t
>
> if mail is not sending, then check /var/log/exim4/mainlog for errors.
>
> # tail /var/log/exim4/mainlog
>
>
> good luck!
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beagleboard...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

John Baker

unread,
Apr 20, 2016, 8:06:37 PM4/20/16
to BeagleBoard
Dieter,
I'm trying to get mutt running to get error messages from crontab. I installed mutt with aptitude and it may be working but I don't know how to set it up to get the messages :-[

Apr 20 23:49:01 beaglebone /USR/SBIN/CRON[8657]: (root) CMD (export DISPLAY=:0 && /usr/bin/python /home/debian/Desktop/SimB.py)
Apr 20 23:50:01 beaglebone /USR/SBIN/CRON[8690]: (root) CMD (export DISPLAY=:0 && /usr/bin/python /home/debian/Desktop/SimB.py)
Apr 20 23:51:02 beaglebone /USR/SBIN/CRON[8723]: (root) CMD (export DISPLAY=:0 && /usr/bin/python /home/debian/Desktop/SimB.py)
Apr 20 23:52:01 beaglebone /USR/SBIN/CRON[8756]: (root) CMD (export DISPLAY=:0 && /usr/bin/python /home/debian/Desktop/SimB.py)

Setup is described in https://wiki.debian.org/Mutt says there is a muttrc file in "a user's $HOME directory" but I find only unreadable muttrc files elsewhere and I'm not sure I know where and what a "user's $HOME directory" is.

1. Do I need to set up some directory in /home/?
2. Do I need to create a muttrc file to configure mutt? 
3. Is there a way to find and read the sent messages?

Thanks,
John
> gmail-smtp.l.google.com:yourgmail...@gmail.com:yourpassword
> *.google.com:yourgmailname@gmail.com:yourpassword
> smtp.gmail.com:youremailname3@gmail.com:yourpassword

Dieter Wirz

unread,
Apr 21, 2016, 8:52:20 AM4/21/16
to beagl...@googlegroups.com
Create the file .muttrc eg in /root/ or in /home/debian/ (the user
that wants to use mutt....) and add a line
set smtp_url="smtp://user:pass...@smtp.someserver.com"
And don't forget the return after this line. (as in crontab as well)

* * * * * root ls /somefolder | mutt -s "" some...@someserver.com 2>&1

BTW: didn't you read my Email where i worte that you can redirect
crontabs output into a file:
* * * * * root ls /somefolder >> /root/crontab_err.txt 2>&1
>> > gmail-smtp.l.google.com:yourgm...@gmail.com:yourpassword
>> > *.google.com:yourgm...@gmail.com:yourpassword
>> > smtp.gmail.com:yourema...@gmail.com:yourpassword
>> > email to beagleboard...@googlegroups.com.
>> > For more options, visit https://groups.google.com/d/optout.
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beagleboard...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beagleboard/2c35f341-a607-4a75-aec7-380154102952%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages