Exchange ServerTroubleshooting

Email signatures on Exchange Server (Exclaimer, CodeTwo): routing, duplicates and NDRs

Signatures missing on some messages, added twice or causing loop NDRs? Find which agent, rule or service stamps your Exchange Server mail, fix it and prove it with message tracking.

Server-side signatures on Exchange Server come from a transport agent on every Mailbox server, an agent that hands mail to a cloud service, or an SMTP detour through a service. When the design or the install is incomplete, signatures appear only sometimes, appear twice, or mail loops until it bounces. Here's how to identify your design, read the evidence and fix each failure on Exchange Server SE and 2019.

Errors this guide fixes

  • 554 5.4.6 Hop count exceeded - possible mail loopNDR+4 more guides
  • 550 5.7.54 SMTP; Unable to relay recipient in non-accepted domainSignature service log / NDR+7 more guides
  • The execution time of agent '<agent name>' exceeded <n> milliseconds while handling event '<event>'Application log (Event ID 1050)+1 more guide
How this guide is organised: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (6 steps: List everything that stamps mail; Install or enable the agent everywhere; Fill the format gaps; Choose what happens to secure messages; Remove duplicate stampers; Break a loop in the SMTP design). 4. Verify the fix. 5. Prevent it next time. Toolbox: Event ID 1050, Get-TransportAgent, Disable-TransportRule, Set-TransportRule, SEND.1Symptoms2Why it happens3How to fix it4Verify the fix5Prevent it nexttime1List everythingthat stamps m…2Install orenable the ag…3Fill the formatgaps4Choose whathappens to se…5Removeduplicate sta…6Break a loop inthe SMTP des…TOOLBOXEvent ID 1050Get-TransportAgentDisable-TransportRuleSet-TransportRuleSENDHow this guide is organised: Symptoms → Why it happens → How to fix it → Verify the fix → Prevent it next timeFlow diagram of the article's sections in reading order: 1. Symptoms. 2. Why it happens. 3. How to fix it (6 steps: List everything that stamps mail; Install or enable the agent everywhere; Fill the format gaps; Choose what happens to secure messages; Remove duplicate stampers; Break a loop in the SMTP design). 4. Verify the fix. 5. Prevent it next time. Toolbox: Event ID 1050, Get-TransportAgent, Disable-TransportRule, Set-TransportRule, SEND.1Symptoms2Why it happens3How to fix it1List everything that stamps mail2Install or enable the agent everywhere3Fill the format gaps4Choose what happens to secure messages5Remove duplicate stampers6Break a loop in the SMTP design4Verify the fix5Prevent it next timeTOOLBOXEvent ID 1050Get-TransportAgentDisable-TransportRuleSet-TransportRuleSEND
At a glance: how this guide is organised · 6 fix steps · 5 key tools

Symptoms#

  • One user's messages get the signature only sometimes, depending on which Mailbox server handled them.
  • Meeting requests or messages from phones arrive without a signature.
  • Two signatures in one message, or the block repeated under every reply in a thread.
  • S/MIME-signed or encrypted messages go out unsigned.
  • After a signature service joined the outbound path, mail bounces with a loop NDR:
Text
554 5.4.6 Hop count exceeded - possible mail loop
  • The service can't hand stamped mail back to Exchange; its logs or bounce messages show Exchange refusing to relay:
Text
550 5.7.54 SMTP; Unable to relay recipient in non-accepted domain
  • Mail slows down after a signature agent was installed, and the Application log shows MSExchange Extensibility event 1050: The execution time of agent '<agent name>' exceeded <n> milliseconds while handling event '<event>'.

Why it happens#

DesignExamplesWhere the signature is addedTypical failure
On-server agentCodeTwo Email Signatures On-prem, the discontinued CodeTwo Exchange Rules (Pro), Exclaimer Signature Manager Exchange Edition, Exchange disclaimer rulesTransport service on each Mailbox serverAgent missing on one server, missing formats
Agent plus cloudExclaimer's Exchange On-Premises featureThe Exclaimer Exchange Transport Agent passes mail to Exclaimer's imprint server (the Service URI)Agent missing, Service URI unreachable, API key removed
SMTP detourServices reached through a smart hostOutside Exchange, after a Send connectorLoops and relay rejections when mail returns

Agents only work where they're installed. CodeTwo requires its component on every Mailbox server, and Exclaimer's agent is installed on your on-premises Exchange servers too; skip one and mail categorized there leaves unstamped, which looks random to users. CodeTwo's agent shows in Get-TransportAgent as CodeTwo Exchange Transport Agent (Email Signatures On-prem) or CodeTwo Exchange Rules (Exchange Rules and Rules Pro).

Secure messages can't be edited in place. Changing an S/MIME-signed body invalidates the signature, and an encrypted body can't be read. CodeTwo can't insert a signature directly into a secure message; it wraps the original in an envelope or sends it intact. Exchange disclaimer rules have a fallback action for this case: Wrap (the default), Ignore or Reject.

