วิธีรวบรวมการตีกลับใน postfix


15

สิ่งนี้เกี่ยวข้องกับคำถามนี้:

linux - วิธีรับรายงาน bounceback สำหรับการสมัครจดหมายข่าวของฉันได้อย่างไร - เซิร์ฟเวอร์ผิดพลาด

สมมติว่าฉันกำลังสร้างที่อยู่อีเมลเช่นนี้เมื่อฉันส่งจดหมายข่าวเพื่อระบุการตีกลับและยกเลิกการสมัครจากจดหมายข่าวของฉัน: bounce-123456789@example.com

ฉันคิดว่าฉันใช้สิ่งนี้ใน Return-Path ใช่ไหม

จากนั้นฉันจะตั้งค่าอย่างไรใน postfix เพื่อรวบรวมที่อยู่เหล่านี้ทั้งหมดที่นำหน้าด้วย "bounce-" ลงในกล่องจดหมายเดียว

ในที่สุดฉันก็ได้ยินคนพูดถึงการตีกลับที่อ่อนนุ่มและการตีกลับที่ยาก ใครสามารถอธิบายความแตกต่างและวิธีการที่พวกเขาควรรู้ว่าจะลบใครบางคนออกจากจดหมายข่าวอีเมลเมื่อใด?


โปรดทราบว่าอาจมีการดูที่อยู่อีเมลที่มีคำว่า "เด้ง" เป็น "yuck" ... (สแปม) - หากกล่าวว่าหากคุณสามารถยึดตัวเองMessage-Idไว้ในส่วนหัวได้จะต้องส่งคืน เพียงพอที่จะตรวจสอบว่าใครเป็นใคร
Alexis Wilke

คำตอบ:


17

คำตอบที่แน่นอนสำหรับคำถามของคุณ (การจัดการที่bounce-xxx@example.comอยู่) ขึ้นอยู่กับการกำหนดค่าเซิร์ฟเวอร์ของคุณเพื่อรับจดหมาย หากexample.comเป็นโดเมนเสมือนสิ่งที่ดีที่สุดที่คุณสามารถทำได้คือการรวบรวมข้อความในbounce@example.comกล่องจดหมาย (สมมติว่าrecipient_delimiter = -)

หากexample.comเป็นโดเมนที่ส่งแบบโลคัลสำหรับเซิร์ฟเวอร์ (เมลถูกส่งไปยังบัญชีระบบจริง) จากนั้นคุณสามารถเพิ่ม.forwardไฟล์ไปยังโฮมไดเร็กตอรี่ของbounceผู้ใช้ซึ่งส่งไปยังโปรแกรมที่แยกวิเคราะห์ข้อมูลการตีกลับและบันทึกในฐานข้อมูลหรือไฟล์ . ดูman localข้อมูลเพิ่มเติมเกี่ยวกับ.forwardรูปแบบและวิธีส่งไปยังโปรแกรม

สิ่งที่เราทำเนื่องจากเราส่งข้อความสำหรับโดเมนจำนวนมากถูกใช้bounces.example.comเป็นโดเมน VERP ของเรา relay_domainsโดเมนนี้ต้องการที่จะเพิ่ม สร้าง/etc/postfix/transport_mapsด้วยเนื้อหานี้:

bounces.example.com             bulkbounce:

จากนั้นต่อท้ายบรรทัดที่คล้ายกับสิ่งนี้เพื่อ/etc/postfix/master.cf:

bulkbounce unix - nn - - pipe
  ผู้ใช้ = none argv = / usr / local / bin / bounce_handler.py $ {ผู้รับ}

bounce_handler.pyสคริปต์ยอมรับอยู่ VERP เป็นตัวเลือกบรรทัดคำสั่งแยกวิเคราะห์มันและทำให้การอัพเดทฐานข้อมูลที่จำเป็นในการบันทึกการตีกลับ


Ooh ฉันชอบความคิดที่จะใช้ขอบเขตผู้รับเพื่อจัดกลุ่มพวกเขา โดยทั่วไปแล้วจะใช้เครื่องหมาย + ใช่ไหม? ฉันคิดว่ามันจะใช้งานได้ดีขอบคุณ!
Brian Armstrong

