Postfix: ubah pengirim dalam pesan yang antri

8

Setelah penginstalan ulang yang lengkap, kami mengalami masalah dengan konfigurasi: alamat pengirim salah dan beberapa penerima (server email) menolaknya.

Jadi ada banyak surat yang terjebak dalam antrian Postfix.

Idealnya, perubahan alamat pengirim langsung di surat antrian, dan kemudian pembilasan antrian akan optimal.

Saya mencoba jawaban ini yang mengatasi masalah ini. Tetapi pesan tampaknya tidak mudah dimodifikasi dalam versi yang saya miliki (2.11.0).

Misalnya tidak ada /var/spool/mqueuedir, tetapi, sebaliknya,/var/spool/postfix/...

active
bounce
corrupt
defer
deferred
dev
etc
flush
hold
incoming
lib
maildrop
pid
private
public
saved
trace
usr

dan dir bunga adalah deferred. Saya mencoba untuk memodifikasi beberapa file di sana mengubah domain yang salah dengan yang benar (dan berhati-hati untuk memastikan hanya itu yang diubah).

Tapi kemudian, surat-surat itu dipindahkan ke corrupt, yang berarti bahwa perubahan teks sederhana tampaknya tidak berhasil (selesai dengan vi).

Adakah cara lain yang lebih bersih untuk mengubah pengirim dalam antrian surat?

e2-e4
sumber

Jawaban:

19

Saya mencoba ini r yang menjawab masalah ini. Tetapi pesan tampaknya tidak mudah dimodifikasi dalam versi yang saya miliki (2.11.0).

Misalnya tidak ada dir / var / spool / mqueue, tetapi, sebaliknya, / var / spool / postfix / ...

Saya ingin mengklarifikasi dua hal.

  • Pertama, jawaban itu diterapkan pada sendmail TIDAK postfix.
  • Kedua, manipulasi langsung-raw-queue-file tidak didukung sama sekali.

Jadi, Anda memiliki beberapa opsi di sini

1. parameter smtp_generic_maps

Jawaban ini terinspirasi oleh jawaban yang luar biasa ini . Itu akan menulis ulang alamat lama ke alamat baru secara otomatis. Anda dapat menentukan file ke peta alamat lama ke alamat baru.

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    [email protected]       [email protected]

Jangan lupa untuk postmap /etc/postfix/genericberlaripostfix reload

  • Terbalik: Anda tidak perlu mengirim pesan lagi
  • Kelemahan: Postfix akan menulis ulang alamat pengirim dan penerima yang cocok [email protected].

2. sender_canonical_address

Untuk mengatasi kelemahan dari opsi pertama, Anda bisa menggunakan sender_canonical_maps. Solusi ini berdasarkan saran penulis Postfix . Sama seperti opsi pertama, Anda dapat menentukan file ke peta alamat lama ke alamat baru.

/etc/postfix/main.cf:
    sender_canonical_maps = hash:/etc/postfix/sender_canonical

/etc/postfix/sender_canonical:
    [email protected]       [email protected]

Jalankan postmap /etc/postfix/sender_canonicalkemudian jalankan postfix reload. Karena aliran antrian postfix, Anda harus kembali mengantri antrian yang terkena dampak dengan perintahpostsuper -r queueid

  • Terbalik: Postfix tidak menulis ulang alamat penerima.
  • Kelemahan: Anda harus membagikan semua pesan yang terpengaruh. Tetapi Anda dapat meminta semua ditangguhkan dengan perintah tunggalpostsuper -r ALL deferred

3. memanipulasi langsung antrian postfix

Ini adalah cara lama manual untuk memodifikasi antrian untuk pemrosesan lebih lanjut. Jawaban ini datang dari milis pengguna postfix

Pendeknya

  • Ekstrak antrian

    # postsuper -h queueid
    # postcat -qbh queueid > tempfile.eml
    # vi tempfile.eml
    
  • Kirim ulang antrian dan hapus antrian lama

    # sendmail -f $sender $recipient < tempfile.eml
    # postsuper -d queueid
    

Untuk dokumentasi perintah di atas, lihat halaman ini

Catatan:
Solusi asli dari milis postfix-pengguna , gunakan postcat -q queueid >tempfileuntuk mengekstrak antrian. Perintah ini akan mengekstrak tajuk, badan, dan meta-informasi antrian. Seperti yang ditunjukkan Azendale di bawah ini , sendmailakan menolak untuk mengirim email yang cacat ini karena meta-informasi.

Menggunakan -bhparameter selain qparameter akan membuat filter postcat output ke header dan tubuh saja, tidak termasuk meta-informasi. Manfaat sampingan dari hal ini adalah tempfile adalah dalam format yang paling dikenal oleh klien email sebagai format .eml, memungkinkan Anda untuk melihat pesan yang dihasilkan (diedit).

masegaloeh
sumber
1
Saya mencoba ini, dan setidaknya dengan versi postfix saya, sepertinya tidak mengirim pesan sampai saya menggunakan sesuatu seperti postcat -qbh queueid >tempfile. (Keuntungan sampingan: dalam format .eml.) Jika saya hanya menggunakannya -q, sepertinya tidak melakukan apa-apa ketika saya menjalankan sendmail. Versi postfix 2.8.4. Adakah yang bisa mengkonfirmasi ini? Jika demikian, mari kita edit jawaban ini.
Azendale
Hai @ Azendale, saya menguji ulang solusi ketiga dan ya kita perlu menggunakannya qbhuntuk membuatnya bekerja. Menambahkan penjelasan dalam jawaban yang diperbarui ... :)
masegaloeh
Terima kasih! Sedang mencari solusi ketiga seperti. itu sempurna!
JazZ
1

Lelang greate. Saya mempunyai masalah dengan mail server yang telah berjalan beberapa hari dengan konfigurasi yang buruk dan karena itu ada banyak antrian yang perlu dikirim ulang dengan penerima baru. Jadi saya membuat dua satu liner untuk mengulang semua antrian:

Yang pertama untuk menemukan semua antrian, menahannya, menyimpannya sebagai file .eml dan mengirimnya kembali:

for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -h $ID; postcat -qbh $ID > tempfile$ID.eml; sendmail -f $sender $recipient < tempfile$ID.eml; done

Kedua untuk menghapus antrian:

for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -d $ID; done

Ingatlah untuk memeriksa bahwa tidak ada antrian baru yang tidak ditahan sebelum menjalankan kode terakhir ini. Lakukan itu dengan menerbitkan ini dan cari nomor antrian tanpa tanda '!' pada akhirnya:

mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }'

On dapat dengan mudah memasukkan kedua baris itu menjadi satu, tetapi saya merasa memiliki kendali lebih besar dengan memeriksa apakah surat-surat itu benar-benar diterima sebelum menghapus antrian.

Jorn
sumber