ฉันมีเซิร์ฟเวอร์อีเมล postfix ที่ตั้งค่าให้ส่งต่ออีเมลทั้งหมดไปยังโดเมนของฉัน*@example.com, ไปยังกล่องจดหมายเสมือนเดียว: [email protected].

ฉันทำอย่างนั้นด้วยการกำหนดค่านี้:

/etc/postfix/main.cf

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf regexp:/etc/postfix/aliases-regexp

/etc/postfix/aliases-regexp (ควรส่งต่อสิ่งที่ยังไม่ได้ไป[email protected])

!/[email protected]\.com/ [email protected]

การรับจดหมายทำงานได้ดี:

postfix/smtpd[5852]: connect from unknown[108.60.212.145]
postfix/trivial-rewrite[5856]: warning: do not list domain example.com in BOTH virtual_mailbox_domains and relay_domains
postfix/smtpd[5852]: E7D49E27: client=unknown[108.60.212.145]
postfix/cleanup[5857]: E7D49E27: message-id=<[email protected]>
postfix/qmgr[5787]: E7D49E27: from=<[email protected]>, size=1700, nrcpt=1 (queue active)
postfix/smtpd[5852]: disconnect from unknown[108.60.212.145] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
postfix/pickup[5785]: 64CB91090: uid=1002 from=<[email protected]>
postfix/cleanup[5857]: 64CB91090: message-id=<[email protected]>
postfix/qmgr[5787]: 64CB91090: from=<[email protected]>, size=2068, nrcpt=1 (queue active)
postfix/trivial-rewrite[5856]: warning: do not list domain example.com in BOTH virtual_mailbox_domains and relay_domains
postfix/pipe[5858]: E7D49E27: to=<[email protected]>, orig_to=<[email protected]>, relay=spamassassin, delay=0.54, delays=0.13/0.01/0/0.4, dsn=2.0.0, status=sent (delivered via spamassassin service)
postfix/qmgr[5787]: E7D49E27: removed
postfix/lmtp[5862]: 64CB91090: to=<[email protected]>, relay=fqdn.example.com[private/dovecot-lmtp], delay=0.08, delays=0.02/0.03/0.02/0.02, dsn=2.0.0, status=sent (250 2.0.0 <[email protected]> 22w5HOfOilvnFgAASQqZ1w Saved)
postfix/qmgr[5787]: 64CB91090: removed

หมายเหตุบรรทัด:

postfix/pipe[5858]: E7D49E27: to=<[email protected]>, orig_to=<[email protected]>, relay=spamassassin, delay=0.54, delays=0.13/0.01/0/0.4, dsn=2.0.0, status=sent (delivered via spamassassin service)

แสดงให้เห็นว่าข้อความถูกไว้สำหรับการแต่ถูกส่งไปยัง[email protected] [email protected]ดีจัง. น่าเสียดายที่มันเกิดขึ้นระหว่างทางออกด้วย ทำให้ข้อความขาออกถูกส่งกลับมาหาฉัน

postfix/lmtp[5862]: BA93CE27: to=<[email protected]>, orig_to=<[email protected]>, relay=fqdn.example.com[private/dovecot-lmtp], delay=0.22, delays=0.19/0/0.02/0.02, dsn=2.0.0, status=sent (250 2.0.0 <[email protected]> QzBoOSXPiluGGAAASQqZ1w Saved)

นี่คือบันทึกแบบเต็มเมื่อส่งจดหมาย:

postfix/trivial-rewrite[5856]: warning: do not list domain example.com in BOTH virtual_mailbox_domains and relay_domains
postfix/submission/smtpd[6260]: BA93CE27: client=mail-pl1-f178.google.com[209.85.214.178], sasl_method=PLAIN, [email protected]
postfix/cleanup[5857]: BA93CE27: message-id=<[email protected]om>
postfix/qmgr[5787]: BA93CE27: from=<[email protected]>, size=4192, nrcpt=1 (queue active)
postfix/trivial-rewrite[5856]: warning: do not list domain example.com in BOTH virtual_mailbox_domains and relay_domains
postfix/lmtp[5862]: BA93CE27: to=<[email protected]>, orig_to=<[email protected]>, relay=fqdn.example.com[private/dovecot-lmtp], delay=0.22, delays=0.19/0/0.02/0.02, dsn=2.0.0, status=sent (250 2.0.0 <[email protected]> QzBoOSXPiluGGAAASQqZ1w Saved)
postfix/qmgr[5787]: BA93CE27: removed

ผลที่ได้คือข้อความของฉันไม่ปรากฏให้ส่ง และฉันไม่ได้รับข้อผิดพลาดกลับมาด้วยซ้ำ

answer

มีตัวเลือกมากมายสำหรับการสร้าง catch-all สำหรับโดเมนใน Postfix ซึ่งค่อนข้างซับซ้อน วิธีปกติคือมีvirtual_alias_maps = hash:/etc/postfix/virtualกับ@example.com me. อย่าลืมว่าpostmap /etc/postfix/virtualเมื่อใช้hash:.

ฉันแก้ไขโดยเปลี่ยน/etc/postfix/aliases-regexpเป็น:

if /(.*)@example.com/
!/[email protected]\.com/ [email protected]
endif

คำสั่ง if จะตรวจสอบก่อนว่าเมลจะไปยังโดเมนหรือไม่ ซึ่งไม่รวมเมลขาออก