11

ที่จริงแล้วคำตอบของ 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ตีกลับเฉพาะในสคริปต์ของคุณ


การใช้วิธีการของคุณฉันได้รับการตีกลับสองครั้งครั้งเดียวด้วยการตีกลับ + id @ ... และอีกครั้งด้วยการตีกลับ @ ... จากการตีกลับสองครั้ง - (การตีกลับของผู้ใช้ไม่มีอยู่จริงในระบบ - เพราะฉันไม่ต้องการ 'บันทึก' อีเมลเหล่านี้) อีเมลถูกส่งไปพร้อมกับ Return-path ของการตีกลับ + id @ ... ความคิดใดที่ฉันขาดหายไป
RVandersteen

@RVandersteen ฉันไม่แน่ใจเหมือนกันว่าทำไมคุณถึงได้สองครั้ง คนที่มี+id@ซองอาจเป็นแบบไหน?
Alexis Wilke

เมื่อฉันใช้ที่อยู่ 'จาก' เริ่มต้นของเรา - การตีกลับยังคงถูกส่งไปที่ bounce@example.com และ originalfrom@example.com (ไม่ได้เพิ่มเส้นทางการส่งคืนอีกต่อไป)
RVandersteen

1
สำหรับการอ้างอิงในอนาคตการเพิ่ม alert_classes จะไม่เปลี่ยนพฤติกรรมของ MTA ที่ส่งข้อความตีกลับไปยังเส้นทาง FROM / Return มันเพิ่มลักษณะการทำงานด้านบนของมัน (ส่งไปยัง alert_bounce_recipient ด้วย) นี่คือเหตุผลที่ฉันได้รับจดหมายสองฉบับซึ่งตอบคำถามของฉันด้านบน
RVandersteen

1
fyi - re: double bounces .. หากคุณกำลังแก้ไขที่อยู่ return (ที่อยู่ VERP เช่น 'user+id@fromdomain.com' จากนั้นคุณจะต้องใส่เครื่องหมายบรรทัดใน main.cf สำหรับ 'bounce_notice_recipient' หากคุณสนใจในการแยกวิเคราะห์ + id การตีกลับในสคริปต์ของคุณเท่านั้น
sarora

1

ซอฟต์แวร์รายชื่อผู้รับจดหมายที่ทันสมัยส่วนใหญ่รู้วิธีจัดการกับข้อความ VERP อยู่แล้วหาก MTA ได้รับการกำหนดค่าอย่างเหมาะสมเพื่อส่งต่อกลับไปยังซอฟต์แวร์รายการส่งจดหมาย ในกรณีของGNU Mailmanคุณควรเช็คเอาต์หน้าคำถามที่พบบ่อยชื่อ "ฉันจะใช้ VERP กับตัวคั่น - (Postfix ผู้รับ_delimiter) ได้อย่างไร"

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


ใช่ฉันทำซอฟต์แวร์จดหมายข่าวของตัวเอง มีเหตุผลที่ดี!
Brian Armstrong

จากนั้นคุณควรดูที่การใช้ VERP เพื่อจัดการการตีกลับอย่างถูกต้อง
Jeremy Bouse

สวัสดี Jeremy ฉันคิดว่าคุณพูดถูก VERP เป็นวิธีการแก้ปัญหามาตรฐานที่นี่ถึงแม้ว่ามันจะมีประโยชน์ในการระบุตัวผู้ส่งและผู้รับเท่านั้น ในกรณีนี้เราต้องระบุข้อความเฉพาะที่เกิดขึ้นซึ่งทำให้เกิดการตีกลับดังนั้นฉันเชื่อว่าเราจะต้องทำโซลูชันที่กำหนดเองด้วยรหัสของเราเองในที่อยู่ ฉันคิดว่าวิธีการแก้ปัญหาที่กล่าวถึงด้านล่างโดยใช้ตัวกำหนดผู้รับจะทำให้เราจัดกลุ่มพวกเขาเข้าด้วยกันในบัญชีที่ตีกลับหนึ่งบัญชี ขอบคุณสำหรับการตอบกลับแม้ว่าฉันจะขอบคุณความช่วยเหลือ!
Brian Armstrong

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