| 
	 
       Qmail + vpopmail + CourierIMAP + sqwebmail + MySQL for FreeBSD 4.5 Tutorial (v2.1.1) 
        Written by Matt Simerson and  last updated (ChangeLog)03/12/2002. 
			The original of this document can be found on Matt's server in Michigan or my other server in Atlanta. 
      This HOW-TO makes some assumptions. First it assumes that you are 
        a moderately competent system administrator. It also assumes you run FreeBSD
	and you track the -stable source tree. PAY ATTENTION to software versions as 
	listed below. Installation order IS important. These programs check and configure 
        themselves for use with each other. Build them in this order and your 
        experience will be better.  
			Support is NOT provided. I value my time and if you want some, expect to pay for it. There is a  mailing list available where I and a growing crowd of mail toaster owners hang out. You can even  browse the archives.  
			Contributions: If you have something to contribute to the toaster, express the idea on the mailing list. If you've built a toaster and are anxious to express your gratitude, feel free to purchase something from my wish list.
 Features: 
       
        SMTP Mail Server (+SMTP-AUTH, TLS (SSL), tarpitting) 
          Virtual Domain Hosting 
          Virtual Domain Users 
          AutoResponder 
          Mailing List 
          Web Based E-Mail (SSL, spell check, LDAP lookup) 
          Web Based Virtual Domain Administration 
          Spam Blocking 
          SMTP roaming via SMTP-AUTH, POP-AUTH, & IMAP-AUTH 
          POP3 (+SSL)  
          IMAP (+SSL) 
       
      You will install the following programs: 
       
        qmail-1.03.tar.gz : qmail! 
          mysql-3.23 : Database engine 
          ucspi-tcp-0.88.tar.gz : Inetd replacement 
          daemontools-0.70.tar.gz : Useful tools for
					managing daemons  
          qmailanalog-0.70.tar.gz: Tools for compiling 
          qmail logs into useful info. 
          ezmlm-idx-0.40.tar.gz: Mailing list management 
          Apache + ssl, php, & perl: Secure HTTP server 
          OpenLDAP: LDAP client & server 
          vpopmail : Virtual Domain module 
          autorespond : Auto Responder 
          gdbm : Database routines 
          ispell : Spell checking for web mail 
          qmailadmin : Web Control Panel Interface 
          sqwebmail: Web based email 
          courier-IMAP: IMAP & POP3 servers 
       
      Install from the FreeBSD Packages/Ports Collection: 
      
	pkg_add -r ispell 
	pkg_add -r gdbm 
	
	pkg_add -r setquota 
	pkg_add -r autoconf 
	pkg_add -r automake 
	pkg_add -r expect 
   pkg_add -r gnupg 
   pkg_add -r maildrop 
	cd /usr/ports/mail/autorespond; make install clean 
	cd /usr/ports/mail/qmail; make enable-qmail clean 
	cd /usr/ports/mail/qmailanalog; make install clean  
       
      Make Users & Groups for Vpopmail 
       
        pw groupadd -n vchkpw -g 89 
          pw useradd -n vpopmail -u 89 -g 89 -c Vpopmail-Master \ 
          -d /usr/local/vpopmail -s /sbin/nologin 
       
      Install Qmail (with a few hacks) 
       
     mkdir -p /usr/local/src/mail; cd /usr/local/src/mail 
	  cp /usr/ports/distfiles/qmail-1.03.tar.gz .  
	  fetch http://matt.simerson.net/computing/mail/toaster/qmail-1.03-toaster-2.0.patch 
	  tar -xzf qmail-1.03.tar.gz 
	  cd qmail-1.03 
	  patch -p1 < ../qmail-1.03-toaster-2.0.patch 
     make setup 
     make cert 
	  echo "255" > /var/qmail/control/concurrencyremote 
    chmod 644 /var/qmail/control/concurrencyremote 
		echo "domain.com" > /var/qmail/control/me 
	  echo "50" > /var/qmail/control/tarpitcount 
	  echo "5" > /var/qmail/control/tarpitdelay 
     
      Make Directories for Special Modules 
       
        mkdir -p /var/qmail/supervise; cd /var/qmail/supervise 
          mkdir -p smtp/log send/log 
          chmod +t smtp send 
          mkdir /service 
       
      Edit config files 
       
        mkdir -p ~vpopmail/etc 
          fetch -o ~vpopmail/etc/tcp.smtp \ 
          http://matt.simerson.net/computing/mail/toaster/tcp_smtp.txt 
        echo user@domain.com > /var/qmail/alias/.qmail-root 
          echo user@domain.com > /var/qmail/alias/.qmail-postmaster 
          echo user@domain.com > /var/qmail/alias/.qmail-mailer-daemon 
        /var/qmail/bin/maildirmake /usr/share/skel/Maildir ( necessary if using /etc/passwd accounts) 
       
      Install Apache www server + mod_php + mod_ssl + mod_perl 
       
        Apache build instructions 
        
      UCSPI-TCP: UNIX Client-Server Program Interface for TCP 
		The patch adds MySQL support and patches rblsmtpd to support the RBL's new format. 
       
        cd /usr/local/src/mail  
          fetch http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz 
          tar -xzf ucspi-tcp-0.88.tar.gz 
      	  fetch http://matt.simerson.net/computing/mail/toaster/ucspi-tcp-0.88-mysql+rss.patch 
          cd ucspi-tcp-0.88 
	       patch -p1 < ../ucspi-tcp-0.88-mysql+rss.patch 
          make setup check 
       
