There is a new revision of this tutorial available for Ubuntu 13.10 (Saucy Salamander).

Virtual Users And Domains With Postfix, Courier, MySQL And SquirrelMail (Ubuntu 14.04LTS)

This tutorial is Copyright (c) 2014 by Falko Timme & Srijan Kishore. It is derived from a tutorial from Christoph Haas which you can find at You are free to use this tutorial under the Creative Commons license 2.5 or any later version.

This document describes how to install a Postfix mail server that is based on virtual users and domains, i.e. users and domains that are in a MySQL database. I'll also demonstrate the installation and configuration of Courier (Courier-POP3, Courier-IMAP), so that Courier can authenticate against the same MySQL database Postfix uses.

The resulting Postfix server is capable of SMTP-AUTH and TLS and quota (quota is not built into Postfix by default, I'll show how to patch your Postfix appropriately). Passwords are stored in encrypted form in the database (most documents I found were dealing with plain text passwords which is a security risk). In addition to that, this tutorial covers the installation of Amavisd, SpamAssassin and ClamAV so that emails will be scanned for spam and viruses. I will also show how to install SquirrelMail as a webmail interface so that users can read and send emails and change their passwords.

The advantage of such a "virtual" setup (virtual users and domains in a MySQL database) is that it is far more performant than a setup that is based on "real" system users. With this virtual setup your mail server can handle thousands of domains and users. Besides, it is easier to administrate because you only have to deal with the MySQL database when you add new users/domains or edit existing ones. No more postmap commands to create db files, no more reloading of Postfix, etc. For the administration of the MySQL database you can use web based tools like phpMyAdmin which will also be installed in this howto. The third advantage is that users have an email address as user name (instead of a user name + an email address) which is easier to understand and keep in mind.

This howto is meant as a practical guide; it does not cover the theoretical backgrounds. They are treated in a lot of other documents in the web.

This document comes without warranty of any kind! I want to say that this is not the only way of setting up such a system. There are many ways of achieving this goal but this is the way I take. I do not issue any guarantee that this will work for you!


1 Preliminary Note

This tutorial is based on Ubuntu 14.04 Server (Trusty Tahr), so you should set up a basic Ubuntu 14.04 server installation before you continue with this tutorial. The system should have a static IP address. I use as my IP address in this tutorial and as the hostname.

Make sure that you are logged in as root (type in

sudo su

to become root), because we must run all the steps from this tutorial as root user.

It is very important that you make /bin/sh a symlink to /bin/bash...

dpkg-reconfigure dash

Use dash as the default system shell (/bin/sh)? <-- No

... and that you disable AppArmor, if you are getting  apparmor: unrecognized service then remove it from update-rc.d

service apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils


2 Install Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

To install Postfix, Courier, Saslauthd, MySQL, and phpMyAdmin, we simply run

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

You will be asked a few questions:

New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
Create directories for web-based administration? <-- No
General type of mail configuration: <-- Internet Site
System mail name: <--
SSL certificate required <-- Ok
Web server to reconfigure automatically: <-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- No


3 Apply The Quota Patch To Postfix

We have to get the Postfix sources, patch it with the quota patch, build new Postfix .deb packages and install those .deb packages:

apt-get build-dep postfix

Some time you can get an error as follows:-

[email protected]:~# apt-get build-dep postfix
Reading package lists... Done
Building dependency tree      
Reading state information... Done
E: You must put some 'source' URIs in your sources.list
[email protected]:~#

You can correct it as follows, by adding the source repositories:

vi /etc/apt/sources.list

Make the entry as in my case is

deb trusty main restricted universe
deb trusty-updates main restricted universe
deb trusty-security main restricted universe multiverse
deb trusty partner

deb-src trusty main restricted universe
deb-src trusty-updates main restricted universe
deb-src trusty-security main restricted universe multiverse
deb-src trusty partner


apt-get update
apt-get build-dep postfix

cd /usr/src
apt-get source postfix

(Make sure you use the correct Postfix version in the following commands. I have Postfix 2.11.0 installed. You can find out your Postfix version by running

postconf -d | grep mail_version

The output should look like this:

[email protected]:/usr/src# postconf -d | grep mail_version
mail_version = 2.11.0
milter_macro_v = $mail_name $mail_version
[email protected]:/usr/src#

cd postfix-2.11.0
patch -p1 < ../postfix-vda-v13-2.10.0.patch

Next open debian/rules and change DEB_BUILD_HARDENING from 1 to 0:

vi debian/rules


If you don't do this, your build will fail with the following error messages:

maildir.c: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: *** [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.11.0/src/virtual'
make[1]: *** [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.11.0'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
[email protected]:/usr/src/postfix-2.11.0#

Now we can build the new Postfix .deb packages:


Now we go one directory up, that's where the new .deb packages have been created:

cd ..

The command

ls -l

shows you the available packages:

[email protected]:/usr/src# ls -l
total 6824
drwxr-xr-x 18 root root    4096 Apr 30 04:28 postfix-2.11.0
-rw-r--r--  1 root root   46756 Apr 30 04:28 postfix-cdb_2.11.0-1_amd64.deb
-rw-r--r--  1 root root  142842 Apr 30 04:28 postfix-dev_2.11.0-1_all.deb
-rw-r--r--  1 root root  851842 Apr 30 04:28 postfix-doc_2.11.0-1_all.deb
-rw-r--r--  1 root root   53898 Apr 30 04:28 postfix-ldap_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   48500 Apr 30 04:28 postfix-mysql_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   48610 Apr 30 04:28 postfix-pcre_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   48324 Apr 30 04:28 postfix-pgsql_2.11.0-1_amd64.deb
-rw-r--r--  1 root root   55701 Jun  7  2013 postfix-vda-v13-2.10.0.patch
-rw-r--r--  1 root root  267855 Apr 30 04:27 postfix_2.11.0-1.diff.gz
-rw-r--r--  1 root root    1522 Apr 30 04:27 postfix_2.11.0-1.dsc
-rw-r--r--  1 root root    3885 Apr 30 04:28 postfix_2.11.0-1_amd64.changes
-rw-r--r--  1 root root 1329238 Apr 30 04:28 postfix_2.11.0-1_amd64.deb
-rw-r--r--  1 root root 4034741 Feb 12 01:38 postfix_2.11.0.orig.tar.gz
[email protected]:/usr/src# 

Pick the postfix and postfix-mysql packages and install them like this:

dpkg -i postfix_2.11.0-1_amd64.deb postfix-mysql_2.11.0-1_amd64.deb


4 Create The MySQL Database For Postfix/Courier

Now we create a database called mail:

mysqladmin -u root -p create mail

You will be asked for this question:

Enter Password: <-- yourrootsqlpassword

Next, we go to the MySQL shell:

mysql -u root -p

On the MySQL shell, we create the user mail_admin with the passwort mail_admin_password (replace it with your own password) who has SELECT,INSERT,UPDATE,DELETE privileges on the mail database. This user will be used by Postfix and Courier to connect to the mail database:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';

Still on the MySQL shell, we create the tables needed by Postfix and Courier:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )

email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',

CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)


As you may have noticed, with the quit; command we have left the MySQL shell and are back on the Linux shell.

The domains table will store each virtual domain that Postfix should receive emails for (e.g.


The forwardings table is for aliasing one email address to another, e.g. forward emails for [email protected] to [email protected].

source destination
[email protected] [email protected]

The users table stores all virtual users (i.e. email addresses, because the email address and user name is the same) and passwords (in encrypted form!) and a quota value for each mail box (in this example the default value is 10485760 bytes which means 10MB).

email password quota
[email protected] No9.E4skNvGa. ("secret" in encrypted form) 10485760

The transport table is optional, it is for advanced users. It allows to forward mails for single users, whole domains or all mails to another server. For example,

domain transport smtp:[]

would forward all emails for via the smtp protocol to the server with the IP address (the square brackets [] mean "do not make a lookup of the MX DNS record" (which makes sense for IP addresses...). If you use a fully qualified domain name (FQDN) instead you would not use the square brackets.).

BTW, (I'm assuming that the IP address of your mail server system is you can access phpMyAdmin over in a browser and log in as mail_admin. Then you can have a look at the database. Later on you can use phpMyAdmin to administrate your mail server.


Share this page:

40 Comment(s)

Add comment


From: Milaensis

By following this guide to the letter SSL / TLS does not work! No answers on any port. Do you have a solution?

From: admin

Check postfix file to ensure that there is no # in front of the smtps and Submission lines.


It would be helpful if you added in how to enable phpmyadmin so that you can access it in a web browser as you have shown.

BTW, (I'm assuming that the IP address of your mail server system is you can access phpMyAdmin over in a browser and log in as mail_admin. Then you can have a look at the database. Later on you can use phpMyAdmin to administrate your mail server. 

 Maybe add these lines somewhere.

ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf

a2enconf phpmyadmin
service apache2 reload

Thank for the tutorial.


I am having serious issues. I have installed 3 times, followed to the letter your guide.

First AWEESOME guide. I am scratching my head on this one. I am trying to set up an email server and know Exchange very very well. BUT do not want to give MS any of my hard earned money. I also have quite extensive background (not used for a while) in Linux and Ubuntu

I am using 14.04

whenever an IMAP client whether it be MS Live Mail, other IMAP, or Squirrelmail, I am not making a connection


I have sent numerous test messages to the users that were created. These were sent from mailx, Gmail, and Yahoo.


I don't even see where the others hit the system from GMail, or Yahoo.


But on the one sent from mailx, it appears that it was delivered, but then dropped ?????

log entries:

Jun  5 19:30:42 DS-JMW-UMail postfix/pickup[30580]: 24394E349E: uid=1000 from=<[email protected]>
Jun  5 19:30:42 DS-JMW-UMail postfix/cleanup[607]: 24394E349E: message-id=<[email protected]>
Jun  5 19:30:42 DS-JMW-UMail postfix/qmgr[30581]: 24394E349E: from=<[email protected]>, size=358, nrcpt=1 (queue active)
Jun  5 19:30:48 DS-JMW-UMail postfix/smtpd[616]: connect from localhost[]
Jun  5 19:30:48 DS-JMW-UMail postfix/smtpd[616]: A9FCCE34A1: client=localhost[]
Jun  5 19:30:48 DS-JMW-UMail postfix/cleanup[607]: A9FCCE34A1: message-id=<[email protected]>
Jun  5 19:30:48 DS-JMW-UMail postfix/qmgr[30581]: A9FCCE34A1: from=<[email protected]>, size=802, nrcpt=1 (queue active)
Jun  5 19:30:48 DS-JMW-UMail amavis[557]: (00557-01) Passed CLEAN {RelayedOpenRelay}, <[email protected]> -> <[email protected]>, Message-ID: <[email protected]>, mail_id: ifjtmyWInhAp, Hits: 2.425, size: 358, queued_as: A9FCCE34A1, 6495 ms
Jun  5 19:30:48 DS-JMW-UMail postfix/smtp[611]: 24394E349E: to=<[email protected]>, relay=[]:10024, delay=6.8, delays=0.3/0.03/0.07/6.5, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[]:10025): 250 2.0.0 Ok: queued as A9FCCE34A1)
Jun  5 19:30:48 DS-JMW-UMail postfix/qmgr[30581]: 24394E349E: removed
Jun  5 19:30:48 DS-JMW-UMail postfix/local[619]: A9FCCE34A1: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=0.19, delays=0.08/0.04/0/0.07, dsn=2.0.0, status=sent (delivered to mailbox)
Jun  5 19:30:48 DS-JMW-UMail postfix/qmgr[30581]: A9FCCE34A1: removed


Now, when I use the clients to access IMAP, I get the following errors:

Jun  5 19:30:49 DS-JMW-UMail imapd: Connection, ip=[::1]
Jun  5 19:30:49 DS-JMW-UMail imapd: chdir wjw003/wjw003/: No such file or directory
Jun  5 19:30:49 DS-JMW-UMail imapd: wjw003: No such file or directory


Please help me for I have not much hair left to lose...


Thank you in advance!



From: Anonymous

I have seen this too!

Apparently the directories, in /home/vmail/domain.tld aren't created when the mail arrives.

The reason might be an permission issue, not sure though, since I don't have any hair to lose any-more. I gave up on it.

I could use a sponge though, to polish the great planes.

Every time there is a DNS or mail or kernel update with Ubuntu, it breaks my system in bits and pieces. Sick of running around and fixing it!

Although, using the tut here to the letter too (several times), on a fresh install, it didn't work. It goes from authentication failure, to directory not found. Others, claim that saslauth doesn't know how to handle 64 bit OS's. Dunno!

From: HogensHero

I know this is a stupid question but are you using a fully qualified domain name or are you using domain.tld?

Apparently the directories, in /home/vmail/domain.tld aren't created when the mail arrives.

If you are using domain.tld you need to use your actual domain name.  I was able to get this up and running on 14.04 in 20 minutes using this tutorial and my domain name.

From: Anonymous

First of all, thank you!   Thank you for providing the only bl**dy "how to" for SSL-enabled imap/smtp/postfix on the web that actually works!! :D   I owe you a pint!

I have two questions/suggestions for a possible update:

  1. How to tweak the configuration to force the use of SSL for imap/smtp.
  2. Why is samba (smb) needed? Seems like an odd dependency which I'd like to remove.

Since installing the dependences for that libpam-smbpass package, I get the following error every time I use 'sudo' :

no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory

From: Chris

You are the MAN!!! After following that long process... which by the way is the only one I could find which allowed for multiple domains... I went to my_first_domain/squirrelmail and it worked!!! Thank you so much!!! One question if you get to it... in the beginning I had to disable apparmor which is a security service. Why does it have to be disabled, can it be re-enabled now? Was it just for setup? If not, is there a way to fix permissions UID's GID's so that it can be re-enabled? Thanks again!

From: w2walter

Hi there, really thank you for the tutorial it was great and detailed and I could set up for the first time all of that!

The only thing is that I lunched an update apt-get upgrade yesterday 18th april, and it asked me to update postfix.

After that postfix restart and I receive an error related to quota patch. I tried to search if there is a new version of the patch but it seems not. I can't understand if this error means that quota will not work or something else will be broken

postconf: warning: /etc/postfix/ unused parameter: virtual_overquota_bounce=yespostconf: warning: /etc/postfix/ unused parameter: virtual_maildir_limit_message="The user you are trying to reach is over quota."postconf: warning: /etc/postfix/ unused parameter: virtual_maildir_extended=yespostconf: warning: /etc/postfix/ unused parameter: virtual_mailbox_limit_override=yes

Thank you again, Im a web developer and not so good as sysadmin. I love linux but it's really hard to know all the secret about programs.  it's years that I use plesk on my projects to fast deploy a server and configure it, but when comes time to patch or control spam plesk is a mess and most of the time I have to destroy and rebuild my cloud server. I want a solution that I can update only with apt-get upgrade and stay safe.

If you have any other suggestion it will be appreciated.


From: Mark Rhyne

I followed this guide for Ubuntu 14.10. but squrrel mail would not send or recieve.

I had to add an A record for server1 to my domain:

server1     A  TTL 3600 IP ???.???.???.???

and made some changes to the postfix config file.


There were some problems as I had to change the postfix config to recieve email externally.

# See /usr/share/postfix/ for a commented, more complete version# Debian specific:  Specifying a file name will cause the first# line of that file to be used as the name.  The Debian default# is /etc/mailname.#myorigin = /etc/mailnamesmtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)biff = no# appending .domain is the MUA's job.append_dot_mydomain = no# Uncomment the next line to generate "delayed mail" warnings#delay_warning_time = 4hreadme_directory = /usr/share/doc/postfix# TLS parameterssmtpd_tls_cert_file = /etc/postfix/smtpd.certsmtpd_tls_key_file = /etc/postfix/smtpd.keysmtpd_use_tls = yessmtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scachesmtp_tls_session_cache_database = btree:${data_directory}/smtp_scache# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for# information on enabling SSL in the smtp client.# smtpd_relay_restrictions = myhostname = server1.example.comalias_maps = hash:/etc/aliasesalias_database = hash:/etc/aliasesmyorigin = /etc/mailnamemydestination =, localhost, localhost.localdomain# mynetworks = = 0recipient_delimiter = +inet_protocols = allhtml_directory = /usr/share/doc/postfix/htmlvirtual_alias_domains = virtual_alias_maps = proxy:mysql:/etc/postfix/, mysql:/etc/postfix/mysql-virtual_email2email.cfvirtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cfvirtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cfvirtual_mailbox_base = /home/vmailvirtual_uid_maps = static:5000virtual_gid_maps = static:5000smtpd_sasl_auth_enable = yesbroken_sasl_auth_clients = yessmtpd_sasl_authenticated_header = yessmtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationtransport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cfvirtual_maildir_extended = yesvirtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cfvirtual_mailbox_limit_override = yesvirtual_maildir_limit_message = "The user you are trying to reach is over quota."virtual_overquota_bounce = yesproxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_mapscontent_filter = amavis:[]:10024receive_override_options = no_address_mappingsinet_interfaces = all

From: Daniel Smedegaard Buus

FYI: If you're using a CA signed certificate, you can use this settings instead:

postconf -e smtpd_tls_key_file='/etc/ssl/'

postconf -e smtpd_tls_cert_file='/etc/ssl/'

postconf -e smtpd_tls_CAfile='/etc/ssl/'


From: Daniel Smedegaard Buus

You should probably be more specific about the "valid FQDN hostname" when configuring postfix. It not only has to be valid, it also cannot be the primary hostname of the server itself. That is, if the mail server is also the web server, e.g., then postfix's myhostname and mydestination may not be also. Otherwise, mail to here ends up in the /var/mail spool, and not in the appropriate location in /home/vmail.

I was banging my head with my setup. I have three virtual domains, but I could only successfully create mailboxes with your guide for the virtual domains that were not the same as myhostname in postfix's configuration. All mail to any address I created with phpMyAdmin would simply end up in /var/mail, and I could not log in via squirrelmail (the dreaded imapd "No such file or directory" mail log error).

I could create new virtualhosts (random ones that don't exist), add users, send a welcome mail, and watch their directories get created. But just not for my main domain.

Turns out, prefixing myhostname and mydestination with anything would fix it. I ended up creating a DNS record for, used that for postconf, and it worked:

postconf -e 'myhostname ='postconf -e 'mydestination =, localhost, localhost.localdomain'

I may still have misunderstood something, but at least it's what's got it working.

Thanks for a nice howto, by the way :)

From: Bee bop

Thank you! Thank you! Thank you! I had the same issue and your comment helped solve it.

I was getting these sort of things in syslog:

Sep 13 08:32:25 cloud postfix/trivial-rewrite[7081]: warning: do not list domain in BOTH mydestination and virtual_mailbox_domains


From: Phelippe

Hello, nice tutorial, I have only one problem until now. On the /home/vmail folder hasn't created the folders relative to mailboxes. Is there any way to the service create the folder tree automaticaly ?  (sorry about the english) 

From: till

As far as I know, its not possible that postfix creates them automaticaly. you will have to use the maildirmake command to create them manually.

From: urgen

if dovecot 2.2 is used, do we need to patch the postfix (ver 2.11) with VDA patch ?

many thanks

From: Joe

Bit of an odd "glitch"? Users are able to send as any e-mail address they want, even worse Gmail delivers them to the inbox not spam. Is there anyway to limit users to their e-mail address plus any forwarders they have? or at least to the right domains?

The example below is happily sat in my gmail inbox as "Bill Gates <[email protected]>", despite failing an SPF check along the way.


Delivered-To: [removed]

Received: by with SMTP id l196csp1589456lfb;

        Sun, 21 Jun 2015 12:57:50 -0700 (PDT)

X-Received: by with SMTP id db1mr45815662wjc.153.1434916669900;

        Sun, 21 Jun 2015 12:57:49 -0700 (PDT)

Return-Path: <[email protected]>

Received: from mail.[removed].com (mail.[removed].com. [[removed]])

        by with ESMTP id by10si14936085wjb.148.2015.

        for <[removed]>;

        Sun, 21 Jun 2015 12:57:49 -0700 (PDT)

Received-SPF: fail ( domain of [email protected] does not designate [removed] as permitted sender) client-ip=[removed];


       spf=fail ( domain of [email protected] does not designate [removed] as permitted sender) [email protected];

       dmarc=fail (p=NONE dis=NONE)

Received: from localhost (localhost [])

by mail.[removed].com (Postfix) with ESMTP id 5DAB214219

for <[removed]>; Sun, 21 Jun 2015 19:57:49 +0000 (UTC)

X-Virus-Scanned: Debian amavisd-new at mail.[removed].com

Received: from mail.[removed].com ([])

by localhost (mail.[removed].com []) (amavisd-new, port 10024)

with ESMTP id gsSB32CiUJXp for <[removed]>;

Sun, 21 Jun 2015 19:57:43 +0000 (UTC)

Received: from mail.[removed].com (localhost [])

(Authenticated sender: [removed]@[removed].com)

by mail.[removed].com (Postfix) with ESMTPSA id 9192814218

for <[removed]>; Sun, 21 Jun 2015 19:57:43 +0000 (UTC)

Received: from

        (SquirrelMail authenticated user [removed]@[removed].com)

        by mail.[removed].com with HTTP;

        Sun, 21 Jun 2015 20:57:43 +0100

Message-ID: <[email protected][removed].com>

Date: Sun, 21 Jun 2015 20:57:43 +0100

Subject: Fail

From: "Bill Gates" <[email protected]>

To: [removed]

Reply-To: [email protected]

User-Agent: SquirrelMail/1.4.23 [SVN]

MIME-Version: 1.0

Content-Type: text/plain;charset=iso-8859-1

Content-Transfer-Encoding: 8bit

X-Priority: 3 (Normal)

Importance: Normal


This message should fail to send...

From: Alessandro Iacuelli

After all installing, users can't login via squirrelmail. After a lot of workaround, I've changed the select in vi /etc/postfix/sasl/smtpd.conf and now it's all OK! Why? My change was from

sql_select: select password from users where email = '%u@%r'


sql_select: select password from users where email = '%u'

From: Daniel Leeson

Very good instruction.

Thank you!

From: Roman

All`s good... Before Im trying to login through squirrelmail.    

ERROR: Connection dropped by IMAP server 

telnet localhost 143



Trying to fix it step by step, and reading manuals didnt takes effect. But man is very good

From: till

Did you sent an email to the mailbox first? the mailbox gets created when the first email arrives, the imap login wont work before.

From: Tobias

Nice setup.

One question though. Doesn't patching Postfix mean that everytime there is a security update for Postfix in Ubuntu, you need to manually patch the updated Ubuntu package again instead of just running apt-get upgrade? From a maintenance perspective, that feels awkward. What's the best way to automate updating Postfix with security updates then?



From: Rilisema

Great tutorial! For me the postfix patch didn't work ('wrong Unix version', running Ubuntu 14.04 LTS), but that's fine for now.

After succesfully being able to login with the different user accounts for different domains I created, I want to configure a mail account on my Mac mail.

Getting mail is no problem, but connecting to SMTP fails. I am trying to connect with SSL to port 993, but the authentication fails.

Anyone any idea how to fix this?


From: Guido van Harten

On this page I read: 'Some time you can get an error as follows:-'. In my case there are no errors. What is the first command I have to give in my case? Do I have to continue at '4 Create The MySQL Database For Postfix/Courier'? or at another point?

From: till

Continue with:

apt-get updateapt-get build-dep postfix

From: Guido van Harten

Setting up a mailserver using this tutorial I often copy a block of commands and paste it into Ubuntu.

But when installing DCC, the block of commands do not match the newest version. The line

cd dcc-dccproc-1.3.154

should be replaced by

cd dcc-dccproc-1.3.158

or you have to place a note the user has to examine what the current version is.

From: Guido van Harten

When I go to I see the login screen of squirrelmail. When I enter my login credentials, I see a 500-error page on

Is there anybody who can tell me what I did wrong?


Guido van Harten

From: Mohammed Ibrahim


I am stuck at the quota patch step, i get the below error:


test ! -d debian/postfix || rm -rf debian/postfix/usr/bin/make tidymake[1]: Entering directory `/usr/src/postfix-2.11.0'/usr/bin/make -f MAKELEVEL= Makefilesmake: Entering directory `/usr/src/postfix-2.11.0'(echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmpATTENTION:ATTENTION: Unknown system type: Linux 4.1.5-x86_64-linode61ATTENTION:make: *** [Makefiles] Error 1make: Leaving directory `/usr/src/postfix-2.11.0'make[1]: *** [Makefiles] Error 2make[1]: Leaving directory `/usr/src/postfix-2.11.0'make: *** [clean-preunpatch] Error 2dpkg-buildpackage: error: debian/rules clean gave error exit status 2

From: Guido van Harten

After building the server according to this tutorial, it seems there is no mail for the created user. After typing the URL and login with the created account, sometimes I get an error 500 and sometimes Squirrelmail opens and returns "Connection dropped by imap-server".

In /home/vmail/ I see a file with the name 1453467272.Vfd01I580009M899103.server,S=894

The file contains the mail with the welcome message and is 894 bytes. The hostname of my system starts with "server". 

Why contains the filename of the written mail the (part of the) hostname and the size of the mail in the filename.

Hope anyone can help me.


Guido van Harten

From: kelvenchi

squirrelmail login give me an error:Connection dropped by IMAP server. How can I resolve this problem. I followed you step by step and no error info thrown out on the screen.

From: Karel

As for a lot of others out there, this Daily Quota Report is always empty for me. I think, this is because this script assume one level of subdirectories for domain names and another level for user names. But my system is working for many years with structure only one level of folders, there folder name is [email protected] I think, I am not alone and someone should make another script for this case.

From: Yovan

Everything was great, no problems with installation but when i try to login in Squirrelmail i get this:

ERROR: Connection dropped by IMAP server.

my mail.err:

Apr 18 19:07:12 correo imapd: [email protected]: No such file or directory

Apr 18 19:11:14 correo imapd: [email protected]: No such file or directory


I verified user and password in MySQL db (mail) and these are the same credentials.

From: jose ricardo castellon

ayuda plase, Al iniciar la aplicacion loguandome squirrelmail me sale

ERROR: Connection dropped by IMAP server

From: Andrés Chandía

Hi there, I have this installation since ubuntu 10.04, and always works fine, but now I have upgraded to Xenial and first I had to solv

From: Andrés Chandía

Hey, my question is cropped, so I repeat it:

Hi there, I have this installation since ubuntu 10.04, and always works fine, but now I have upgraded to Xenial and first, I had to solv

From: Ilya


what about enabling spamassasin in /etc/default/spamassain


i got logs that spamassain is disabled ,and i need to set ENABLED=1

how its exactly works?


From: till

This setup uses amavisd to scan for spam in emails and amavisd loads the spamassassin code internally, so spamassassin itself shall not be enabled in /etc/default/spamassain.

From: Luca

Gave it a shot on ubuntu 16.04, but unfortunately PAM is "broken" because pam_mysql is not developed anymore:

saslauthd[2429]: PAM unable to dlopen( /lib/security/ undefined symbol: make_scrambled_password

saslauthd[2429]: PAM adding faulty module:

saslauthd[2429]: DEBUG: auth_pam: pam_authenticate failed: Module is unknown

saslauthd[2429]: do_auth         : auth failure: [user=xerox] [service=smtp] [realm=] [mech=pam] [reason=PAM auth error]

Any plan to update the guide for 16.04 ?

From: Stan


I am running ubuntu 14.04.5.LTS. 

when restarting posftix, I get those messages:


postconf: warning: /etc/postfix/ unused parameter: virtual_overquota_bounce=yes

postconf: warning: /etc/postfix/ unused parameter: virtual_maildir_limit_message="The user you are trying to reach is over quota."

postconf: warning: /etc/postfix/ unused parameter: virtual_maildir_extended=yes

postconf: warning: /etc/postfix/ unused parameter: virtual_mailbox_limit_override=yes

/usr/sbin/postconf: warning: /etc/postfix/ unused parameter: virtual_overquota_bounce=yes

/usr/sbin/postconf: warning: /etc/postfix/ unused parameter: virtual_maildir_limit_message="The user you are trying to reach is over quota."

/usr/sbin/postconf: warning: /etc/postfix/ unused parameter: virtual_maildir_extended=yes

/usr/sbin/postconf: warning: /etc/postfix/ unused parameter: virtual_mailbox_limit_override=yes


What is your advise?


Thanks in advance.

From: Duffy

You need to recompile Postfix with the quota fix in. Looks like you've done an auto-update and you've got the stock Postfix installed now.