Làm thế nào để thu thập bị trả lại trong postfix


15

Điều này có liên quan đến câu hỏi này:

linux - Cách để có được một báo cáo phản hồi cho ứng dụng bản tin của tôi? - Lỗi máy chủ

Giả sử tôi đang tạo các địa chỉ email như thế này khi tôi gửi các bản tin để xác định bị trả lại và hủy đăng ký chúng khỏi bản tin của mình: nảy-123456789@example.com

Tôi cho rằng tôi sẽ sử dụng điều này trong đường dẫn trở lại, phải không?

Sau đó, làm thế nào tôi có thể thiết lập nó trong postfix để thu thập tất cả các địa chỉ này có tiền tố "nảy-" vào một hộp thư?

Cuối cùng, tôi đã nghe người ta đề cập đến một cú nảy nhẹ so với cú nảy mạnh. Ai đó có thể giải thích sự khác nhau và làm thế nào họ nên được tính để biết khi nào sẽ xóa vĩnh viễn ai đó khỏi một bản tin email?


Lưu ý rằng một địa chỉ email bao gồm từ "nảy" cũng có thể được xem là "yuck" ... (spam), nói rằng, nếu bạn có thể tự dán Message-Idtiêu đề của mình, thì nó phải được gửi lại và điều đó sẽ được gửi lại đủ để kiểm tra xem ai là ai
Alexis Wilke

Câu trả lời:


17

Câu trả lời chính xác cho câu hỏi của bạn (xử lý bounce-xxx@example.comđịa chỉ) phụ thuộc vào cách máy chủ của bạn được cấu hình để nhận thư. Nếu example.comlà miền ảo, cách tốt nhất bạn có thể làm là thu thập các tin nhắn trong bounce@example.comhộp thư (giả sử recipient_delimiter = -).

Nếu example.comlà miền được phân phối cục bộ cho máy chủ (thư được gửi đến tài khoản hệ thống thực tế) thì bạn có thể thêm .forwardtệp vào thư mục chính của bouncengười dùng, phân phối đến chương trình phân tích thông tin thoát và ghi lại trong cơ sở dữ liệu hoặc tệp . Xem man localđể biết thêm thông tin về .forwardđịnh dạng và cách phân phối đến một chương trình.

Những gì chúng tôi làm, vì chúng tôi gửi tin nhắn cho một số lượng lớn tên miền, được sử dụng bounces.example.comlàm tên miền VERP của chúng tôi. Tên miền này cần được thêm vào relay_domains. Tạo /etc/postfix/transport_mapsvới nội dung này:

bounces.example.com             bulkbounce:

Sau đó nối một dòng tương tự như /etc/postfix/master.cfsau:

số lượng lớn unix - nn - - ống
  user = none argv = / usr / local / bin / ounce_handler.py $ {người nhận}

Các bounce_handler.pykịch bản chấp nhận địa chỉ VERP như tùy chọn dòng lệnh của nó, phân tích nó và làm cho các bản cập nhật cơ sở dữ liệu cần thiết để ghi lại các thư bị trả lại.


Ôi, tôi thích ý tưởng sử dụng đồng hồ đo của người nhận để nhóm chúng lại. Thông thường a + được sử dụng phải không? Tôi nghĩ rằng sẽ làm việc tuyệt vời, cảm ơn!
Brian Armstrong

11

Trên thực tế, câu trả lời của Instyle rất khó thực hiện nếu bạn muốn hỗ trợ nhiều tên miền khác nhau và nó sai vì:

a) Với ví dụ của anh ấy transport_maps, tất cả các email được gửi đến tên miền đó được gửi đến dịch vụ cụ thể đó mà không liên quan đến việc email có bị trả lại email hay không. Vì nó sử dụng một tên miền cụ thể, nên nó thực sự chỉ bị trả về email ... nhưng nó không thể được đảm bảo theo cách đó.

b) Dữ liệu được gửi đến tập lệnh của bạn là chính email chứ không phải thư bị trả lại. Nói cách khác, mã của bạn có thể không biết tại sao email bị trả lại (tức là thư bị trả lại cục bộ sẽ chỉ gửi cho bạn email gốc.)


Cách chính xác để thực hiện thiết lập đó trong postfix là sử dụng lớp thông báo thoát.

1) Trong /etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = bounces@example.com
transport_maps = hash:/etc/postfix/transport_maps

2) Trong / etc / postfix / Transport_maps

# when you make changes to this file, run:
#   sudo postmap /etc/postfix/transport_maps
bounces@example.com bulkbounce:

Như bạn có thể thấy, bây giờ chúng tôi sẽ cho postfix sử dụng bounces@example.combất cứ khi nào email bị trả về. Sau đó, trong bản đồ vận chuyển, sử dụng bulkbouncelàm dịch vụ để xử lý bất kỳ địa chỉ email nào bounces@example.com.

Cuối cùng, bạn có thể xác định bulkbouncevới tập lệnh của mình:

3) Trong /etc/postfix/master.cf

