48

When I try to send an email on my postfix server to an address on the same domain (for example, if the server hostname is mail.example.com and I try to send an email to test@example.com), I get the following error in the log and the email is not delivered: Recipient address rejected: User unknown in local recipient table. If I send to an address on another domain, I don't have any problems. Here is my /etc/postfix/main.cf file:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = mail.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname
myorigin = $mydomain
mydestination = $mydomain, localhost.$mydomain, localhost
relayhost =
#fake IP address
mynetworks = 127.0.0.0/8 100.837.191.223
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
1
  • I have ran into this before when servers do not have the correct hostnames set for whatever reason. Is your domain setup with mail.example.com as your MX record? Is this server really mail.example.com?
    – Bert
    Jul 9, 2019 at 12:37

6 Answers 6

59

I know this question is a little old, so I'm assuming it's been answered satisfactorily already.

I just had this same issue, and it took me a while to figure out what was going on. I think my situation was the same as the original question.

Postfix should relay all mail to other servers on the internet, it does not actually receive mail for any domains. So any mail sent to example.com should be forwarded to the mail server for example.com. The solution, as explained b techieb0y, is to remove $mydomain from the line:

mydestination = $mydomain, localhost.$mydomain, localhost

This line tells postfix that any messages sent to $mydomain are to be received and stored on this server. That's not what I want, I want those messages to be sent to the actual mailserver for example.com. Once I realised this, and removed example.com, mail worked as I expected. I'm posting this on the off chance that this explanation helps somebody else who stumbles upon this question in the future.

2
  • This helped me.
    – 71GA
    Dec 1, 2020 at 17:52
  • This is the answer!
    – Houman
    Jul 8, 2021 at 20:30
24

The error is pretty self-descriptive: the target email username (left of the @ sign) can't be mapped to a local user on the system (default postfix settings), nor to a virtual domain (as none are configured out of the box). The decision to try and perform this mapping is controlled by the list of domains in 'mydestination' (plus any virtual domains). If this machine is in fact a domain's primary MX, then users that don't exist have broken mail. If this box only needs to send outgoing messages, simply removing the target domain from mydestination (by removing $mydomain from the list) should suffice -- it will still accept messages directly for user@hostname.domain.tld, but messages for user@domain.tld will go through the MX lookup process for delivery elsewhere. You can shortcut the process by setting up a transport map (for individual domains), or for configuring a smarthost (for all mail).

1
  • 2
    you saved my day, I was going mad... why do I have two users for myself, tstaerk and thorsten ;) Nov 22, 2014 at 11:48
9

When you send a message to your local domain, postfix is responsible for checking that the recipient exists. When you send an email to any other domain, postfix has no such responsibility.

You either need to have a local user called test

useradd -s /bin/bash -d /home/test -U test

or, you need an alias from test to a local user in /etc/aliases

echo "test: root" >> /etc/aliases
postalias /etc/aliases

An you should be all set.

4
  • Is there any way to bypass this check so I don't have to create a user for each person I would send an email to? I don't want to use this server as our primary mail server, just to send outgoing emails from an application when errors occur. I would prefer to not have to update the server every time I want to add a new recipient for the application email. Sep 9, 2010 at 15:47
  • Let's say you want to send email to 'administrator@domainz.com', what you need to do is to make sure your local postfix is NOT responsible of 'domainz.com', otherwise it will try to validate the user locally. So, set the directive 'mydomain' to something different, like 'mydomain = local.server' and postfix will send your email to the server responsible for 'domainz.com' Sep 10, 2010 at 6:12
  • Forgetting to run postalias /etc/aliases was my problem!
    – ntc2
    Aug 29, 2020 at 6:38
  • This is the correct answer. Whenever the error message speaks about local recipient table it actually means /etc/aliases (by default) but for reasons that I cannot understand, you have to manually re-run postalias /etc/aliases after every time you change that file. Simply reloading Postfix is not enough! If you get error with User unknown in relay recipient table you have to edit file pointed by config relay_recipient_maps and manually run postmap /path/to/file because that will not be done automatically by Postfix either! Feb 7 at 11:54
3

I had this error when sending e-mails to an alias. Postfix is using /etc/aliases.db which is generated from /etc/aliases by running the following command. This resolved the error:

newaliases
2

to the /etc/postfix/main.cf file add line local_recipient_maps =, right so, with empty value (by default the value is active and non-empty, that is why it is needed to add that line with empty one)

1

So I'm having a similar problem and haven't quite figured it out yet, but this should move you in the right direction:

http://www.postfix.org/STANDARD_CONFIGURATION_README.html

Look at the "Postfix on a null client" section - I think that's what you want. I also tried setting local_recipient_maps setting as specified on postfix's website at the page: LOCAL_RECIPIENT_README.html

Both links should do what we're after here, but I can't get them to work. When I do the full null client setup, attempting to telnet in order to send a test SMTP email does not work. I get "telnet: connect to address 97.74.92.30: Connection refused". When setting local recipient map, the lookup in the RCPT TO: command does not give an error message like it was before, but upon sending the email (looks normal), no email is actually sent, and there's an error in the maillog:

"550-Mailbox unknown. Either there is no mailbox associated with this 550-name or you do not have authorization to see it. 550 5.1.1 User unknown"

Let me know if you have better luck.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.