Quick how-to: (Sub)Domain forwarding Email in Qmail (with virtual domain support)
As part of an ongoing Server move, today I needed to find a way to divert/forward all incoming Email from one Server (Server A) to another Server (Server B). Server A is running Qmail (on Debian etch) with virtual domains as part of a Plesk 8 install (alongside Courier). Server B is running my preferred setup of Postfix and Dovecot.
After a bit of searching, I found a good article describing “forwarding Email to another host” using Qmail. I tried, as the article recommends setting up a Qmail config file (which didn’t exist on my server):
/var/qmail/control/smtproutes
Containing a Qmail Email domain forwarding rule e.g.:
sourcedomain.com:destinationdomain.com
Unfortunately after restarting Qmail there was no change.
So I then thought a little further and realised that as part of Plesk 8, Qmail was being run with virtual domain support (i.e. Email accounts are stored in a Database rather than as system accounts/files) and spotted a Qmail config file:
/var/qmail/control/virtualdomains
This config file contained the name of the domain I was trying to forward followed by a colon and a number, I assumed it was likely that the number was some sort of ID. So, I tried removing the line containing the domain I was trying to forward, restarted Qmail and bingo! Email forwarding was working in Qmail…Nice!
So, as a brief recap, the process is:
- As always: Back up all your current, working config files and if at all possible, do this using a test domain or sub-domain name so if you make mistakes you won’t be killing peoples email!
- Set up your destination Email Server to receive Email for the relevant (sub)domain and Email account(s).
- Ensure that the domain name you are trying to forward Email for is in the Qmail config file /var/qmail/control/rcpthosts (this ensures that Qmail will handle Email for the domain).
- If necessary create the Qmail config file /var/qmail/control/smtproutes (this file did not exist on my server).
- Add a forwarding rule to /var/qmail/control/smtproutes e.g.
sourcedomain.com:destinationdomain.com
Note that you can use sub-domains if you want to e.g.
mail.sourcedomain.com:newmail.destinationdomain.com
or you can forward to an IP address e.g.
sourcedomain.com:1.2.3.4
If you want to forward all Email for all domains handled by your Qmail Server, you can use a wildcard config which means you omit the source domain name e.g.:
:destinationdomain.com
or if you want to forward all Email being handled by your Qmail Server:
:1.2.3.4
- If your Qmail installation is running virtual domains (as was the case with my Plesk 8 install), remove the line containing the domain you are trying to forward to which would look something like this:
yourdomain.com:52
- Now you should be finished with config so you can restart Qmail:
/etc/init.d/qmail restart
- Check your destination Email Server which should now be receiving Email sent to Server A for the source domain.
This worked fine for me using (source server) Debian Etch/Plesk 8/Qmail and destination server Debian Lenny/Postfix with virtual domains. Please be sensible though, no one likes losing Email so proceed with a little caution.
I assume that config file locations may vary on different installs so the path to config files may be different on your Qmail server.
Recommended references:
TechRepublic’s article on Qmail by Vincent Danen
Life with Qmail (including a very handy guide to Qmail config files)
I hope this article is useful and works for you too!
| This entry was posted by Neil Craig on April 22, 2010 at 8:48 pm, and is filed under Email, Qmail, Sysadmin. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |

about 3 years ago
Pretty nice post. I just stumbled upon your blog and wanted to say that I have really enjoyed browsing your blog posts. In any case I’ll be subscribing to your feed and I hope you write again soon!
about 2 years ago
Could be the BEST read that I have read all day =D
Ira
about 2 years ago
The GREATEST paper that I have read all week
about 2 months ago
hi.
I am not working.
what’s a problem?
1. cat /var/qmail/control/smtproutes
forward.xxx.com:xxxx.com
2. cat rcpthosts
forward.xxx.com
3. qmail restart
I received in forward.xxx.com.
but I don’t received xxxx.com
help me,please~
about 2 months ago
Hi
It’s very hard to tell as you have supplied almost no information but…i terms of what you say is happening, that’s the idea – you forward your email from one domain to another. I don’t see that you have a problem.
Cheers
Neil