Cara mengumpulkan bouncing di postfix

15

Ini terkait dengan pertanyaan ini:

linux - Cara mendapatkan laporan bounceback untuk aplikasi buletin saya? - Kesalahan Server

Katakanlah saya membuat alamat email seperti ini ketika saya mengirim buletin untuk mengidentifikasi bouncing dan berhenti berlangganan dari buletin saya: [email protected]

Saya menganggap saya akan menggunakan ini di jalur pengembalian, kan?

Lalu bagaimana saya mengaturnya di postfix untuk mengumpulkan semua alamat yang diawali dengan "bounce-" ke dalam satu kotak surat?

Akhirnya, saya pernah mendengar orang menyebutkan bouncing lembut vs bouncing keras. Dapatkah seseorang menjelaskan perbedaannya dan bagaimana mereka harus dihitung untuk mengetahui kapan harus menghapus seseorang secara permanen dari newsletter email?

Brian Armstrong
sumber
Perhatikan bahwa alamat email yang menyertakan kata "bouncing" juga dapat dilihat sebagai "yuck" ... (spam) —yang dikatakan, jika Anda dapat menempelkannya sendiri Message-Iddi header Anda, itu harus dikirim kembali dan itu akan cukup untuk memeriksa siapa yang.
Alexis Wilke

Jawaban:

17

Jawaban tepat untuk pertanyaan Anda (menangani [email protected]alamat) tergantung pada bagaimana server Anda dikonfigurasi untuk menerima email. Jika example.comdomain virtual yang terbaik yang dapat Anda lakukan adalah mengumpulkan pesan di[email protected] kotak surat (dengan asumsi recipient_delimiter = -).

Jika example.comdomain yang dikirim secara lokal untuk server (surat dikirim ke akun sistem yang sebenarnya) maka Anda dapat menambahkan .forwardfile ke direktori home bouncepengguna, yang mengirimkan ke program yang mem-parsing informasi bouncing dan mencatatnya dalam database atau file . Lihat man localuntuk info lebih lanjut tentang .forwardformat dan cara mengirim ke suatu program.

Apa yang kami lakukan, karena kami mengirim pesan untuk sejumlah besar domain, digunakan bounces.example.comsebagai domain VERP kami. Domain ini perlu ditambahkan relay_domains. Buat /etc/postfix/transport_mapsdengan konten ini:

bounces.example.com             bulkbounce:

Kemudian tambahkan baris yang mirip dengan ini ke /etc/postfix/master.cf :

bulkbounce unix - nn - - pipe
  user = tidak ada argv = / usr / local / bin / bounce_handler.py $ {penerima}

The bounce_handler.pyScript menerima alamat VERP sebagai opsi baris perintah nya, mem-parsing dan membuat update database yang diperlukan untuk merekam bounce.

Insyte
sumber
Ooh, saya suka ide menggunakan delimeter penerima untuk mengelompokkan mereka. Biasanya + digunakan kan? Saya pikir itu akan berhasil, terima kasih!
Brian Armstrong
11

Sebenarnya, jawaban Instyle sangat sulit diterapkan jika Anda ingin mendukung banyak domain berbeda dan itu salah karena:

a) Dengan contohnya transport_maps, semua email yang dikirim ke domain tersebut dikirim ke layanan spesifik tersebut tanpa memperhatikan apakah email itu bouncing email atau tidak. Karena menggunakan nama domain tertentu, itu memang seharusnya hanya bouncing email ... tetapi tidak dapat dijamin dengan cara itu.

b) Data yang dikirim ke skrip Anda adalah email itu sendiri dan bukan pesan pentalan. Dengan kata lain, kode Anda mungkin tidak tahu mengapa email itu bouncing (yaitu bouncing lokal akan mengirimi Anda email asli saja.)


Cara yang benar untuk melakukan pengaturan di postfix adalah dengan menggunakan kelas pemberitahuan bouncing.

1) Di /etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps

2) Di / etc / postfix / transport_maps

# when you make changes to this file, run:
#   sudo postmap /etc/postfix/transport_maps
[email protected] bulkbounce:

Seperti yang Anda lihat, kami sekarang memberi tahu postfix untuk menggunakan [email protected]setiap kali email terpental. Kemudian di peta transportasi, untuk digunakan bulkbouncesebagai layanan untuk menangani alamat email apa pun [email protected].

Akhirnya Anda dapat mendefinisikan bulkbouncedengan skrip Anda:

