Postfix: ที่อยู่ผู้รับถูกปฏิเสธ: ผู้ใช้ไม่รู้จักในตารางผู้รับในเครื่อง


30

เมื่อฉันพยายามส่งอีเมลบนเซิร์ฟเวอร์ postfix ของฉันไปยังที่อยู่ในโดเมนเดียวกัน (ตัวอย่างเช่นหากชื่อโฮสต์ของเซิร์ฟเวอร์คือ mail.example.com และฉันพยายามส่งอีเมลไปที่ test@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

ฉันพบปัญหานี้มาก่อนเมื่อเซิร์ฟเวอร์ไม่ได้ตั้งชื่อโฮสต์ที่ถูกต้องด้วยเหตุผลใดก็ตาม การตั้งค่าโดเมนของคุณmail.example.comเป็นระเบียน MX หรือไม่ เซิร์ฟเวอร์นี้จริงmail.example.comหรือ
เบิร์ต

คำตอบ:


42

ฉันรู้ว่าคำถามนี้เก่าไปหน่อยดังนั้นฉันคิดว่ามันได้รับคำตอบที่น่าพอใจแล้ว

ฉันเพิ่งมีปัญหาเดียวกันนี้และฉันใช้เวลาพอที่จะคิดออกว่าเกิดอะไรขึ้น ฉันคิดว่าสถานการณ์ของฉันเหมือนกับคำถามเดิม

Postfix ควรส่งเมลทั้งหมดไปยังเซิร์ฟเวอร์อื่น ๆ บนอินเทอร์เน็ต แต่ไม่ได้รับเมลสำหรับโดเมนใด ๆ ดังนั้นเมลใดก็ตามที่ส่งถึง example.com ควรส่งต่อไปยังเซิร์ฟเวอร์เมลสำหรับ example.com โซลูชันตามที่อธิบายไว้ b techieb0y คือการลบ $ mydomain ออกจากบรรทัด:

mydestination = $mydomain, localhost.$mydomain, localhost

บรรทัดนี้บอก postfix ว่าข้อความใด ๆ ที่ส่งถึง $ mydomain จะต้องได้รับและเก็บไว้ในนี้เซิร์ฟเวอร์ นั่นไม่ใช่สิ่งที่ฉันต้องการฉันต้องการให้ส่งข้อความเหล่านั้นไปยัง mailserver จริงสำหรับ example.com เมื่อฉันตระหนักถึงสิ่งนี้และลบ example.com แล้วอีเมลก็ทำงานได้ตามที่คาดไว้ ฉันโพสต์สิ่งนี้ในโอกาสที่คำอธิบายนี้จะช่วยให้คนอื่นที่สะดุดกับคำถามนี้ในอนาคต


18

ข้อผิดพลาดค่อนข้างสื่อความหมาย: ชื่อผู้ใช้อีเมลเป้าหมาย (ด้านซ้ายของเครื่องหมาย @) ไม่สามารถแมปกับผู้ใช้ในระบบ (การตั้งค่าเริ่มต้น postfix) หรือโดเมนเสมือน (เนื่องจากไม่มีการกำหนดค่าออกจาก กล่อง). การตัดสินใจที่จะลองและดำเนินการจับคู่นี้ถูกควบคุมโดยรายการโดเมนใน 'mydestination' (รวมถึงโดเมนเสมือนใด ๆ ) หากเครื่องนี้เป็น MX หลักของโดเมนแสดงว่าผู้ใช้ที่ไม่มีอยู่มีจดหมายที่เสีย หากช่องนี้เพียงต้องการส่งข้อความขาออกเพียงลบโดเมนเป้าหมายออกจาก mydestination (โดยการลบ $ mydomain ออกจากรายการ) ควรเพียงพอ - มันจะยังคงรับข้อความโดยตรงสำหรับ user@hostname.domain.tld แต่ข้อความสำหรับ user @ domain.tld จะผ่านขั้นตอนการค้นหา MX เพื่อจัดส่งที่อื่น


1
คุณบันทึกวันของฉันฉันจะบ้า ... ทำไมฉันถึงมีผู้ใช้สองคนสำหรับตัวเอง tstaerk และ thorsten;)
Thorsten Staerk

