I have used OS/2 Weasel for a mail server (for a week), Plan 9 upas for mail (for a week), Sendmail (egad!) and OpenSMTPD. I would recommend OpenSMTPD. Everyone has their own opinion of what is best and what they prefer, but the syntax for OpenSMTPD is easy to read. And you don't need a 1400 page "Bat book" for it (reference to the O'Reilly Sendmail book).
This is my current smtpd.conf for OpenSMTPD on OpenBSD. I think there is still a FreeBSD port.
Code:
queue compression
queue encryption key 44d1ee9dd2f0a54e4a6c21bd24b2c2d1
# pki setup
pki mail.myname.email certificate "/etc/ssl/mail.myname.email.crt"
pki mail.myname.email key "/etc/ssl/private/mail.myname.email.key"
pki mail.business.com certificate "/etc/ssl/mail.business.com.crt"
pki mail.business.com key "/etc/ssl/private/mail.business.com.key"
# tables setup
table aliases file:/etc/mail/aliases
table domains file:/etc/mail/domains
table users file:/etc/mail/users
table secrets file:/etc/mail/secrets
table blacklist-recipients file:/etc/mail/blacklist-recipients
# listen ports setup
listen on lo0
#listen on egress port 25
#listen on egress port 587 tls-require pki mail.myname.email auth <secrets>
listen on egress port 25 tls auth-optional <secrets> hostname mail.myname.email
listen on egress port 587 tls-require auth <secrets> hostname mail.myname.email
# allow local messages
#accept from local for local alias <aliases> deliver to maildir "/var/mail/%{user.username}/Inbox"
accept recipient ! <blacklist-recipients> from local for local alias <aliases> deliver to mbox
# allow virtual domains
accept from any recipient ! <blacklist-recipients> for domain <domains> \
virtual <users> deliver to maildir "/var/mail/%{user.username}/Inbox"
# allow outgoing mails
accept from local for any relay