Saya menjalankan server surat Postfix / Dovecot untuk penggunaan pribadi. Hanya ada beberapa kotak surat yang sebenarnya, pada dasarnya adil [email protected]
dan [email protected]
.
Saya sering menggunakan virtual
file untuk membuat kotak surat virtual diteruskan ke [email protected]
. Saya memiliki sejumlah akun ini untuk akun sekali pakai seperti pembelian satu kali dari toko online, game online yang ingin saya coba tanpa khawatir tentang spam yang sedang berlangsung, dll. Untuk melakukannya, saya SSH dan menjalankan perintah berikut:
sudo vim /etc/postfix/virtual
# add a line that looks like:
# # [email protected] [email protected]
sudo postmap virtual
sudo service postfix restart
Saya melakukan ini dengan frekuensi yang cukup sehingga saya ingin mengotomatiskan proses sampai tingkat tertentu. Saya dianggap hanya menulis skrip shell yang mengambil kotak surat virtual dan kotak surat nyata sebagai argumen dan membuat perubahan itu sendiri, tetapi saya berharap untuk sesuatu yang lebih mudah.
Saya ingin dapat mengirim email dari [email protected]
ke beberapa kotak surat lain di server dengan nama kotak surat virtual sebagai badan pesan. Masalahnya adalah sudo
panggilan tetapi saya bisa membuat pengguna baru yang satu-satunya tanggung jawab untuk menangani ini yang harus mengatasinya.
Sebagian besar pertanyaannya adalah ini: bagaimana saya membuat acara yang akan dipicu oleh email? Apakah ada layanan di suatu tempat yang melakukan ini? Bisakah saya mengonfigurasi Postfix atau Dovecot untuk mendengarkan email itu dan menjalankan perintah pada acara itu?
Jawaban:
Prosedur yang benar untuk menjalankan skrip (saya menggunakan skrip shell) setelah menerima pesan email adalah sebagai berikut. Ini melibatkan memodifikasi file konfigurasi postfix , master.cf (yang, di Debian saya, terletak di / etc / postfix ) dengan menambahkan baris berikut:
yang menginstruksikan postfix untuk menjalankan skrip (Anda harus membuatnya dapat dieksekusi) ketika beberapa peristiwa terjadi.
Untuk menentukan kapan harus mengeksekusi skrip, Anda lakukan sebagai berikut: misalkan Anda ingin mengeksekusi ketika [email protected] menerima pesan. Tempatkan baris berikut
di dalam file /etc/postfix/address.txt ; Anda perlu membuat database yang tepat untuk postfix untuk menggunakan file ini, yang Anda selesaikan dengan
yang menghasilkan sebagai file yang disebut /etc/postfix/address.db . Sekarang kembali ke file /etc/postfix/main.cf dan tambahkan baris berikut:
Sekarang restart postfix ,
dan kamu harus baik untuk pergi.
sumber
sendmail
langsung di server tidak akan memicu ini.pickup
opsi ini.Saya dapat melihat dua solusi yang jelas.
Jika Anda menggunakan procmail sebagai MDA di server Anda, atau bersedia mengonversi untuk menggunakannya, maka Anda dapat menjalankan skrip sewenang-wenang pada email sembarang melalui
|
tindakan resep (pipa) procmail . Mudah-mudahan itu tidak akan dimulai sebagai root, tetapi harus mudah untuk membuat skrip yang melakukan sihir yang diperlukan dan yang dapat dipanggil tanpa password sebagai root oleh pengguna yang relevan. Output dari skrip bahkan dapat diumpankan kembali ke email yang sama dan email kemudian dikirimkan dengan membuat resep sebagai tindakan filter.Alternatif (yang seharusnya tidak membutuhkan perawatan langsung) adalah membuat satu kotak surat dan mengkonfigurasi Postfix
$recipient_delimiter
menjadi sesuatu yang biasanya tidak digunakan untuk tujuan itu; misalnya,.
atau-
. Perhatikan bahwa recipient_delimeter adalah pengaturan di seluruh server. Katakanlah Anda mengatur kotak surat[email protected]
dan mengatur$recipient_delimeter = .
. Ini kemudian akan memungkinkandummy.<anything>@example.com
yang akan dikirimkan ke kotak surat lokal yang sesuai dengan[email protected]
. Untuk menonaktifkan salah satunya, tambahkandummy.<whatever>@example.com
ke tabel penerima yang sesuai dengan tindakan tolak. Kelemahannya adalah kotak surat ini akan menampung semua awalan untuk awalan, jadi Anda ingin membuat awalan tersebut sulit tersandung oleh serangan kamus atau kecelakaan. Sisi baiknya adalah dalam kasus normal (pengirim menghormati keinginan Anda dan tidak menjual kembali alamat email Anda) pendekatan ini tidak memerlukan pemeliharaan, dan Anda selalu dapat mengubah awalan nanti dan secara eksplisit daftar kombinasi yang ingin Anda terus terima email untuk .sumber
Jika tautan turun, berikut ringkasannya.
Pertama, buka
master.cf
dan daftarkan skrip Anda "myhook" dengan menambahkan baris berikut:myhook unix - n n - - pipe flags=F user=www-data argv=/path/to/script.sh ${sender} ${size} ${recipient}
Juga, edit baris smtp untuk memberi tahu Postfix untuk menjalankan filter untuk semua surat yang datang melalui pengiriman SMTP:
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
Harap perhatikan bahwa jika Anda mengirim email menggunakan perintah "sendmail", filter tidak akan terpicu. Dalam hal ini, tambahkan opsi setelah metode pengiriman "pickup":
pickup fifo n - - 60 1 pickup -o content_filter=myhook:dummy
Mulai ulang postfix:
postfix reload
Jadikan skrip Anda dapat dibaca dan dieksekusi oleh siapa saja:
chmod +rx script.sh
Perhatikan bahwa skrip selalu dipicu untuk semua surat yang masuk. Untuk menentukan alamat yang tepat, lihat jawaban @MariusMatutiae.
sumber