Sending email in FreeBSD with Gmail

When I moved my mail functionality (Qmail) from my FreeBSD-server to Google Apps I was left with no way to send email from my server (sendmail disabled and gmail removed) from shell. I have no longer the need to recieve email from my server, thanks to Google! However, I needed to send emails from my server to report server status and report software/hardware errors.

This is how I solved the problem on my FreeBSD 7.0 server. I have verified that it also works on 9.1

1. Freebsd has a guide for setting up send only with ssmtp. First you should install ssmtp.

cd /usr/ports/mail/ssmtp/ && make install replace clean

2. Then you need to configure ssmtp for Gmail. Create this file in /usr/local/etc/ssmtp/ssmtp.conf. Replace email and password with your Gmail-account settings.

root=youremail@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=youremail@gmail.com
AuthPass=yourpassword
UseSTARTTLS=YES
rewriteDomain=gmail.com

3. Test ssmtp. First you have to create a textfile with the message that you are going to send. Copy the text between the lines below.

Save the text to ”testmessage.txt”.
————————–
To: youremail@gmail.com
From: youremail@gmail.com
Subject: Testmessage

This is a test
————————–

Then run this command to send the testmessage.

ssmtp -v youremail@gmail.com < testmessage.txt

You should see the following output:

[<-] 220 mx.google.com ESMTP 14sm2982172ewy.10 [->] EHLO mysql
[<-] 250 PIPELINING [->] STARTTLS
[<-] 220 2.0.0 Ready to start TLS [->] EHLO servername
[<-] 250 PIPELINING [->] AUTH LOGIN
[<-] 334 VXNlcm5hbWU6 [->] bWFyY3VzLm55YkBnbWFpbC5jb20=
[<-] 334 UGFzc3dvcmQ6 [<-] 235 2.7.0 Accepted [->] MAIL FROM:
[<-] 250 2.1.0 OK 14sm2982172ewy.10 [->] RCPT TO:
[<-] 250 2.1.5 OK 14sm2982172ewy.10 [->] DATA
[<-] 354 Go ahead 14sm2982172ewy.10 [->] Received: by Servername (sSMTP sendmail emulation); Tue, 09 Mar 2010 12:53:14 +0100
[->] From: "Username"
[->] Date: Tue, 09 Mar 2010 12:53:14 +0100
[->] To: youremail@gmail.com
[->] Subject: Testmessage
[->]
[->] This is a test
[->] .
[<-] 250 2.0.0 OK 1268135596 14sm2982172ewy.10 [->] QUIT
[<-] 221 2.0.0 closing connection 14sm2982172ewy.10 If everything seems ok you should now have a fresh email in your Gmail account. Check it out! If not, then you should probably check your ssmtp.conf file and verify that you can connect to smtp.google.com 4. Last, replace sendmail with ssmtp. This makes ssmtp the default mailer for your system. mv /usr/sbin/sendmail /usr/sbin/sendmail.org
ln -s /usr/local/sbin/ssmtp /usr/sbin/sendmail

5. Check that mail is working.

mail -v -s "TestSubject" youremail@gmail.com
Testing and
.

Output:
[<-] 220 mx.google.com ESMTP 16sm3004137ewy.7 [->] EHLO mysql
[<-] 250 PIPELINING [->] STARTTLS
[<-] 220 2.0.0 Ready to start TLS [->] EHLO servername
[<-] 250 PIPELINING [->] AUTH LOGIN
[<-] 334 VXNlcm5hbWU6 [->] bWFyY3VzLm55YkBnbWFpbC5jb20=
[<-] 334 UGFzc3dvcmQ6 [<-] 235 2.7.0 Accepted [->] MAIL FROM:
[<-] 250 2.1.0 OK 16sm3004137ewy.7 [->] RCPT TO:
[<-] 250 2.1.5 OK 16sm3004137ewy.7 [->] DATA
[<-] 354 Go ahead 16sm3004137ewy.7 [->] Received: by mysql (sSMTP sendmail emulation); Tue, 09 Mar 2010 13:11:41 +0100
[->] From: ”Username”
[->] Date: Tue, 09 Mar 2010 13:11:41 +0100
[->] To: youremail@gmail.com
[->] Subject: TestSubject
[->]
[->] testing
[->] .
[<-] 250 2.0.0 OK 1268136703 16sm3004137ewy.7 [->] QUIT
[<-] 221 2.0.0 closing connection 16sm3004137ewy.7 6. Check the log file. cat /var/log/maillog

Output:
SMTP[755]: Creating SSL connection to host
sSMTP[755]: SSL connection using RC4-MD5
sSMTP[755]: Sent mail for username@servername(221 2.0.0 closing connection 14sm3068161ewy.2) uid=0 username=username outbytes=696
sSMTP[1234]: Creating SSL connection to host
sSMTP[1234]: SSL connection using RC4-MD5
sSMTP[1234]: Sent mail for username@servername (221 2.0.0 closing connection 16sm3004137ewy.7) uid=0 username=username outbytes=349

Summary
This worked for me straight out of the box. I didn’t need to make any changes to make it work. I hope it works for you as well!

Hemsida till Ludvig Nordström sällskapet

Jag har nyligen hjälp en kompis med att bygga en hemsida åt Ludvig Nordström sällskapet. Så kika på den!

ludvig1

Eftersom jag är ett stort fan av att använda WordPress (php) som CMS till enklare webbsidor åt föreningar/mindre företag så blev det givetvis den tekniska lösningen. Som vanligt blev det lite hackande i form av att mixtra med teman samt plugins/tillägg men det var ganska enkla fixar som behövde göras. Samtidigt var det kul att se alla bra nyheter i WordPress 2.8. Det är riktigt imponerande att följa WP’s utveckling.

