Tiger Tips: How to enable postfix

dankogai@dan.co.jp

Prologue

Sometimes you want to have your own SMTP Server locally. Your Mac may be mobile and your ISP does not accept your outgoing mails on some IP addresses.

Before Tiger

Fortunately, every Mac OS X, "Server" or not, comes with an SMTP server. It used to be Sendmail before Mac OS X v10.3 (Panther as follows). From Panther postfix is bundled. It is not as easy to configure as BIND but it was faily easy. You may even use a utility called Postfix Enabler to do so.

Things are ALMOST the same with Mac OS X v10.4 ("Tiger" as follows). The big difference is how it is invoked. Instead of StartupItems, Tiger now uses what is called launch daemon to interface postfix.

In this document, you will learn how to enable postfix on Tiger. This document DOES NOT discuss how to manage it. Once up and running, postfix on Tiger is no different from an ordinarypostfix.

Disclaimer

I, Dan Kogai, makes no guarantee whatsoever on this document. Use at your own risk.

Before You Start

You need a root priviledge for further tasks. To gain the root privileged, launch Terminal and issue the command below.

sudo -s

Edit /etc/postfix/master.cf

First you edit /etc/postfix/master.cf, a master configuration file for postfix. Very fortunately we already have a working copy so all you have to do is copy it.

mv /etc/postfix/master.cf /etc/postfix/master.cf.dist
cp -p /etc/postfix/master.cf.defaultserver /etc/postfix/master.cf

Edit /System/Library/LaunchDaemons/org.isc.named.plist

Next, you edit /System/Library/LaunchDaemons/org.postfix.master.plist. Back it up as:
cp -p /System/Library/LaunchDaemons/org.postfix.master.plist /System/Library/LaunchDaemons/org.postfix.master.plist.dist

and here it goes.

#diff -u /System/Library/LaunchDaemons/org.postfix.master.plist.dist /System//Library/LaunchDaemons/org.postfix.master.plist
--- /System/Library/LaunchDaemons/org.postfix.master.plist.dist 2005-04-30 02:16:02.000000000 +0900
+++ /System//Library/LaunchDaemons/org.postfix.master.plist     2005-04-30 02:50:21.000000000 +0900
@@ -9,12 +9,12 @@
        <key>ProgramArguments</key>
        <array>
                <string>master</string>
-               <string>-e</string>
-               <string>60</string>
        </array>
        <key>QueueDirectories</key>
        <array>
                <string>/var/spool/postfix/maildrop</string>
        </array>
+        <key>OnDemand</key>
+        <false/>
 </dict>
 </plist>

There are two items that are different. The command parameters (from master -e 60 to simply master) and whether it is always run (add OnDemand false). Here is the whole.

<?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>org.postfix.master</string>
        <key>Program</key>
        <string>/usr/libexec/postfix/master</string>
        <key>ProgramArguments</key>
        <array>
                <string>master</string>
        </array>
        <key>QueueDirectories</key>
        <array>
                <string>/var/spool/postfix/maildrop</string>
        </array>
         <key>OnDemand</key>
        <false/>
</dict>
</plist>

Restart launchd via launchctl

Now let's use launchctl to start postfix

# launchctl stop org.postfix.master
# launchctl unload org.postfix.master.plist # for sure
# launchctl load org.postfix.master.plist   # for sure
# launchctl start org.postfix.master

Test

If it works well, you can send mail via command below:

date | mail -s test your@mail.address

log is at /var/log/mail.log so check it out in case of troubles.

Set up clients

Now all you need to do is add localhost for SMTP server in Mail.app and other use agents. Enjoy!