Create the configuration file for tcpserver 
      
	  # vi /var/qmail/control/sql 
	  server	db.domain.com 
	  port	3306 
	  database	vpopmail 
	  table	relay 
	  user	vpopmail 
	  pass	secret 
	  time	1800 
       
       Daemon Tools (Useful tools) 
       
        cd /usr/ports/sysutils/daemontools 
          make install clean 
       
      Install Ezmlm & Ezmlm-idx (Mailing List) 
       
        cd /usr/ports/mail/ezmlm-idx 
          make -DWITH_MYSQL install 
          cp work/ezmlm-0.53/ezmlmrc /usr/local/bin 
          make clean 
          cd /usr/local/etc/ezmlm 
          cp ezmlmglrc.sample ezmlmglrc 
          cp ezmlmrc.sample ezmlmrc 
          cp ezmlmsubrc.sample ezmlmsubrc 
       
      OpenLDAP 
       
          cd /usr/ports/net/openldap 
          make install clean 
       
      Vpopmail (Virtual Domain & POP) 
       
        cd /usr/local/src/mail 
	fetch http://www.inter7.com/vpopmail/vpopmail-5.2.tar.gz 
        tar xzf vpopmail-5.2.tar.gz; cd vpopmail-5.2 
        ./configure  --enable-mysql=y --enable-default-domain=simerson.net \ 
        --enable-roaming-users=y --enable-defaultquota=100000000S,10000C \ 
        --enable-learn-passwords=y --enable-mysql-replication=y \ 
        --enable-logging=p --enable-mysql-logging=y 
        vi vmysql.h 
	 make install
  
          # crontab -e  
          9-59,10 * * * * /usr/local/vpopmail/bin/clearopensmtp 2>&1 > /dev/null 
       
       QmailAdmin (Web Control Interface) 
       
        cd /usr/local/src/mail 
          fetch http://www.inter7.com/qmailadmin/qmailadmin-1.0.2.tar.gz 
          tar -xzf qmailadmin-1.0.2.tar.gz; cd qmailadmin-1.0.2 
          ./configure --enable-cgibindir=/usr/local/www/cgi-bin.mail 
          make install-strip
  
          If you set up domains under /etc/passwd users you MUST do this: 
          chown root /usr/local/www/cgi-bin.mail/qmailadmin 
       
      Sqwebmail (Web Based Email) 
       
        cd /usr/ports/mail/sqwebmail 
        make -DWITH_VCHKPW -DWITH_ISPELL install 
        make clean 
         
	
        # crontab -e  
        40 * * * * /usr/local/share/sqwebmail/cleancache.pl 2>&1 > 
        /dev/null 
      chmod -R 755 /usr/local/www/data/webmail 
       cd /usr/local/share/sqwebmail 
       cp authdaemonrc.dist authdaemonrc 
       cp ldapaddressbook.dist ldapaddressbook 
		 fetch -o /usr/local/etc/rc.d/sqwebmail.sh http://matt.simerson.net/computing/qmail/toaster/sqwebmail.txt 
		 chmod 755 /usr/local/etc/rc.d/sqwebmail.sh 
       /usr/local/etc/rc.d/sqwebmail.sh start 
       
      Courier-IMAP 
       
	cd /usr/local/src/mail 
        fetch http://download.sourceforge.net/courier/courier-imap-1.4.2.tar.gz 
	   fetch http://matt.simerson.net/computing/mail/toaster/courier-imap-1.4.2-opensmtp.txt 
      tar zxvf courier-imap-1.4.2.tar.gz; cd courier-imap-1.4.2/authlib 
   	patch -p1 < ../../courier-imap-1.4.2-opensmtp.txt; cd .. 
      ./configure --prefix=/usr/local --exec-prefix=/usr/local --without-authldap \ 
        --without-authshadow --with-authvchkpw --without-authcram \ 
        --sysconfdir=/usr/local/etc/courier-imap \ 
        --datadir=/usr/local/share/courier-imap \ 
        --libexecdir=/usr/local/libexec/courier-imap \ 
        --enable-workarounds-for-imap-client-bugs \ 
        --disable-root-check --without-authdaemon 
	make install
  
	cd /usr/local/etc/courier-imap 
	cp pop3d.cnf.dist pop3d.cnf 
	cp imapd.cnf.dist imapd.cnf 
	vi pop3d.cnf imapd.cnf 
	cp pop3d.dist pop3d 
	cp imapd.dist imapd 
	cp pop3d-ssl.dist pop3d-ssl 
	cp imapd-ssl.dist imapd-ssl 
	vi imapd pop3d (edit authmodules & add QUOTA to the IMAP_CAPABILITIES in imapd) 
	
	cp quotawarnmsg.example quotawarnmsg; vi quotawarnmsg 
	cd /usr/local/share/courier-imap; ./mkimapdcert; ./mkpop3dcert 
        
      At this point in time, we'll start to add, remove and edit configuration 
        files. We will also accomplish a number of other fun things. 
      Edit DNS zone file - You will need to get the dns properly configured for
	each domain you want to collect mail for. If your dns records are incorrect
	you will likely have problems with mail routing. For some helpful DNS links
	have a look at my dns links. 
      
      Adding Mail Domains 
       
	mysql -u root -p 
	CREATE DATABASE vpopmail; 
	GRANT ALL PRIVILEGES ON vpopmail.* TO vpopmail@"hostname" IDENTIFIED BY 'password'; 
	quit; 
	mysql -u vpopmail -h db.domain.com -p (get this working before you continue) 
        # ~vpopmail/bin/vadddomain test.com [password] 
      vadddomain will modify the following qmail files (default locations used): 
        /var/qmail/control/locals, rcpthosts, virtualdomains 
          /var/qmail/control/morercpthosts (if rcpthosts > than 50 lines) 
          /var/qmail/control/virtualdomains 
          /var/qmail/users/assign, cdb 
       It will also create a domains directory 
        ~vpopmail/domains/domain.com 
          ~vpopmail/domains/domain.com/postmaster/Maildir 
        
      Now it's time to get qmail up and running. We're going to create 
        a bunch of startup files that the daemontools package will monitor for 
        us. 
      Supervise/Svscan Startup 
     
      cd /var/qmail/supervise 
        fetch -o smtp/run \ 
           http://matt.simerson.net/computing/mail/toaster/smtp_run.txt 
        chmod 751 smtp/run 
        touch smtp/log/run smtp/log/down 
        chmod 751 smtp/log/* 
        fetch -o send/run \ 
           http://matt.simerson.net/computing/mail/toaster/send_run.txt 
        chmod 751 send/run 
        touch send/log/run send/log/down 
        chmod 751 send/log/run 
        fetch -o /var/qmail/rc \ 
           http://matt.simerson.net/computing/mail/toaster/qmail_rc.txt 
	     chmod 751 /var/qmail/rc 
        vi smtp/run send/run /var/qmail/rc 
	     rm /usr/local/etc/rc.d/qmail.sh 
        fetch -o /usr/local/sbin/qmail \ 
           http://matt.simerson.net/computing/mail/toaster/qmail.txt 
	     chmod 751 /usr/local/sbin/qmail 
        fetch -o /usr/local/etc/rc.d/services.sh \ 
           http://matt.simerson.net/computing/mail/toaster/services.txt 
        chmod 751 /usr/local/etc/rc.d/services.sh 
        ln -s /usr/local/etc/rc.d/services.sh /usr/local/sbin/services 
        rehash; qmail cdb  
      
      Fire up qmail 
       
        ln -s /var/qmail/supervise/smtp /service/ 
        ln -s /var/qmail/supervise/send /service/ 
        services start 
       
      What you should see in the process list: 
        # ps au 
       
        USER PID TT STAT STARTED TIME COMMAND 
          root 33322 p1 S 11:14PM 0:00.02 svscan 
          root 33323 p1 I 11:14PM 0:00.01 supervise send 
          root 33324 p1 I 11:14PM 0:00.01 supervise log 
          root 33325 p1 I 11:14PM 0:00.01 supervise smtp 
          root 33326 p1 I 11:14PM 0:00.01 supervise log 
        
      OK, now you're ready to have some real fun. Point a web browser at http://mail.domain.com/cgi-bin/qmailadmin. 
        Log in with postmaster, test.com, and the test password. Add a user named "user". Time to send some email: 
       
        # mail user@test.com 
          Subject: test 
          test 
          . 
          # ls ~vpopmail/domains/test.com/user/Maildir/* 
       
      You should see a file in the new directory. If not, tail /var/log/maillog and figure out why.  
         
        Now we want to get our POP3-SSL and IMAP servers working. Install the 
        startup scripts in /usr/local/etc/rc.d: 
       
	  cp /usr/local/libexec/courier-imap/imapd.rc /usr/local/etc/rc.d/imapd.sh 
	  cp /usr/local/libexec/courier-imap/pop3d.rc /usr/local/etc/rc.d/pop3d.sh 
	  cp /usr/local/libexec/courier-imap/imapd-ssl.rc /usr/local/etc/rc.d/imapd-ssl.sh 
	  cp /usr/local/libexec/courier-imap/pop3d-ssl.rc /usr/local/etc/rc.d/pop3d-ssl.sh 
        
      Once installed we'll make symbolic links to the scripts for easy administration: 
      
        ln -s /usr/local/etc/rc.d/imapd.sh /usr/local/sbin/imap 
          ln -s /usr/local/etc/rc.d/pop3d.sh /usr/local/sbin/pop3 
          ln -s /usr/local/etc/rc.d/imapd-ssl.sh /usr/local/sbin/imapssl 
          ln -s /usr/local/etc/rc.d/pop3d-ssl.sh /usr/local/sbin/pop3ssl 
       
      Now we can either reboot or start the servers manually: 
       
        rehash 
          imap start 
          pop3 start 
          imapssl start 
          pop3ssl start 
       
      Users can now get their email at the following addresses: 
       
        pop3://mail.domain.com 
          imap://mail.domain.com 
          imaps://mail.domain.com 
          http://mail.domain.com/cgi-bin/sqwebmail (redirects to https) 
          https://mail.domain.com/cgi-bin/sqwebmail 
       
      Domain administrators can add/edit/delete users, mailing lists, autoresponders, 
        mail forwarding, and aliases by logging into the qmailadmin interface: 
       
         http://mail.domain.com/cgi-bin/qmailadmin 
           https://mail.domain.com/cgi-bin/qmailadmin 
       
      SYSTEM ADMIN stuff. 
       
      maildomain perl script - Front end to nearly everything you can do with the vpopmail programs. 
        
      Convert Multilog date stamps to human readable date stamps 
       
        # tai64nlocal < logfile > qmaillog.tmp 
       
      Statistics about your mail queue: 
       
        Feed your qmail-send output through matchup and pipe it through a stats 
          processor: 
          # /usr/local/qmailanalog/bin/matchup < /var/log/mail/send/current 
          | /usr/local/qmailanalog/bin/z* 
          where z* is one of the following 
          # zddist, zdeferrals, zfailures, zoverall, zrecipients, zrhosts, zrxdelay, 
          zsenders, zsuccesses, zsuids 
       
      Modify the HTML interface: 
       
        Sqwebmail: html temples live in /usr/local/share/sqwebmail/html/en-us/ 
          qmailadmin: html templates live in /usr/local/share/qmailadmin/html/ 
        
      Man pages: 
       
        vpopmail: http://mail.domain.com/vpopmail/ 
          maildrop: http://mail.domain.com/maildrop 
        
		perl -MCPAN -e 'install Date::Parse' 
     |