{"id":6143,"date":"2026-07-31T10:45:00","date_gmt":"2026-07-31T07:45:00","guid":{"rendered":"https:\/\/www.scalahosting.com\/kb\/?p=6143"},"modified":"2026-07-31T10:09:58","modified_gmt":"2026-07-31T07:09:58","slug":"forward-entire-domain-email","status":"publish","type":"post","link":"https:\/\/www.scalahosting.com\/kb\/forward-entire-domain-email\/","title":{"rendered":"How to Forward All Email from One Domain to Another (Every Address, One Rule)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">To forward every address on a domain to another domain in SPanel, open <strong>Email Forwarders<\/strong>, add a <strong>New Forwarder<\/strong>, set <strong>Forwarding Type<\/strong> to <strong>Forward an Entire Domain<\/strong>, choose the source under <strong>Forward from<\/strong>, enter the target under <strong>Forward to Domain(s)<\/strong>, and click <strong>Add Forwarder<\/strong>. One rule then mirrors the whole domain, so there&#8217;s no need for additional per-address setup. SPanel is unusual in keeping per-address, catch-all, and whole-domain forwarding together in one place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Domain-level forwarding matches each address to the same name on the destination automatically, and covers addresses you add later. It shares the <strong>Email Forwarders<\/strong> screen with per-address forwarders; the <strong>Forwarding Type<\/strong> selector switches between them. Per-address forwarders, the catch-all, and whole-domain forwarding do three different jobs &#8211; test a couple of real addresses after you save.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>When domain forwarding matters<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You changed domains. The company rebranded, or you bought a cleaner name, and everything old still points at the old mailbox &#8211; customers keep writing to orders@old-domain.com, and a supplier still has accounts@old-domain.com saved from years ago.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The usual advice is to set up forwarders address by address. That works for two or three mailboxes. It falls apart at scale, and breaks the moment someone emails an address you forgot. What you want is one rule: everything for the old domain goes to the new domain, names unchanged. SPanel does that in a single form.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The short version<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Whole-domain forwarding delivers every address on a source domain to the same-named address on a destination domain. It matches by pattern. Messages sent to info@old-domain.com are automatically forwarded to info@new-domain.com. Addresses you add later are covered too. In SPanel this is the <strong>Forward an Entire Domain<\/strong> type.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What most people get wrong<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The common mistake is treating a catch-all as if it were domain forwarding. A catch-all collects mail sent to addresses that <em>do not exist<\/em> on your domain &#8211; the salez@ when you only have sales@. It says nothing about where your real addresses go. Domain forwarding is the opposite: it sends every real address to its twin on another domain, name for name.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A second mistake is assuming per-address forwarders and domain forwarding cancel out. They can coexist as separate solutions to two distinct problems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How it actually works<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open the tool from the SPanel user area under <strong>Email Forwarders<\/strong>. A new account shows the empty state: &#8220;You haven&#8217;t created any Email forwarders yet.&#8221;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large mpg-gallery\"><img decoding=\"async\" width=\"1024\" height=\"678\" src=\"https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image1-2-1024x678.webp\" alt=\"How to Forward All Email from One Domain to Another (Every Address, One Rule), How it actually works\" class=\"wp-image-6144\" srcset=\"https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image1-2-1024x678.webp 1024w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image1-2-300x199.webp 300w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image1-2-768x509.webp 768w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image1-2-1536x1018.webp 1536w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image1-2.webp 1600w\" sizes=\"(max-width: 361px) 660px, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 910px, 1140px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To create a rule click <strong>New Forwarder<\/strong>. The first choice is <strong>Forwarding Type<\/strong>, with exactly two options: <strong>Forward an Email Address<\/strong> and <strong>Forward an Entire Domain<\/strong>. Pick the second, and the form adjusts.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large mpg-gallery\"><img decoding=\"async\" width=\"1024\" height=\"325\" src=\"https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image2-1-1024x325.webp\" alt=\"How to Forward All Email from One Domain to Another (Every Address, One Rule), How it actually works 2\" class=\"wp-image-6145\" srcset=\"https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image2-1-1024x325.webp 1024w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image2-1-300x95.webp 300w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image2-1-768x244.webp 768w, https:\/\/www.scalahosting.com\/kb\/wp-content\/uploads\/2026\/07\/image2-1.webp 1310w\" sizes=\"(max-width: 361px) 660px, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 910px, 1140px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now set <strong>Forward from<\/strong>, the source domain, and <strong>Forward to Domain(s)<\/strong>, the destination. Click <strong>Add Forwarder<\/strong> and the rule goes live. The single-address form differs, offering <strong>Forward to Email Address<\/strong> and a <strong>Pipe to a program<\/strong> option instead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Where SPanel is different<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SPanel keeps all three forwarding behaviors in one place. On the <strong>Email Forwarders<\/strong> screen you build a per-address redirect and, via the <strong>Forwarding Type<\/strong> switch, a whole-domain mirror. The catch-all sits nearby as a separate <strong>Default Address<\/strong> tool, keeping unmatched-mail handling distinct.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The list view helps once you have a few rules: <strong>Domain<\/strong> and <strong>Type<\/strong> filters with <strong>Reset<\/strong> and <strong>Apply<\/strong>, columns including <strong>Forward to<\/strong> and <strong>Actions<\/strong>, and a <strong>Delete Selected<\/strong> control. SPanel is available on all ScalaHosting services at no extra cost.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Practical example<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Think of a development agency that consolidates a client&#8217;s two brands under a single domain. To make the transition as smooth as possible, each brand keeps its public addresses, but staff need to use the inboxes associated with the newly-assigned primary domain. A whole-domain forward from the old brand mirrors every address in one rule without the need for dozens of hand-made redirects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comparison: which forwarding tool fits<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-regular green-rows\"><table class=\"has-fixed-layout\"><tbody><tr><td>Question<\/td><td>Per-address forwarder<\/td><td>Catch-all (Default Address)<\/td><td>Forward an Entire Domain<\/td><\/tr><tr><td>What it moves<\/td><td>One named address<\/td><td>Mail to non-existent addresses<\/td><td>Every address on the domain<\/td><\/tr><tr><td>Keeps the name on the other side<\/td><td>You choose the target<\/td><td>Sends to one chosen mailbox<\/td><td>Yes, name for name<\/td><\/tr><tr><td>Covers new addresses automatically<\/td><td>No<\/td><td>Yes (as unmatched mail)<\/td><td>Yes<\/td><\/tr><tr><td>Best for<\/td><td>A single redirect or a script pipe<\/td><td>A safety net for typos<\/td><td>A full domain move or brand mirror<\/td><\/tr><tr><td>Where in SPanel<\/td><td>Email Forwarders<\/td><td>Default Address tool<\/td><td>Email Forwarders<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Limitations and trade-offs<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Domain forwarding mirrors addresses; it does not move mailboxes. Mail is redirected to the destination, so the source account is not where messages come to rest once the rule is active. If you want copies kept on the source as well, that is a different setup &#8211; confirm your retention needs first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It also assumes matching names on both sides. If no support@ exists at the destination, that mail needs somewhere to go on the receiving domain, typically that domain&#8217;s own catch-all. Overlapping rules deserve a test too: if you keep a per-address forwarder or a catch-all alongside a domain-level rule, send a few real messages before trusting it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How you should approach domain forwarding<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">List the addresses that receive mail today, so you have something to test against. Create the rule, set <strong>Forward from<\/strong> and <strong>Forward to Domain(s)<\/strong>, and save with <strong>Add Forwarder<\/strong>. Send test messages to your busiest addresses and confirm they arrive before retiring any old per-address forwarders you no longer need.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step-by-step<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>From the SPanel user area, open <strong>Email Forwarders<\/strong>.<\/li>\n\n\n\n<li>In the <strong>New Forwarder<\/strong> panel, set <strong>Forwarding Type<\/strong> to <strong>Forward an Entire Domain<\/strong>.<\/li>\n\n\n\n<li>Choose the source domain under <strong>Forward from<\/strong>.<\/li>\n\n\n\n<li>Enter the destination under <strong>Forward to Domain(s)<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Add Forwarder<\/strong> to create the rule.<\/li>\n\n\n\n<li>In the <strong>Email Forwarders<\/strong> list, filter by <strong>Type<\/strong> and click <strong>Apply<\/strong> to confirm the new rule appears, with its destination under <strong>Forward to<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQ<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>What is the difference between a catch-all and forwarding an entire domain?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> A catch-all receives only mail sent to addresses that do not exist on your domain, and delivers it to one chosen mailbox. Forwarding an entire domain is the opposite: it takes every real address and sends each to its match on another domain, name for name.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Do I need to set up each address separately?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> No. That is the point of the <strong>Forward an Entire Domain<\/strong> type in SPanel. One rule covers every address on the source domain, and it keeps working for addresses you add later, because it matches by pattern rather than from a fixed list.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Will info@old-domain reach info@new-domain automatically?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Yes. Domain-level forwarding preserves the part before the @ and changes only the domain, so info@old-domain is delivered to info@new-domain, sales@ to sales@, and so on across every address. You never name the individual addresses one by one, and any you add later are carried by the same rule.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Can I still use per-address forwarders at the same time?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Yes. SPanel keeps per-address forwarders, the catch-all, and whole-domain forwarding as separate tools that coexist. If you run more than one rule that could match the same address, send test messages and confirm the result before relying on it in production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>Where do I find domain forwarding in SPanel?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> It&#8217;s in SPanel&#8217;s User interface at Home > Email Forwarders. Add a <strong>New Forwarder<\/strong> and set the <strong>Forwarding Type<\/strong> to <strong>Forward an Entire Domain<\/strong>. The catch-all is a separate tool, the <strong>Default Address<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q:<\/strong> <strong>What happens if the destination domain has no matching address?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A:<\/strong> Whole-domain forwarding does not create addresses on the destination. If mail arrives for a name that does not exist there, it needs somewhere to go on the receiving side &#8211; usually that domain&#8217;s own catch-all. Set the destination up to receive the names you expect first.<\/p>\n\n\n\n<script type=\"application\/ld+json\">\n    {\n      \"@context\": \"https:\/\/schema.org\",\n      \"@type\": \"FAQPage\",\n      \"mainEntity\": [{\n        \"@type\": \"Question\",\n        \"name\": \"What is the difference between a catch-all and forwarding an entire domain?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"A catch-all receives only mail sent to addresses that do not exist on your domain, and delivers it to one chosen mailbox. Forwarding an entire domain is the opposite: it takes every real address and sends each to its match on another domain, name for name.\"\n        }\n      }, {\n        \"@type\": \"Question\",\n        \"name\": \"Do I need to set up each address separately?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"No. That is the point of the Forward an Entire Domain type in SPanel. One rule covers every address on the source domain, and it keeps working for addresses you add later, because it matches by pattern rather than from a fixed list.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"Will info@old-domain reach info@new-domain automatically?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Yes. Domain-level forwarding preserves the part before the @ and changes only the domain, so info@old-domain is delivered to info@new-domain, sales@ to sales@, and so on across every address. You never name the individual addresses one by one, and any you add later are carried by the same rule.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"Can I still use per-address forwarders at the same time?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Yes. SPanel keeps per-address forwarders, the catch-all, and whole-domain forwarding as separate tools that coexist. If you run more than one rule that could match the same address, send test messages and confirm the result before relying on it in production.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"Where do I find domain forwarding in SPanel?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"It's in SPanel's User interface at Home > Email Forwarders. Add a New Forwarder and set the Forwarding Type to Forward an Entire Domain. The catch-all is a separate tool, the Default Address.\"\n        }\n      },{\n        \"@type\": \"Question\",\n        \"name\": \"What happens if the destination domain has no matching address?\",\n        \"acceptedAnswer\": {\n          \"@type\": \"Answer\",\n          \"text\": \"Whole-domain forwarding does not create addresses on the destination. If mail arrives for a name that does not exist there, it needs somewhere to go on the receiving side - usually that domain's own catch-all. Set the destination up to receive the names you expect first.\"\n        }\n      }]\n    }\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>To forward every address on a domain to another domain in SPanel, open Email Forwarders, add a New Forwarder, set Forwarding Type to Forward an Entire Domain, choose the source under Forward from, enter the target under Forward to Domain(s), and click Add Forwarder. One rule then mirrors the whole domain, so there&#8217;s no need [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_titles_title":"Forward All Email from One Domain to Another | ScalaHosting KB","_seopress_titles_desc":"Redirect an entire domain's email to another domain in SPanel with one rule. See how whole-domain forwarding works, its limits, and when to use it.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[66],"tags":[],"class_list":["post-6143","post","type-post","status-publish","format-standard","hentry","category-tutorials"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts\/6143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/comments?post=6143"}],"version-history":[{"count":2,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts\/6143\/revisions"}],"predecessor-version":[{"id":6148,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/posts\/6143\/revisions\/6148"}],"wp:attachment":[{"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/media?parent=6143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/categories?post=6143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scalahosting.com\/kb\/wp-json\/wp\/v2\/tags?post=6143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}