ที่จริงแล้วคำตอบของ Instyle นั้นยากมากที่จะนำไปใช้ถ้าคุณต้องการสนับสนุนโดเมนที่แตกต่างกันและมันผิดเพราะ:
a) ด้วยตัวอย่างของเขาtransport_maps
อีเมลทั้งหมดที่ส่งไปยังโดเมนนั้นจะถูกส่งไปยังบริการเฉพาะนั้นโดยไม่คำนึงว่าอีเมลนั้นเป็นอีเมลที่ถูกตีกลับหรือไม่ เนื่องจากใช้ชื่อโดเมนเฉพาะจึงควรเป็นอีเมลที่ตีกลับเท่านั้น ... แต่ไม่สามารถรับรองได้ว่าจะเป็นเช่นนั้น
b) ข้อมูลที่ส่งไปยังสคริปต์ของคุณคืออีเมลนั้นไม่ใช่ข้อความตีกลับ กล่าวอีกนัยหนึ่งรหัสของคุณอาจไม่รู้ว่าทำไมอีเมลถึงถูกตีกลับ (เช่นการตีกลับในเครื่องจะส่งอีเมลต้นฉบับให้คุณเท่านั้น)
วิธีที่ถูกต้องในการตั้งค่านั้นใน postfix คือการใช้คลาส bounce notification
1) ใน/etc/postfix/main.cf
notify_classes = bounce
bounce_notice_recipient = bounces@example.com
transport_maps = hash:/etc/postfix/transport_maps
2) ใน/ etc / postfix / transport_maps
# when you make changes to this file, run:
# sudo postmap /etc/postfix/transport_maps
bounces@example.com bulkbounce:
อย่างที่คุณเห็นตอนนี้เราบอกให้ postfix ใช้bounces@example.com
เมื่อใดก็ตามที่อีเมลถูกตีกลับ จากนั้นในแผนที่การขนส่ง, การใช้bulkbounce
เป็นบริการในการจัดการที่อยู่อีเมลใด ๆ bounces@example.com
ที่จะ
ในที่สุดคุณสามารถกำหนดbulkbounce
ด้วยสคริปต์ของคุณ:
3) ใน/etc/postfix/master.cf
bulkbounce unix - n n - - pipe
flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}
สคริปต์นี้ต้องการให้คุณมีผู้ใช้ nobody
ก็เป็นทางเลือกที่ดีเช่นกัน หากคุณต้องการมีผู้ใช้เฉพาะคุณสามารถสร้างโดยใช้:
useradd bounce
หากไม่มีสคริปต์ในmaster.cf
อีเมลจะถูกส่งไปยังบัญชี bulkbounce ดังนั้นหากคุณมีสคริปต์ที่แยกวิเคราะห์อีเมลจากไฟล์สิ่งนี้จะทำงานได้โดยไม่ต้องมีtransport_maps
และmaster.cf
เปลี่ยนแปลง
จากความคิดเห็นด้านล่าง:
การตีกลับสองครั้ง ...
หากคุณกำลังแก้ไขที่อยู่ผู้ส่ง (ที่อยู่ VERP เช่นuser+id@fromdomain.com
คุณจะต้องแสดงความคิดเห็นในบรรทัดmain.cf
สำหรับbounce_notice_recipient
ถ้าคุณสนใจในการแยกวิเคราะห์การ+id
ตีกลับเฉพาะในสคริปต์ของคุณ
Message-Id
ไว้ในส่วนหัวได้จะต้องส่งคืน เพียงพอที่จะตรวจสอบว่าใครเป็นใคร