Qmail Howto
Now, we can run make and install qmail.
echo "-lssl -lcrypto" > ssl.lib make make setup check
Note: If you get an error while running "make" that says: "Oops. Your system's FD_SET() has a hidden limit of 1024 descriptors. This means that the qmail daemons could crash if you set the run-time concurrency higher than 509. So I'm going to insist that the concurrency limit in conf-spawn be at most 509. Right now it's 1000." - edit the file conf-spawn in your qmail directory and change the concurrency limit from 1000 to 509. Save and run make again.
If for some reason you are trying to compile qmail-1.03 instead of netqmail-1.05, you might encounter compilation problems with the latest versions of glibc (especially on Redhat Linux 9). In this case, use this patch and try recompiling qmail again. To apply the patch, cd to your qmail directory and type patch -p1 < qmail-1.03.errno.patch
Qmail and all of its subdirectories are installed in /var/qmail. Now we move to the configuration step.
8) Qmail post-install configuration
Before moving any further, it is best to create a link to qmail sendmail wrapper. The reason why we want this, is because many programs use sendmail to send email messages. By default, sendmail is installed in /usr/sbin/sendmail or /usr/lib/sendmail. We are going to symlink the wrapper:
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
Now we need to create necessary control files in /var/qmail/control. The examples below assume that your domain is "yourserver.com". Of course, you have replace the occurrence of yourserver.com with your qualified MX host.
cd /var/qmail/control echo yourserver.com > defaultdomain echo localhost > locals echo yourserver.com > me echo yourserver.com > plusdomain echo localhost > rcpthosts echo yourserver.com >> rcpthosts echo checkvpw > checkpassword echo 1 > mfcheck echo 20 > tarpitcount echo 5 > tarpitdelay
The next step is to create various messages such as bounce and double bounce messages.
echo @nowhere.edu > badmailfrom echo @nowhere.edu > badrcptto echo mailer-daemon > bouncefrom echo yourserver.com > bouncehost echo 50000 > bouncemaxbytes echo text > bouncemessage echo failure notice > bouncesubject cp bouncehost doublebouncehost cp bouncemessage doublebouncemessage cp bouncesubject doublebouncesubject
I will explain below in section 18.1 what "badmailfrom" and "badrcptto" are for and how to use them to fight against nasty spammers.
Now we need to edit two files - bouncemessage and doublebouncemessage. Therefore, launch your favorite editor and replace "text" with your bounce message. These files will contain the text that's going to be displayed when a message bounces or double bounces. The example below uses vi to edit the files.
vi bouncemessage vi doublebouncemessage
OK, the control files are all completed. Qmail configuration is now complete. The last thing that we need to do is set up a qmail startup script.
vi /var/qmail/rc
Copy-paste the following into the file:
#!/bin/sh PATH="/var/qmail/bin:/usr/local/bin" export PATH cd / qmail-start ./Maildir | setuidgid qmaill \ multilog t n50 s1000000 \ /var/qmail/logs/qmail &
The first two lines of the script specify the path to executable files (so that we don't have to write the complete path to qmail-start, setuidgid and multilog). The third line starts qmail, specifying Mailbox as the default directory for a mail user and sets "qmaill" as the user account under which multilog will be executed. The next line executes multilog, which is the logger we will be using for qmail. Here, we specify the number of maximum log files allowed in log directory (50) and the maximum size of a log file (1 MB). When a log file reaches 1 MB in size, the log will automatically rotate by renaming "current" log and creating a new empty log. When the number of log files reaches 50, it will automatically remove the oldest log prior to creating a new one. The last line represents the log directory.
Of course, we should not forget about making the startup script executable and creating qmail log directories:
chmod 755 /var/qmail/rc mkdir /var/qmail/logs mkdir /var/qmail/logs/qmail chown -R qmaill:qmail /var/qmail/logs
9.1) Installing Ucspi-UNIX
cd /usr/local/src tar zxf ucspi-unix-0.36.tar.gz cd ucspi-unix-0.36 make ./installer
Note: If ucspi-unix fails during compilation with an error in env.c (sysdeps.h not found) you need to get bglibs and install it. After untarring the source, cd into the directory and run "make" followed by "make install". Try recompiling ucspi-unix again. If compilation of ucspi-unix finishes without an error, type "./installer" to install binaries and manuals into /usr/local/bin and /usr/local/man, respectively. In some cases the installer gives an error "installer error: Could not change directory to '/usr/local/man'". If you got this error just type "mkdir /usr/local/man" and then "./installer" again.
9.2) Installing Ucspi-TCP
The process is similar to qmail installation:
cd /usr/local/src tar zxf ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 wget http://www.qmail.org/ucspi-rss.diff patch -p1 < ucspi-rss.diff make make setup check
Note: If ucspi-tcp fails during compilation with an error "collect2: ld returned 1 exit status", you need to get two patches (patch 1, patch 2) and apply them to ucspi-tcp. Put these patches into /usr/local/src/ucspi-tcp-0.88 directory and type "patch -p1 < ucspi-tcp-0.88.errno.patch" and "patch -p1 < ucspi-tcp-0.88.nobase.patch". As usual, you'll have to rerun "make" and "make setup check" to compile and install ucspi-tcp.
Now let's configure tcpserver. Create a script called tcprulesedit in /usr/local/bin and copy-paste the following:
#!/bin/sh vi /etc/tcp.smtp /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
This script will take care of creating and editing relay rules in qmail. You can substitute "vi" with your favorite editor, if you want to.
As usual, make the script executable:
chmod 755 /usr/local/bin/tcprulesedit tcprulesedit
The second line above runs the tcprulesedit script we've just created. Copy-paste the following lines into the editor:
127.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue" :allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
Note: If you are not planning to install qmail-scanner, you should remove the QMAILQUEUE definitions above. Of course, don't forget to get rid of all "," (commas) at the end of the lines as well.
For security purposes, we are only allowing localhost (127.) to relay messages. Since messages coming from localhost will most probably not contain spam or viruses, we are specifying qmail-queue as the default executable for incoming mail. This will also decrease the server load when processing mail between local mail users. The second line of the script just tells tcpserver to process all other mail using qmail-scanner (to fight against spammers and viruses), the installation of which I will be covering later in this guide.
10) Moving on with Daemontools
Daemontools installation differs from other installations, because you don't have to "configure" or "make" the package. A directory is created in your root structure, and all working files are placed there. Follow the instructions below to properly install Daemontools on your system.
mkdir -p /package chmod 1755 /package cd /package mv /usr/local/src/daemontools-0.76.tar.gz /package tar zxf daemontools-0.76.tar.gz mv daemontools-0.76.tar.gz /usr/local/src cd admin/daemontools-0.76 package/install
Note: If daemontools fails during compilation with an error "collect2: ld returned 1 exit status", you need to get a patch and apply it on daemontools. Put the patch into /package/admin/daemontools-0.76 and type "patch -p1 < daemontools-0.76.errno.patch". After the patch is applied successfully, cd into /package/admin/daemontools-0.76 and type "package/install". Daemontools should now be installed and fully operational.
That's it, Daemontools package is installed.
Related posts:
10/31/2007 - 10:10
I have a problem with autoresponse. When it send’s the response, the sender address goes like this “”@domain.com . This way, it’s always flaged as relay, on my relay server.
Do you have any hint?
11/14/2007 - 02:40
Hi,
Really good site. Thanks for your valuable help. Do you have anything similar for postfix,mysql,dovecoat with webmail option. Since all these can be installed along with the O.S. and only need to integrate.
Rgds,
Saji Alexander.
11/28/2007 - 18:32
if you’re having problems making Courier for Fedora/Redhat with error /usr/include/stdio.h:385: error: syntax error before ‘&&’ token , you can find information here http://atmail.com/view_article.php?num=199
02/19/2010 - 02:45
That article no longer exists.
It has been replaced by: http://atmail.com/kb/?p=270
Just in case it disappears again, here it is:
———————-
Description: The standard Courier-IMAP 3.0.8 distribution will not build on stock Fedora/Redhat systems. Compilation fails while building the authlib library, usually with an error message like:
In file included from authstaticlistsearch.c:9:
/usr/include/stdio.h:385: error: syntax error before ‘&&’ token
A review of the stdio.h file shows that no ‘&&’ symbols appears on or near line 385.
Solution: The courier-imap/authlib directory contains a file named ‘debug.h’ to support the debugging of authentication attempts against the Courier IMAP server. This file contains a C preprocessor macro named ‘dprintf’ that conflicts with the ‘dprintf’ function defined in glibc’s ’stdio.h’. This conflict isn’t a problem so long as ‘#include ‘ appears before ‘#include “debug.h”‘ in the authlib source files. Unfortunately, this is not the case for files ‘authstaticlistsearch.c’, ‘authmoduser3.c’, ‘mod.h’, ‘authtest.c’, ‘debug.c’, and ‘authdaemon.c’.
To fix this problem, open these files in a text editor and move the ‘#include “debug.h”‘ line so that it is the last include directive. Make sure that you do not paste it into a ‘#if … #endif’ block. Once you have made these changes, the build process should succeed.
01/20/2008 - 15:07
I installed Your Qmail-modification a couple of years ago. Thanks for that! Now I would like to use your patch for bounce handling.
patch
03/04/2008 - 02:46
Hi,
how can we know a email is bounced or not ?? qmail handles smtp return codes ??
Thanks,
Satish.K
03/25/2008 - 03:46
/usr/local/bin/setuidgid qmaill “contrib/test_installation.sh -doit”
i stuck at that line and my fedora 8 give me :
/usr/local/bin/setuidgid qmaill “contrib/test_installation.sh -doit”
setuidgid: fatal: unable to run contrib/test_installation.sh -doit: file does not exist
AND also when i run : # /usr/local/bin/setuidgid qmaill \
“/var/qmail/bin/qmail-scanner-queue.pl” -g
perlscanner: generate new DB file
perlscanner: total of 9 entries.
my fedora 8 only reply : perlscanner: generate new DB file
**Please help me, it’s already 2 to 3 days since i tried to solve it but can’t…
04/30/2008 - 17:53
Hi Nasim. Thanks a lot for providing nice and very helpful instructions in plain english :-)
I’ve installed mail production server on Debian(4) using your guidlines.
Although I came across some problems after install, i.e. when I have created second virtual domain, mail server stopped recieving any messages at all(even though the first virtual domain was working on it’s own before). Is it something to do with Qmail-Scanner, where by one required to enter domains’ names before installing it(–local-domains “domain.one.com,domain.two.com”; page 5 of your instractions)?
Thanks a lot in advance if you can spare some time to answer this question.
Kind regards,
yuriy
05/01/2008 - 10:31
Yuriy, are you still receiving mail for the first domain that you had created before? Also, a little troubleshooting would definitely help. Try this:
1) Telnet to your server’s IP address port 25 by typing “telnet x.x.x.x 25″
2) Type “HELO test.com” or some other domain and press enter
3) Type “MAIL FROM:test@test.com” and press enter
4) Type “RCPT TO:test@yourdomain.com” and press enter
5) Type “DATA” and press enter
6) Type some garbage and then type “.” on a separate line. The server should respond “250 ok xxxxxxx qp xxxxx”.
7) Type “quit” on a separate line and see what output you get.
8) While doing all of the above check your qmail logs. Both the incoming tcp logs and your qmail logs.
9) After you are done with the telnet session, your logs should report what the problem is.
If your domain is not in one of the configuration files, you will get a descriptive error in the log. If there is any other problem, you should see it in the log as well.
If you can’t telnet to your server, then your tcpserver is having a problem and might need to be rebooted.
Hope the above helps.
Nasim
05/06/2008 - 07:36
i’m sorry..could you give me a module to make QMAIL in SLACKWARE 12, i have try to make it, but not suxess..please. for my homework
05/06/2008 - 11:11
Hi Nazim.
I can telnet to my server and do all steps you have listed alright. It’s just when I’m trying to set additional virtual domain it stops receiving emails(one can still send emails though) even to the first virtual domain. When I remove the second virtual domain it will start to receive emails but only after couple hours.I reckon that it’s Qmail-Scanner coursing this problem. I probably leave this issue to sort later on(I’m planning to install another test server but will keep in mind using more than one domain then).
I have couple more issues which require immediate attention and I was trying to sort them out but no luck so far.
1. I need to set our email server to give a 550 error for an invalid address. I have used Andrew Richards’ qmail-verify patch(http://free.acrconsulting.co.uk/email/qmail-verify.html). I can see qmail-verify daemon is running on our server but it’s not rejecting non-existing users(so it’s accepting anything with our domain). The problem could be that /home/email/[virtual_domain]/.qmail-default telling that anything coming with this domain is valid.
But because I’m using virtual domain .qmail-default pipes to /usr/local/bin/vdeliver.So vdeliver is deciding who is right users on our server. Andrew suggested to remove /home/email/[virtual_domain]/.qmail-default but when I did it email server stopped to receive emials. Do you know what parameters I need to pass to /usr/local/bin/vdeliver in /home/email/[virtual_domain]/.qmail-default so qmail-verify can properly filter email users?
2. Due to the increase in the number of ISP’s blocking port 25 for third party mailservers I need to set on mail server additional port to answer SMTP request. I was looking on google and found the following link http://www.skorpionweb.org/archives/2005/09/running_qmail_s.php.
So I followed the logic in this article and set separate tcpserver which listens to different port:
1) Created /var/qmail/rc2 :
#!/bin/sh
PATH=”/var/qmail/bin:/usr/local/bin”
export PATH
cd /
qmail-start ./Maildir | setuidgid qmaill \
multilog t n50 s1000000 \
/var/qmail/logs/qmail2 &
2) Created /usr/local/bin/runmail2:
exec softlimit -m 10000000 \
envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -v -H -R -l $HOSTNAME -x /etc/tcp.smtp.cdb -c200 -u5002 -g5000 0 587 qmail-smtpd 2>&1 &
3) Created /var/qmail/logs/qmail2 and chown it to qmaill:nofiles.
Now I can start separate tcpserver with port 587 and everything looks healthy with but when I change port 25 to 587 and try to send mail I have got an error “…The server may be unavailable or refusing connection…”
I wonder whether I need to set another instance of qmail-smtpd(may be qmail-smtpd2, just guessing here).
Thanks a lot again for your time and effort to keep this site going & helping folks like myself :-)
Kind regards, yuriy
05/24/2008 - 23:59
Hi Nazim,
Problem with setting second virtual domain was sorted out. It turned out that one needs to restart qmail server after adding another virtual domain.
Also I have sorted an issue with 550 error page(I have wrote about it in one of my previous posts).
With virtual domain .qmail-default file should exist for each user. So solution was pretty simple: copy original .qmail-default to .qmail-USERNAME in /home/email/yourdomain/ folder. Also my /etc/tcp.smtp looks like this:
127.:allow,RELAYCLIENT=”",RBLSMTPD=”",QMAILQUEUE=”/var/qmail/bin/qmail-queue”
:allow,QMAILQUEUE=”/var/qmail/bin/qmail-scanner-queue.pl”,VERIFY=”"
05/25/2008 - 02:29
Hi Nazim,
Sometimes I have an error when sending email(addresses which I used before or new):
An error occurred while sending mail.The mail server responded: sorry, that domain isn’t in my list of allowed rcpthosts(#5.7.1). Please check the message recipients and try again.
I thought that it something to do with timing out authentication so I have removed 900 from /etc/relay-ctrl/expiry(step 12->Installing Relay-CTRL; pagehttp://mansurovs.com/2002/12/20/qmail-howto/4) but I’m still getting this error.
I’ll appreciate if you could advice on what could be wrong, please.
Thanks a lot in advance,
yuriy
05/30/2008 - 10:10
Hi Nasim:
Have you tried to use CourierIMAP 4.3.1 (with AuthLib)?
I would appreciate your comments about it.
Thanks.
06/20/2008 - 19:22
This was helpful. Thank you.
06/29/2008 - 14:03
Nice tutorial. If anyone needs help, you can contact my via email on my website.
I could do it for free.
09/05/2008 - 16:04
> – Qmail Patches from http://mansurovs.com
Where is the patches, i find but…
10/03/2008 - 07:19
So what if I want a more minimalistic solution. Basically I have a mail server that only needs to serve one site, and primarily outgoing mail. So no fancy stuff needed like multiple users and auto-responders.
I would like to have a suite of admin tools, for instance, being able to manually send an email that’s been stuck in the queue and watching the remote mail server response, ideally have a php script parse this information.
Hours on Google have really only given me scripts for the end-user, none for really managing the admin part of qmail.
10/16/2008 - 23:09
Nice tutorial. This is only the patch that I haven’t encountered a problem.
I hope you can add a patch such as validrcptto. This is nice patch. However, I’m getting a hunk failed when I’m trying to patch it after patching all the patch on your tutorial. Probably, some code doesn’t conform to validrcptto patch. I’m not a C programmer so I’m getting a hard time fixing the problem. Please inform me via my email ntserafica@yahoo.com if you have the patch.
This could be a great gift this coming christmas :)
03/27/2009 - 22:20
can you have an instruction on how to get squirrelmail work together with your tutorial..
Thank in advanced
03/28/2009 - 01:50
I followed you through step 17.1 everything work fine but when I telnet to port 15 and 110 …these errors occur
===============================================
telnet 127.0.0.1 25
Trying 127.0.0.1…
Connected to localhost (127.0.0.1).
Escape character is ‘^]’.
220 tnway.com ESMTP
exit
502 unimplemented (#5.5.1)
quit
======================================================
telnet 127.0.0.1 110
Trying 127.0.0.1…
Connected to localhost (127.0.0.1).
Escape character is ‘^]’.
+OK
hello
-ERR authorization first
exit
-ERR authorization first
=============================================
What wrong with me ? I really need your help
Thank in advanced
03/28/2009 - 01:56
billyduc,
Just install Courier IMAP and you will be able to use Squirrelmail or any other web-based mail system. I personally use Horde http://www.horde.org/ and love the functionality.
Regarding your other issues with telnetting – the output seems to be normal and the services are responding. Did you try to send an email to your server through an external provider like gmail/yahoo? Did you try to use a client like Outlook to download emails through POP3/IMAP?
Nasim
03/30/2009 - 01:50
I use Evolution for email client.
I setup for “test” account to send and receive mail
When I clicked Send / Receive Button. It prompt me
Unable to connect to POP server myhost.mydomain.com.
Error Sending password : -ERR authorization failed
Please enter the POP password for test on host myhost.mydomain.com
I enter the password for test account……But the error window is open
Error While Fetching Mail
Unable to connect to POP server myhost.mydomain.com.
Error Sending password : Operation now in progress
05/05/2009 - 13:21
hey, i wrote a practical step-by-step how-to on qmail… please see the link: “http://119.15.153.9/qmail/qmail-install.html” , i hope some one will require it.
07/17/2009 - 11:06
Great howto, tnx!
08/19/2009 - 15:37
When I was trying to compile the qmail-autoresponder-0.97, it gave me the following error messages:
main.c: In function âexec_qmail_injectâ:
main.c:257: warning: missing sentinel in function call
./compile options.c
options.c:1:25: error: mysql/mysql.h: No such file or directory
make: *** [options.o] Error 1
I have the mysql installed. Please help.
Thank you
11/14/2009 - 15:09
I did “apt-get install libmysqlclient15-dev” and it solved the problem with options.c:1:25: error: mysql/mysql.h: No such file or directory
11/14/2009 - 15:13
Andreas, thank you for the input!
Whenever there is a problem with mysql.h not being found, you need to install the mysql client source files, just like you did.
01/02/2010 - 07:39
Hello,
I like to forward all bounced emails for all of my user accounts to a single account.
is there a qmail setting or patch that allows me to forwards all bounced emails of my user accounts to a single admin account?
Regards