3) Di /etc/postfix/master.cf

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

Skrip ini mengharuskan Anda memiliki pengguna. nobodyjuga merupakan pilihan yang baik. Jika Anda ingin memiliki pengguna tertentu, Anda dapat membuatnya dengan:

useradd bounce

Tanpa skrip master.cf, email akan dikirim ke akun bulkbounce. Jadi jika Anda memiliki skrip yang mem-parsing email dari file, ini akan berhasil tanpa transport_mapsdan master.cfperubahan.


Dari komentar di bawah ini:

fyi - re: bouncing ganda ...
jika Anda mengubah alamat pengirim (seperti alamat VERP [email protected], maka Anda akan ingin mengomentari baris main.cfuntuk bounce_notice_recipient, jika Anda tertarik untuk menguraikan +idbouncing hanya dalam skrip Anda.

Alexis Wilke
sumber
Dengan menggunakan cara Anda, entah bagaimana saya menerima bouncing dua kali, sekali dengan bouncing + id @ ... dan sekali dengan bounce @ ... dari double-bounce - (pengguna bouncing sebenarnya tidak ada pada sistem - karena saya tidak bermaksud untuk 'simpan' email ini). Email dikirim dengan jalur pengembalian bouncing + id @ ... Ada yang tahu apa yang saya lewatkan?
RVandersteen
@RVandersteen Saya tidak terlalu yakin mengapa Anda akan mendapatkannya dua kali. Yang punya +id@mungkin semacam amplop?
Alexis Wilke
Ketika saya menggunakan alamat 'dari' default kami - bounce masih dikirim ke [email protected] dan [email protected] (tidak ada jalur balik yang ditambahkan lagi)
RVandersteen
1
Untuk referensi di masa mendatang, menambahkan notify_classes tidak mengubah perilaku MTA mengirim pesan bouncing ke FROM / Jalur Kembali. Itu menambahkan perilaku di atasnya (mengirimkannya juga ke notify_bounce_recipient). Inilah sebabnya saya menerima surat ganda. Yang menjawab pertanyaan saya di atas
RVandersteen
1
fyi - re: double bounces..jika Anda mengubah alamat pengirim (alamat VERP seperti '[email protected]', maka Anda ingin mengomentari baris di main.cf untuk 'bounce_notice_recipient', jika Anda tertarik untuk menguraikan bouncing + id hanya di skrip Anda.
sarora
1

Sebagian besar perangkat lunak milis modern sudah tahu bagaimana menangani pesan VERP jika MTA dikonfigurasi dengan benar untuk meneruskannya kembali ke perangkat lunak milis. Dalam kasus GNU Mailman Anda harus checkout halaman FAQ tepat bernama "Bagaimana cara saya menggunakan VERP dengan - pembatas (Postfix recipient_delimiter)?".

Jika Anda membuat sendiri perangkat lunak buletin kustom untuk menangani hal ini, Anda harus bertanya pada diri sendiri mengapa Anda menciptakan kembali roda alih-alih menggunakan aplikasi yang sudah ada yang dapat menangani tugas dengan mudah dan mudah bagi Anda.

Jeremy Bouse
sumber
Yap, saya membuat perangkat lunak buletin saya sendiri. Ada alasan bagus!
Brian Armstrong
Maka Anda harus melihat apakah itu menggunakan VERP untuk menangani bouncing dengan benar.
Jeremy Bouse
Hai Jeremy, saya pikir Anda benar VERP adalah solusi standar di sini, meskipun tampaknya hanya berguna untuk mengidentifikasi pengirim dan penerima. Dalam hal ini kita juga perlu mengidentifikasi pesan tertentu yang menyebabkan bouncing, jadi saya percaya kita harus melakukan solusi khusus dengan ID kita sendiri di alamat. Saya pikir solusi yang disebutkan di bawah ini menggunakan delimeter penerima akan membiarkan kami mengelompokkannya dalam satu akun bouncing. Terima kasih atas tanggapannya meskipun saya menghargai bantuannya!
Brian Armstrong
Solusi Insyte hanyalah VERP yang dimodifikasi pada intinya. Anda hanya perlu memastikan bahwa itu memberikan cukup pengidentifikasi unik untuk penangan bouncing Anda untuk mengidentifikasinya. Di sebagian besar perangkat lunak milis yang merupakan alamat email, tetapi bisa jadi apa saja karena Anda merancang sendiri.
Jeremy Bouse