Formats. Meeting requests are often RTF and phones often send plain text; an HTML-only signature has nothing to insert there.

Duplicates mean two stampers: an Outlook signature plus the server-side one, an old disclaimer rule plus a new agent, or, in hybrid, an on-premises agent and an Exchange Online-based service. A disclaimer rule without an exception also re-appends itself under every reply.

Loops. Exchange Server picks a Send connector by recipient address space, so a * connector with the service as smart host catches all external mail. Stamped mail returned to Exchange goes back to the service; Exchange Server's mail flow rules have no action that routes a message to a chosen connector, so it circles until the hop count is exceeded. If the return connection may not relay, you get 5.7.54.

How to fix it#

1. List everything that stamps mail#

Run on each Mailbox server (Get-TransportAgent reads the local server):

PowerShell
Get-TransportAgent | Format-Table Identity,Enabled,Priority -AutoSize
Get-TransportRule | Where-Object { $_.ApplyHtmlDisclaimerText } |
  Format-List Name,State,Priority,ApplyHtmlDisclaimerLocation,ApplyHtmlDisclaimerFallbackAction
Get-SendConnector | Format-List Name,AddressSpaces,SmartHosts,DNSRoutingEnabled,SourceTransportServers,Enabled

Good: the same signature agent, Enabled True, on every Mailbox server, no disclaimer rule doing the same job, and a smart host pointing at the service only in the SMTP design.

2. Install or enable the agent everywhere#

Install the vendor's agent where it's missing (Exclaimer: cogwheel menu › Exchange On-Premises in the Exclaimer portal; the installer asks for the Service URI). If it's present but disabled:

PowerShell
Enable-TransportAgent -Identity "CodeTwo Exchange Transport Agent"
Restart-Service MSExchangeTransport

Then check the product side: CodeTwo lists unsubmitted console changes (Submit changes) and licences that don't cover every server among its common causes; for Exclaimer, confirm each server reaches the Service URI and the agent's API key still exists.

3. Fill the format gaps#

Create RTF and plain-text versions of each signature (CodeTwo's editor has a Convert button). Exchange ignores disclaimer HTML in plain-text messages, so check how a rule's text reads without it.

4. Choose what happens to secure messages#

CodeTwo processes encrypted and signed messages by default and lets you exclude either type. For disclaimer rules, Ignore delivers the message unchanged, usually right for a signature; Reject bounces it.

PowerShell
Set-TransportRule "Company signature" -ApplyHtmlDisclaimerFallbackAction Ignore

If a gateway encrypts mail after Exchange, the signature is already there; for IRM see the IRM guide.

5. Remove duplicate stampers#

  • One component per message path: Disable-TransportRule "Company signature" once a vendor product takes over.
  • Remove Outlook client signatures for users who get the server-side one.
  • If you keep a disclaimer rule, skip messages that already carry it: Set-TransportRule "Company signature" -ExceptIfSubjectOrBodyContainsWords "Contoso Ltd, registered office".
  • In hybrid, decide which component stamps on-premises senders' mail, especially if centralized mail transport routes it through Exchange Online.

6. Break a loop in the SMTP design#

  • Stop the bounces: disable the connector to the service (Set-SendConnector "To signature service" -Enabled $false) and make sure another connector handles *, or mail will queue.
  • The simplest loop-free flow is one way: Exchange sends to the service and the service delivers to the internet.
  • If the service must return mail, use the vendor's documented Exchange Server design: returning mail must not match the same Send connector (see finding mail loops), and relay is granted only to the service's IPs on a dedicated Receive connector (5.7.54 relay guide).

Verify the fix#

  1. Send tests from mailboxes on each server: HTML, plain text, a meeting request, a reply and a phone message.
  2. Follow one message with message tracking:
PowerShell
Get-TransportService | Get-MessageTrackingLog -Sender test@contoso.com -Start (Get-Date).AddHours(-1) -ResultSize Unlimited |
  Sort-Object Timestamp |
  Format-Table Timestamp,ServerHostname,EventId,Source,ConnectorId,Recipients -AutoSize
  1. Good: one SEND per external recipient via the expected connector. A loop shows one MessageId cycling through RECEIVE and SEND.
  2. In the received message's headers, the SMTP design shows the vendor's hosts in the Received: lines exactly once; agent designs add no hop.
  3. No new event 1050 names the signature agent.

Prevent it next time#

  • Re-run Get-TransportAgent on every server after each update and when you add a server (put it in your CU checklist).
  • Give signatures one owner and one stamping component.
  • Where several agents touch the body, set their order deliberately with Set-TransportAgent -Priority (see third-party transport agents).
  • Exclaimer needs Server-Side or Client-Side signatures configured before you install its agent; without Exchange Online it recommends the Client-Side setup without the User Agent.

References#

Revision history: Oct 2026 — re-checked against Microsoft Learn and the vendors' documentation: 2 details reworded or labelled as reported by admins.

Written and checked against current Microsoft Learn documentation and the vendor documentation linked in the references. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)