Local Mail Server for MacOS X Lion

Download the UW IMAP software from http://www.washington.edu/imap/

Connect to ftp://ftp.cac.washington.edu/imap

Login as guest

Copy the file imap-2007f.tar.gz to your Desktop

Expand the archive with

tar zxvf imap-2007f.tar.gz

Fix the makefile. Open imap-2007f/Makefile and comment out line 422 that reads:

        EXTRACFLAGS="$(EXTRACFLAGS) -DMAC_OSX_KLUDGE=1" \

Build the software with:

make oxp SSLDIR=/usr SSLCERTS=/System/Library/OpenSSL/certs

Create a place to store the server:

sudo mkdir -p /usr/local/libexec

Copy the server into place:

sudo mv ipopd/ipop3d /usr/local/libexec

Create a PAM authentication module:

sudo cp /etc/pam.d/ftpd /etc/pam.d/pop

Create a self-signed certificate:

sudo openssl req -new -x509 -nodes -out /System/Library/OpenSSL/certs/ipop3d.pem -keyout /System/Library/OpenSSL/certs/ipop3d.pem -days 3650

Create launchd config files

sudo touch /Library/LaunchDaemons/edu.washington.pop3.plist
sudo vi /Library/LaunchDaemons/edu.washington.pop3.plist

Enter the following content:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
 <key>Label</key>
 <string>edu.washington.pop3</string>
 <key>ProgramArguments</key>
 <array>
 <string>/usr/local/libexec/ipop3d</string>
 </array>
 <key>Sockets</key>
 <dict>
 <key>Listeners</key>
 <dict>
 <key>Bonjour</key>
 <false/>
 <key>SockServiceName</key>
 <string>pop3</string>
 <key>SockType</key>
 <string>stream</string>
 </dict>
 </dict>
 <key>inetdCompatibility</key>
 <dict>
 <key>Wait</key>
 <false/>
 </dict>
 </dict>
</plist>

Do the same for /Library/LaunchDaemons/edu.washington.pop3s.plist. changing Label to pop3s and SockServiceName to pop3s

Load the launchd config files:

sudo launchctl unload -w /Library/LaunchDaemons/edu.washington.pop3.plist
sudo launchctl load -w /Library/LaunchDaemons/edu.washington.pop3s.plist

Test your POP server:

openssl s_client -connect localhost:995
CONNECTED(00000003)
depth=0 <certificate stuff…>
emailAddress=<the e-mail address you used for the certificate>
verify error:num=18:self signed certificate
verify return:1
depth=0 <certificate stuff…>
emailAddress=<the e-mail address you used for the certificate>
verify return:1
---
Certificate chain
 0 s:<certificate stuff…>
   i:<certificate stuff…>
---
Server certificate
-----BEGIN CERTIFICATE-----
<certificate content in base64>
-----END CERTIFICATE-----
subject=<certificate stuff…>
emailAddress=<the e-mail address you used for the certificate>
issuer=<certificate stuff…>
emailAddress=<the e-mail address you used for the certificate>
---
No client certificate CA names sent
---
SSL handshake has read 1037 bytes and written 328 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: <something…>
    Session-ID-ctx: 
    Master-Key: <something else…>
    Key-Arg   : None
    Start Time: 1311510626
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
+OK POP3 localhost 2007f.104 server ready
user <your short user name>
+OK User name accepted, password please
pass <your login password>
+OK Mailbox open, 5 messages
quit
+OK Sayonara
read:errno=0

Edit the launchd config file for postfix:

sudo vi /System/Library/LaunchDaemons/org.postfix.master.plist 

Add the following:

<key>KeepAlive</key>
<true/>

Remove the following:

<string>-e</string>
<string>60</string>

Restart postfix master:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist 
sudo launchctl load -w /System/Library/LaunchDaemons/org.postfix.master.plist 

Test your SMTP server:

telnet <your local host> 25
Trying fec0:0:0:fea9::1...
Connected to <your local host>.
Escape character is '^]'.
220 <your local host> ESMTP Postfix
EHLO <your local host>
250-<your local host>
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-BINARYMIME
250 CHUNKING
^]
telnet> quit

Construct a test message:

From: <your short user name>@<your local host>
To:  <your short user name>@<your local host>
Subject: This is a local test
This is a local test of the mail system.

Send your test message:

cat test.txt | sendmail -t

Setup Apple Mail to connect to:

Incoming Mail Server: <your local host>

User Name: <your short user name>

Password: <your login password>

Outgoing Mail Server SMTP: <your local host>

Use only this server: checked

Advanced:

Port: 995

Use SSL checked

Authentication: Password

Check your e-mail in Apple Mail. Accept the certificate.