Dengan menggunakan postfix, saya ingin semua email masuk, ke alamat apa pun (termasuk yang tidak dipetakan ke pengguna lokal) untuk disalurkan ke skrip. Saya sudah mencoba mengkonfigurasi mailbox_command
di /etc/postfix/main.cf
:
mailbox_command = /path/to/myscript.py
Ini berfungsi baik jika pengguna adalah pengguna lokal, tetapi gagal untuk pengguna "tidak dikenal" yang tidak memiliki alias. Saya mencoba pengaturan luser_relay
ke pengguna lokal, tetapi ini pre-empts mailbox_command
, sehingga perintah tidak bisa dijalankan. Saya mencoba pengaturan local_recipient_maps=
(string kosong), tetapi pesan masih terpental (pengguna tidak dikenal).
Apakah ada doa ajaib yang bisa saya gunakan untuk membuat semua pengguna yang dikenal dan tidak dikenal pergi ke skrip juga?
Lengkap /etc/postfix/main.cf
berikut - ini adalah Ubuntu 10,04 default, dengan pengecualian mailbox_command
baris:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = ... snip ...
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = sassafras, ... snip ...,localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
mailbox_command = /path/to/my/script.py
Jawaban:
Ok, saya baru saja bekerja - meskipun lebih haiier daripada yang saya kira. Saya menjatuhkan
maildir_command
bagian itu, dan pergi bersamatransport_maps
. Kuncinya adalah melakukan 5 hal:/etc/postfix/master.cf
untuk mengirim mail ke skrip./etc/postfix/main.cf
untuk menggunakan transport db untuktransport_maps
, dan alias db untukvirtual_alias-maps
.(1) Buat
/etc/postfix/virtual_aliases
untuk menambahkan alias catch-all -localuser
perlu pengguna lokal yang ada:(2) Buat
/etc/postfix/transport
untuk menambahkan pemetaan transportasi. "mytransportname" dapat berupa apa pun yang Anda inginkan; digunakan di bawah ini dimaster.cf
:(3) Selanjutnya, keduanya
transport
danvirtual_aliases
perlu dikompilasi ke file berkeley db:(4) Tambahkan transportasi ke
/etc/postfix/master.cf
:(5) Dalam
/etc/postfix/main.cf
:Dan ... senang pergi! Sheesh.
sumber
relay_domains
(dalam hal ini file transport dapat memfilter berdasarkan alamat To: aktual).virtual_transport = mailcaptcha:
masukmain.cf
danmailcaptcha unix - n n - - pipe flags=FR user=vmail argv=/usr/bin/perl /usr/local/mail-captcha/verify.pl ${sender} ${recipient}
masukmaster.cf
. Lihat postfix.org/transport.5.html dan postfix.org/VIRTUAL_README.html .postfix restart
ataureload
atau sesuatu seperti ini? Hal terakhir: apakah ada file log untuk melihat mail yang datang ke postfix?/var/log/mail.log
.Satu-satunya waktu saya menggunakan sesuatu seperti ini adalah untuk kotak surat pengguna tertentu. Semua yang diperlukan adalah alias nama pengguna itu ke pipa dan proses dalam alias:
Lalu lintas yang dikirim ini ditujukan untuk "[email protected]" ke skrip perl yang saya tulis untuk memprosesnya.
gotit.pl (sebagai contoh, jangan pilih saya karena skill pemrograman jelekz =). Tugasnya adalah memproses email yang saya kirim ke server Exchange kami (yang dijawab secara otomatis melalui beberapa kode VB) untuk memverifikasi bahwa Exchange memproses email secara tepat waktu. Jika tidak, server email akan mengirimkan email peringatan ke pager kami dan menulis file kunci agar kami tidak terus-menerus terkena spam.
sumber
Saya telah menggunakan "flat file" gaya lama
Mailbox
untuk menerima semua email (dan kemudian memangkasnya setiap beberapa jam jika besar), daripada menggunakanmaildir/
folder modern , untuk memproses email melalui skrip. Anda dapat menjalankan logrotate di atas file juga saya kira untuk membuatnya dapat dikelola.Dengan cara ini Anda cukup menyalin semua email ke Kotak Surat sebagai pengguna lokal.
sumber
Setelah banyak sakit kepala saya kumpulkan solusi ini berdasarkan pada beberapa sumber berbeda yang menghasilkan usaha yang jauh lebih sedikit, langkah-langkah kritisnya adalah mengonfigurasi
virtual_alias_domains
jugavirtual_alias_maps
dan memastikan bahwa pemetaan virtual adalah untukmy-alias@localhost
alih-alih adilmy-alias
. Dalam contoh saya alias perintah adalah untuk menyalurkan email ke titik akhir API situs web, tetapi bisa juga dengan mudah menyalurkan ke hal lain.Berikut langkah-langkah yang harus Anda ambil:
10 mail.your-domain-name
sudo apt-get install postfix
sudo vi /etc/postfix/main.cf
mydestination
nilaike akhir file
sudo apt-get vi /etc/aliases
sudo newaliases
sudo apt-get vi /etc/postfix/virtual_domains
(bidang #domain menekan peringatan)
sudo postmap /etc/postfix/virtual_domains
sudo apt-get vi /etc/postfix/virtual
sudo postmap /etc/postfix/virtual
sudo /etc/init.d/postfix reload
sumber