字尾:收件者地址被拒絕:本機收件者表中的使用者未知

字尾:收件者地址被拒絕:本機收件者表中的使用者未知

當我嘗試在我的 postfix 伺服器上將電子郵件傳送到同一網域中的位址時(例如,如果伺服器主機名稱是 mail.example.com 並且我嘗試將電子郵件傳送到[電子郵件受保護]),我在日誌中收到以下錯誤,並且電子郵件未送達:Recipient address rejected: User unknown in local recipient table。如果我發送到另一個網域上的地址,則不會有任何問題。這是我的 /etc/postfix/main.cf 檔案:

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

我知道這個問題有點老了,所以我假設它已經得到了令人滿意的答案。

我剛剛遇到了同樣的問題,我花了一段時間才弄清楚發生了什麼事。我想我的情況和原來的問題是一樣的。

Postfix 應該要中繼全部郵件到網際網路上的其他伺服器,它實際上不會接收任何網域的郵件。因此,發送到 example.com 的任何郵件都應轉寄到 example.com 的郵件伺服器。正如 techieb0y 所解釋的,解決方案是從行中刪除 $mydomain:

mydestination = $mydomain, localhost.$mydomain, localhost

此行告訴 postfix 發送到 $mydomain 的任何訊息都將被接收並儲存在伺服器.這不是我想要的,我希望將這些訊息發送到 example.com 的實際郵件伺服器。當我意識到這一點並刪除 example.com 後,郵件就按我的預期工作了。我發布這篇文章是為了希望這個解釋能幫助將來偶然發現這個問題的其他人。

答案2

這個錯誤非常不言自明:目標電子郵件使用者名稱(@ 符號左側)無法對應到系統上的本機使用者(預設字尾設定),也無法對應到虛擬網域(因為沒有配置任何網域)盒子)。嘗試執行此對應的決定由「mydestination」中的網域清單(以及任何虛擬網域)控制。如果該電腦實際上是網域的主 MX,則不存在的使用者的郵件已損壞。如果此方塊僅需要發送傳出訊息,只需從 mydestination 中刪除目標網域(透過從清單中刪除 $mydomain)就足夠了 - 它仍然會直接接受訊息[電子郵件受保護],但是訊息[電子郵件受保護]將透過 MX 查找過程在其他地方傳遞。您可以透過設定傳輸映射(對於單一網域)或配置智慧主機(對於所有郵件)來簡化該過程。

答案3

當您向本地網域傳送訊息時,postfix 負責檢查收件者是否存在。當您向任何其他網域發送電子郵件時,Postfix 不承擔此類責任。

您需要有一個名為 test 的本機用戶

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

或者,您需要從 test 到 /etc/aliases 中的本機使用者的別名

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

你應該已經準備好了。

答案4

/etc/postfix/main.cf文件添加行local_recipient_maps =,正確的,具有空值(預設情況下,該值是活動的且非空,這就是為什麼需要添加具有空值的該行)

相關內容