5

เมื่อคุณส่งข้อความไปยังโดเมนท้องถิ่นของคุณ postfix มีหน้าที่ตรวจสอบว่ามีผู้รับอยู่หรือไม่ เมื่อคุณส่งอีเมลไปยังโดเมนอื่น postfix จะไม่รับผิดชอบเช่นนั้น

คุณต้องมีผู้ใช้ในพื้นที่ที่เรียกว่าการทดสอบ

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

หรือคุณต้องการนามแฝงจากการทดสอบถึงผู้ใช้โลคัลใน / etc / aliases

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

คุณควรจะพร้อมทั้งหมด


มีวิธีใดในการเลี่ยงผ่านการตรวจสอบนี้ดังนั้นฉันไม่จำเป็นต้องสร้างผู้ใช้สำหรับแต่ละคนที่ฉันจะส่งอีเมลถึง ฉันไม่ต้องการใช้เซิร์ฟเวอร์นี้เป็นเซิร์ฟเวอร์จดหมายหลักของเราเพียงส่งอีเมลขาออกจากแอปพลิเคชันเมื่อเกิดข้อผิดพลาด ฉันไม่ต้องการอัปเดตเซิร์ฟเวอร์ทุกครั้งที่ต้องการเพิ่มผู้รับใหม่สำหรับอีเมลแอปพลิเคชัน
Tai Squared

สมมติว่าคุณต้องการส่งอีเมลไปที่ 'administrator@domainz.com' สิ่งที่คุณต้องทำคือตรวจสอบให้แน่ใจว่า postfix ในพื้นที่ของคุณไม่รับผิดชอบ 'domainz.com' มิฉะนั้นจะพยายามตรวจสอบผู้ใช้ในพื้นที่ ดังนั้นตั้งค่า 'mydomain' เป็นคำสั่งที่แตกต่างกันเช่น 'mydomain = local.server' และ postfix จะส่งอีเมลของคุณไปยังเซิร์ฟเวอร์ที่รับผิดชอบ 'domainz.com'
Julien Vehent

1

ดังนั้นฉันมีปัญหาที่คล้ายกันและยังไม่ได้คิดออก แต่นี่ควรย้ายคุณไปในทิศทางที่ถูกต้อง:

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

ดูหัวข้อ "Postfix บนไคลเอ็นต์ที่ไม่มีค่า" - ฉันคิดว่านั่นคือสิ่งที่คุณต้องการ ฉันยังลองตั้งค่า local_recipient_maps ตามที่ระบุในเว็บไซต์ของ postfix ที่หน้า: LOCAL_RECIPIENT_README.html

ลิงก์ทั้งสองควรทำในสิ่งที่เราทำหลังจากที่นี่ แต่ฉันไม่สามารถใช้งานได้ เมื่อฉันทำการตั้งค่าไคลเอ็นต์แบบเต็ม null การพยายาม telnet เพื่อส่งอีเมล SMTP ทดสอบไม่ทำงาน ฉันได้รับ "telnet: เชื่อมต่อไปยังที่อยู่ 97.74.92.30: การเชื่อมต่อถูกปฏิเสธ" เมื่อตั้งค่าการแมปผู้รับในพื้นที่การค้นหาในคำสั่ง RCPT TO: จะไม่ให้ข้อความแสดงข้อผิดพลาดเหมือน แต่ก่อน แต่เมื่อส่งอีเมล (ดูปกติ) ไม่มีการส่งอีเมลจริงและมีข้อผิดพลาดใน maillog:

"ไม่ทราบกล่องจดหมาย 550 กล่องอาจไม่มีกล่องจดหมายที่เชื่อมโยงกับชื่อ 550 นี้หรือคุณไม่มีสิทธิ์ในการดู 550 5.1.1 ผู้ใช้ไม่ทราบ"

แจ้งให้เราทราบหากคุณมีโชคที่ดีขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.