Saturday, March 7, 2009

Configure Postfix, Postfixadmin, Dovecot On Debian & Ubuntu

Hi All..

Download Postfixadmin , put that webroot configure it.

vim /var/www/postfixadmin/

$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://yourdomain.tld/postfixadmin';

$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'SecretPassword!';
$CONF['database_name'] = 'postfix';

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';

Take a look at the rest of that file if you need to make more tweaks.

You can quickly change the default domain to your own:

replace "change-this-to-your.domain.tld" "" -- /usr/share/postfixadmin/
shell> mysql -u root -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* to 'postfixadmin'@'localhost' identified by 'SecretPassword!';
mysql> flush privileges;
mysql> \q

Then browse to or http://yourip/postfixadmin/. It will prompt you to run Setup. Make sure the Setup Checker says ‘OK’ for everything.

Remove the setup.php as it recommends.

Then browse to You should get prompted. Login with the admin email you registered earlier in the setup page.
From here you can add domains, mailboxes, etc. But Postfix won’t see these yet. We need to install Postfix, and configure it.

Install Postfix, SASL2 with MySQL support

apt-get install postfix-mysql postfix-tls libsasl2-modules-sql libsasl2-modules

Add the following to /etc/postfix/

virtual_alias_maps = mysql:/etc/postfix/
virtual_gid_maps = static:106
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/
virtual_mailbox_maps = mysql:/etc/postfix/
virtual_minimum_uid = 106
virtual_transport = virtual
virtual_uid_maps = static:106

# grep postfix /etc/passwd
--> uid: 102; gid: 105

Create the following files in /etc/postfix/:

user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'

user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

If you want to be be able to relay mail through your server with SMTP AUTH, setup the following in /etc/postfix/sasl/smtpd.conf:

pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: select password from mailbox where username ='%u@%r'

Create the directory structure, including a directory for the first domain. You’ll also want to go into PostfixAdmin and create a ‘test’ account for the to match this.

mkdir -p /home/vmail/
chmod -R 770 /home/vmail
chown -R postfix:postfix /home/vmail/

Install Dovecot with MySQL support

apt-get install dovecot-common dovecot-imapd dovecot-pop3d

Configure the Dovecot/MySQL setup in /etc/dovecot/dovecot-mysql.conf using these settings:

driver = mysql
connect = dbname=postfix user=postfixadmin host=localhost password=SecretPassword!
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 106 AS uid, 106 AS gid FROM mailbox WHERE username = '%u'

Then configure Dovecot to use MySQL by setting these options in /etc/dovecot/dovecot.conf:

protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n
mail_access_groups = mail
first_valid_uid = 106
first_valid_gid = 106
protocol imap {

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
auth default {
mechanisms = digest-md5 plain
passdb sql {
args = /etc/dovecot/dovecot-mysql.conf
userdb sql {
args = /etc/dovecot/dovecot-mysql.conf
user = root

Restart Dovecot and Postfix and test it all out.

At the end of it, you should be able to add new domains, mailboxes and aliases using PostfixAdmin and have it all work properly, including SMTP authentication. Note that you don’t need saslauthd for SMTP authentication to work.

Enjoy.. :-)


dclausen said...

Thanks for the great guide. I had an issue getting SMTP AUTH working and had to add this to /etc/postfix/

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =

raffaele said...

I followed your guide
the services dovecot and postfix are ok because restarting them, there aren't problems . But wuen i want enter into the postfix login 1st login, appear the following message :
Connect: Access denied for user 'postfixadmin'@'localhost' (using password: YES)
What I have to check ?
Please an help

Dave Bit Networks said...

I also have the same issue as raffaele...

everytime i querry - postmap -q mysql:/etc/postfix/

Am getting this,...

postmap: warning: connect to mysql server Access denied for user 'postfix'@'localhost' (using password: YES)

Please help :(

freeflyer said...

Well obviously the username is not right on the files.

you can put postfixadmin create a read-only user

freeflyer said...

OR create

Ivan Renato Gomes Neves said...

thanks a lot.
I follow step by step the instrutions, but when i login in the postfixadmin it show me this error:
"Invalid query: Table 'postfix.admin' doesn't exist"

Please help me