Flytt av mailhanteringen från Qmail till Google Apps

Eftersom jag driftat mina egna webbservrar (FreeBSD) i ett flertal år så har det visat sig vilka moment som är mer krångliga och tidskrävande än andra. I huvudsak så kör jag webb (php, apache och mysql) och mail (Qmail) på mina maskiner för dels mina domäner samt för kompisars domäner. Det mest krångliga & tidskrävande har under denna tid varit att hantera mailen. För det första så är det inte helt lätt att konfigurera Qmail trots att det finns en relativt enkel tutorial på QmailRocks. Om man ska ha alla finesser som imap, pop, spamfilter, virusskydd och vpopmail så får man en diger lista med program som ska konfas och skötas. Detta har inte fungerat helt okey för ganska mycket spam kom fortfarande fram och min internetoperatör är inte helt förjust i att jag ibland skickar ut tusentals mail.

För att slippa mailhanteringen så beslöt jag mig för att testa Google Apps Standard Edition som är en gratis tjänst från Google där du kan koppla ett domännamn till ett flertal av deras tjänster. Den tjänst jag ville använda mig av var Gmail på så sätt att all min mail för alla mina domäner körs via deras mailtjänst.

Jag hade följande krav på tjänsten:
1) Webbmail för enkel hantering
2) Imap och pop för ytterligare valfrihet
3) smtp funktionalitet så att mina webbsidor (främst) kan skicka mail
4) Gmails spamfilter

På Googles sidor så kunde jag läsa mig till att dom hade stöd för punkterna 1, 2 och 4. Den återstående punkten, som jag var tvungen att testa, var smtp-funktionaliteten. Detta var den viktigaste punkten eftersom min största sajt HockeySnack kan behöva skicka iväg flera tusen mail vid vissa tillfällen. Sajten kräver ett väl fungerande mailsystem!

Tydligen så får varje användare max skicka 500 mail per dag då man använder gratisversionen. Skickar man fler mail så blir man avstängd i 24 timmar. Men detta kommer man runt genom att skapa upp fler användare. Så om du har 10 användare så kan du teoretiskt skicka 10 * 500 = 5000 mail/dag. För att klara denna begränsning så var jag tvungen att skapa logik i koden på min webbsajt som sköter mailhanteringen så att inte gränsvärdet överskrids på daglig basis. Den lösning som jag skapade har hittills fungerat förträffligt. Då php-mailprogrammet känner att det närmar sig begränsningen så väntar den med att skicka mail tills dess att det är grönt ljus.

Att flytta mail fysiskt från qmail till google apps utfördes genom att mappa upp båda servrarna via imap i Microsoft Outlook (Thunderbird borde gå lika bra) för att sedan bara flytta över mappar och brev med drag and drop. Hur man flyttar över en hel bunt med konton vet jag inte hur man gör utan då får man nog kontakta Google och köra betalvarianten av Google Apps.

Slutsats
Nu har jag kört mailen via Google Apps i några veckor och jag har verkligen inget att klaga på. Jag har haft noll nertid på tjänsten och inte fått ett enda spammail under hela tiden. Jag har gjort ett större utskick från min webbsajt till 5000 användare utan problem. Mina kompisar har flyttat all sin mail till samma tjänst med samma fina resultat så nu kan jag äntligen stänga ner min privata mailserver. Min rekommendation till folk med egna problematiska webbservrar är att det inte är några problem att köra Google Apps. Den enda invändningen man kan ha är att Google nu vet innehållet i mina mail, men för min del är inte det något problem. Att det hela är gratis gör ju inte heller saken sämre.

OBS För att kunna använda Google Apps så är det lättast om du äger din domän samt att du kan ändra DNS-inställningarna för denna. Du måste kunna ändra din MX-record till att peka mot en av googles servrar.

Monitoring Qmail in Freebsd

I needed a way to monitor qmail on my Freebsd server. In particular I wanted to shut down qmail if ”too many mails” were sent in a specified timeframe. I previously had a problem when one of my websites began to act as a spam proxy due to a ”bug” in php mail function that enables mail injection. I could not google a solution and had to write my own script.

The approach is fairly simple. The qmail-send log folder ( /var/log/qmail/qmail-send/) contains information about all recently sent emails. My script checks one of these log-files too see if it contains the current date. If it does, then Qmail has sent ”too many” emails and qmail should be shut down. Depending on which log file that is checked and how many records you have in each log file you could determine how many emails that are ”too many” for your qmail server. It is simply a matter of tuning the script by changing ”head -n NUMBER”.

Which action to take when qmail runs wild is up to you. On my server I notify myself by sending a sms to my phone and a simple mail. The script is as follows:

#!/usr/local/bin/bash
PATH=$PATH:/usr/local/bin

DATE=”`date +%Y-%m-%d`”
LOGFILE=”`ls -lt /var/log/qmail/qmail-send/@* | awk {‘print $9’} | head -n 1`”
MAILDATE=”`cat  $LOGFILE | tai64nlocal | head -c 10`”
QMAILUP=”`svstat /var/qmail/supervise/qmail-send/ | awk {‘print $2’}`”

if [ $QMAILUP == ”down” ]
then
  echo No need for checking – Qmail is not running
  exit
fi

echo This date: $DATE
echo Log date: $MAILDATE
if [ $DATE == $MAILDATE ]
then
  echo Equal dates – Mailing qmail-administrator
  /var/qmail/bin/qmail-inject -h < /scripts/smsqmail
  echo ”Qmail is stopped” | mailx -s ”Qmail alert” marcus@blahblah.com
  echo Shutting down qmail in 20 seconds
  sleep 20
  qmailctl stop
else
  echo Different dates – Everything seems to be okey
fi