bulkbounce unix -       n       n       -       -       pipe
  flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}

Kịch bản này yêu cầu bạn phải có người dùng. nobodycũng là một lựa chọn tốt Nếu bạn muốn có một người dùng cụ thể, bạn có thể tạo nó với:

useradd bounce

Không có tập lệnh trong master.cf, các email sẽ được gửi đến tài khoản số lượng lớn. Vì vậy, nếu bạn có một tập lệnh phân tích email từ các tệp, điều này sẽ hoạt động mà không cần transport_mapsmaster.cfthay đổi.


Từ một bình luận dưới đây:

FYI - tái: trả lại gấp đôi ...
nếu bạn đang sửa đổi các địa chỉ trả lại (địa chỉ VERP như user+id@fromdomain.com, sau đó bạn sẽ muốn xóa bỏ dòng trong main.cfcho bounce_notice_recipient, nếu bạn đang quan tâm đến việc phân tích các +idthư bị trả lại chỉ trong kịch bản của bạn.


Sử dụng theo cách của bạn, bằng cách nào đó tôi nhận được độ nảy hai lần, một lần với độ nảy + id @ ... và một lần với độ nảy @ ... từ độ nảy kép - (độ nảy của người dùng không thực sự tồn tại trên hệ thống - vì tôi không có ý định 'Lưu' những email này). Email được gửi với đường dẫn trả lại + id @ ... Bạn có biết tôi đang thiếu gì không?
RVandersteen

@RVandersteen Tôi không chắc tại sao bạn lại nhận được hai lần. Một trong những có +id@thể là một phong bì của một số loại?
Alexis Wilke

Khi tôi sử dụng địa chỉ 'từ' mặc định của chúng tôi - thư bị trả lại vẫn được gửi đến địa chỉounce@example.com và originalfrom@example.com (không thêm đường dẫn nào được thêm vào nữa)
RVandersteen

1
Để tham khảo trong tương lai, việc thêm notify_groupes không thay đổi hành vi của MTA gửi thông báo thoát tới Đường dẫn TỪ / Trả về. Nó thêm hành vi lên trên nó (cũng gửi nó đến notify_bounce_recipient). Đây là lý do tại sao tôi có hai thư đến. Câu trả lời cho câu hỏi của tôi ở trên
RVandersteen

1
fyi - re: double bounces..nếu bạn đang sửa đổi địa chỉ trả về (địa chỉ VERP như 'user+id@fromdomain.com', thì bạn sẽ muốn nhận xét dòng trong main.cf cho'ounce_notice_recipient ', nếu bạn quan tâm đến việc phân tích cú pháp + id chỉ trong tập lệnh của bạn.
sarora

1

Hầu hết các phần mềm danh sách gửi thư hiện đại đã biết cách xử lý các thông báo VERP nếu MTA được cấu hình đúng để chuyển chúng trở lại phần mềm danh sách gửi thư. Trong trường hợp GNU Mailman, bạn nên kiểm tra trang Câu hỏi thường gặp có tên "Làm cách nào để sử dụng ĐỘNG TỪ với một dấu phân cách (Postfix receive_d006iter)?".

Nếu bạn đang tạo phần mềm bản tin tùy chỉnh của riêng mình để xử lý việc này, bạn nên tự hỏi tại sao bạn lại phát minh lại bánh xe thay vì sử dụng các ứng dụng hiện có có thể xử lý công việc một cách đơn giản và dễ dàng cho bạn.


Đúng, tôi đang tạo phần mềm bản tin của riêng mình. Có một lý do tốt!
Brian Armstrong

Sau đó, bạn nên xem việc sử dụng ĐỘNG TỪ để xử lý các lần thoát đúng.
Jeremy Bouse

Xin chào Jeremy, tôi nghĩ rằng bạn đúng ĐỘNG LỰC là giải pháp tiêu chuẩn ở đây, mặc dù có vẻ như nó chỉ hữu ích để xác định người gửi và người nhận. Trong trường hợp này, chúng tôi cũng cần xác định thông điệp cụ thể đã gây ra phản hồi, vì vậy tôi tin rằng chúng tôi sẽ phải thực hiện một giải pháp tùy chỉnh với ID riêng của chúng tôi trong địa chỉ. Tôi nghĩ rằng giải pháp được đề cập dưới đây bằng cách sử dụng phân định người nhận sẽ cho phép chúng tôi nhóm chúng lại với nhau trong một tài khoản thoát. Cảm ơn đã phản hồi mặc dù tôi đánh giá cao sự giúp đỡ!
Brian Armstrong

Giải pháp của Insyte chỉ là một ĐỘNG TỪ được sửa đổi ở cốt lõi của nó. Bạn chỉ cần đảm bảo rằng nó cung cấp đủ số nhận dạng duy nhất cho trình xử lý thoát của bạn để xác định nó. Trong hầu hết các phần mềm danh sách gửi thư là địa chỉ email, nhưng có thể là bất cứ điều gì kể từ khi bạn thiết kế của riêng bạn.
Jeremy Bouse
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.