SMTP error code

SMTP error 554: transaction failed

SMTP error 554 is the most general permanent refusal: “transaction failed”. Who sends it, and what follows the code, decide whether the address is wrong, your mail was blocked, or the server won't talk to you at all.

Updated October 9, 2026 · 4 min read

Reply code
554 Transaction failed (RFC 5321)
Class
Permanent failure
Bounce type
Hard bounce or block, depending on the text
Retry?
Not unchanged

Verification catches some cases

When a 554 means the account doesn't exist, a verification catches it if the server refuses the address during the SMTP conversation. Blocks and setup errors depend on your server, domain or message.

SMTP error 554 can come at connection, after RCPT TO or after DATA; at connection the server answers No SMTP service here

What SMTP error 554 means

RFC 5321 gives SMTP error 554 two meanings: “Transaction failed”, or, “in the case of a connection-opening response, ‘No SMTP service here’”. That second case is special. According to section 3.1, a server “MAY” greet you with 554 instead of the usual 220. It must then wait for your QUIT and should answer any other command with “503 bad sequence of commands”. A server that refuses you at that point can only be judging your IP address, because it knows nothing else about you yet.

Later in the conversation, a 554 refuses the message itself, typically after RCPT TO or after the message body. Compared with SMTP error 550, which is about a mailbox, 554 is the broader “no”. Both are permanent.

554 error messages by provider

Sent byReply or descriptionWhat it means
Yahoo554 delivery error: dd This user doesn't have a yahoo.com accountUnknown address: hard bounce
Yahoo553 or 554 for an invalid address, failed DMARC or DKIM, content refused for policy reasons, or an IP listed by SpamhausBlock, unless it’s the address
Yahoo554 when the domain in MAIL FROM or the From header doesn’t resolve (451 if the lookup timed out)Your sending domain lacks DNS records
Gmail554 5.4.6 Message exceeded 50 hops, this may indicate an email loop.A mail loop
Gmail554 5.6.0 Email message is malformed. Not accepted.Broken message format
Gmail554 5.7.0 Too many unauthenticated commands.The client didn’t log in
Postfix554 5.7.1 <…>: Relay access deniedThe server won’t pass your mail on: see 554 5.7.1

Sources: Yahoo Sender Hub, Gmail SMTP errors and codes, and the Postfix text as documented by Red Hat. Yahoo doesn’t publish enhanced codes for its 554 replies; it groups errors by the three-digit code and explains them in words.

Causes, sorted by what follows the code

How to fix SMTP error 554 as the sender

  1. Unknown account: check the spelling, ask for a current address, then remove the old one.
  2. Blocked: look up your sending IP and domain in the Spamhaus reputation checker and other blocklists, and fix the cause before you request removal. Test SPF, DKIM and DMARC with the SPF checker, DKIM checker and DMARC checker.
  3. Refused at connection: your IP is not welcome there. If you send from a home connection, a cloud server or a new IP, relay through your email provider’s SMTP server instead.
  4. Unresolvable domain: give the domain you send from DNS records. Yahoo asks for an A or MX record, and SOA records for subdomains used in MAIL FROM or From.
  5. Mail loop: look for forwarding rules, or MX records that send mail back and forth between two systems.
  6. Malformed message or unauthenticated commands: fix the sending program. Log in before sending, on the submission port your provider names; the SMTP settings list has them for common providers.

If you run the receiving server

Check your mail log for the session. It names the restriction, blocklist or content rule that returned 554. If the rejection was wrong, allow that one sender rather than relaxing the rule for everyone.

Would email verification have prevented it?

Partly. For the unknown-account case, often: a verification asks the receiving server about the address the same way your message would, and a server that refuses the address at that step gives the check the same answer. Servers that accept every address first and only refuse after the message body was sent can’t be checked this way. Running sign-up addresses through the email checker before they reach your list prevents these bounces. For blocks, loops and malformed messages, no: the address may be perfectly fine, and the fix is on your sending side.

Stop bounces before they happen

Most hard bounces come from addresses that don't exist. An email verification asks the receiving server about the mailbox without sending anything, so you can remove bad addresses before your next send.

Frequently asked questions

What does SMTP error 554 mean?

The receiving server refused the transaction and won't accept it if you try again unchanged. RFC 5321 calls it “transaction failed”; at the start of a connection it means “no SMTP service here”. The text after the code gives the reason, from an unknown account to a blocklisted IP.

What is the difference between 550 and 554?

550 is about the mailbox: not found, no access, or refused by policy for that recipient. 554 is about the whole transaction or connection. In practice both are permanent, and providers use them for overlapping reasons, so read the text after the code.

Is a 554 error a hard bounce?

Only when the text says the address doesn't exist, as in Yahoo's “This user doesn't have a yahoo.com account”. Most other 554s are blocks or setup errors: the address may be fine, but your mail was refused.

What does “554 delivery error: dd This user doesn't have a yahoo.com account” mean?

The Yahoo address you wrote to doesn't exist. Yahoo's sender help uses this exact bounce as its example. Check the address for typos and remove it from your list.

Related codes and guides

Email validation API

Validate emails in your app

emailvalidation.io checks syntax, MX records and the mailbox over SMTP, flags disposable, role and free addresses and returns a quality score, in one request.

/v1/info Email validation API Read the documentation

100 free validations every month. No credit card required.

GET https://api.emailvalidation.io/v1/info?email=support@emailvalidation.io

{
  "email": "support@emailvalidation.io",
  "user": "support",
  "tag": "",
  "domain": "emailvalidation.io",
  "format_valid": true,
  "mx_found": true,
  "smtp_check": true,
  "catch_all": null,
  "role": true,
  "disposable": false,
  "free": false,
  "score": 0.64,
  "state": "deliverable",
  "reason": "valid_mailbox",
  "did_you_mean": ""
}

Start using our email validation software today!

Get 100 validations per month for free