43

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
Tai Squared
  • 589
  • 1
  • 8
  • 10
  • 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 09 '19 at 12:37

6 Answers6

55

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.

chmac
  • 977
  • 1
  • 7
  • 16
23

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).

techieb0y
  • 4,161
  • 16
  • 17
7

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.

Julien Vehent
  • 2,927
  • 18
  • 26
  • 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. – Tai Squared Sep 09 '10 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' – Julien Vehent Sep 10 '10 at 06:12
  • Forgetting to run `postalias /etc/aliases` was my problem! – ntc2 Aug 29 '20 at 06:38
2

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
1

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)

cocostru
  • 11
  • 2
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.

jeffthink
  • 111
  • 1