Postfix'i e-postayı geçirme yerine bir dosyada saklayacak şekilde nasıl ayarlarım?


9

Bir üretim sunucusunun hazırlama kopyasını yerel bir ortamda çalıştırmak istiyorum. Sistem, çeşitli senaryolarda müşterilere e-posta gönderen bir PHP uygulaması çalıştırıyor ve hazırlama ortamından hiç e-posta gönderilmediğinden emin olmak istiyorum.

Bu yüzden kukla bir e-posta göndereni kullanır kod tweak olabilir, ama üretim ortamı ile aynı kodu çalıştırmak istiyorum. Farklı bir MTA (Postfix sadece üretimde kullandığımız şey) kullanabilirim, ancak Debian / Ubuntu altında kurulumu kolay bir şey istiyorum :)

Bu nedenle, yerel Postfix kurulumunu tüm e-postaları (bir veya daha fazla) dosyaya aktarmak yerine depolayacak şekilde ayarlamak istiyorum. Aslında, gönderilen e-postayı kontrol etmek mümkün olduğu sürece nasıl saklandığını umursamıyorum. Postfix'e e-postayı posta kuyruğunda tutmasını söyleyen bir kurulum seçeneği bile (hazırlama sunucusunu üretimden bir kopyayla yeniden yüklediğimde kuyruğu temizleyebilirim).

Bunun mümkün olduğunu biliyorum, oldukça yaygın bir ihtiyaç gibi görünen şey için çevrimiçi olarak iyi bir çözüm bulamadım.

Teşekkürler!

Yanıtlar:


12

Bir dosyaya e-posta yazan bir komutla yeni bir aktarım oluşturdum.

Temelde:

  1. E-posta sahibi olacak bir kullanıcı oluşturun (veya mevcut bir kullanıcıyı kullanın). Benimkini aradımemail
  2. mkdir /home/email/bin
  3. Aşağıdaki betiği yerleştirin /home/email/bin/mail_eater(bu PHP kullanır, ancak kendi sürümünüzü istediğiniz dilde yazabilirsiniz, sadece bir dosyaya stdin ekler):

    #!/usr/bin/php
    <?php
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
        $email .= fread($fd, 1024);
    }
    fclose($fd);
    $fh = fopen('/home/email/email.txt','a');
    fwrite($fh, $email."\n-------------------------------------------------------\n\n");
    fclose($fh);
    
  4. chmod a+x /home/email/bin/mail_eater
  5. touch /home/email/email.txt
  6. chmod a+r /home/email/email.txt
  7. Aşağıdaki satırı ekleyerek bu dosyayı kullanarak yeni bir aktarım oluşturun master.cf:

    file_route unix -    n    n    -    -    pipe user=email  argv=/home/email/bin/mail_eater
    
  8. Bunu varsayılan taşıma olarak şu yerlerde kullanın main.cf:

    default_transport = file_route
    

Orada :)


3

Sen içine bu alan adlarını koyabilirsiniz $mydestinationin main.cfpostfix yerel olarak teslim edecek, böylece.

İsterseniz farklı yerel kullanıcılar ayarlayabilir veya e-postaları tek bir hesaba iletmek için yerel bir tümünü yakalama adresi oluşturabilirsiniz, daha fazla ayrıntı burada: http://www.postfix.org/ADDRESS_REWRITING_README.html#luser_relay

Tüm alanlar için:

mydestination = pcre:/etc/postfix/mydestinations

ve /etc/postfix/mydestinationsiçermeli

/.*/    ACCEPT

Şu anda test yapamıyorum ama işe yaramalı.


Hedef alan adlarının neye benzediğini bilmiyorum (gerçek bir müşteri veritabanından geliyorlar). Yine de bağlantıyı kontrol edeceğim.
GomoX

Güncelleme için teşekkürler, "temiz" gibi görünüyor ama seninki de çalışması gerektiği gibi görünüyor kendi soruna kendi çözüm yolladı.
GomoX

Amaçlandığı gibi çalışmak için bunun da ayarlanması gerekir local_recipient_maps = . Sağladığınız bağlantıda açıklanmıştır, ancak yanıtta da belirtilmesi gerektiğini düşünüyorum.
jojman

2

dene (main.cf dosyasında):

defer_transports = smtp

daha sonra kuyruğu görebilir postqueue -pve içeriği izleyebilirsinizpostcat


0

Dağıtımınıza bağlı olarak "nullmailer" e bakabilirsiniz. Bu, ağınızdaki veya uzaktan kumandanızdaki başka bir SMTP'ye geçiş yapan bir geçiş MTA'sıdır. Bu çok geçersiz bir SMTP olabilir ve bu durumda muhtemelen sadece makinedeki bir klasörde bir kuyruğa sokulur.

Debian ve ubuntu'da bu, sisteminiz için yedek MTA olarak kullanılabilir.


0

Bu, http://blog.malowa.de/2011/04/postfix-as-spam-trap-server.html adresinden kopyalandı ve biraz değiştirildi :

Postfix'i bir nullmailer olarak çalışacak şekilde yapılandırmanız bile gerekmez. Postfix smtp-sink, hile yapan adlı temiz bir araçla birlikte gönderilir . smtp-sink'in temelde oynamak için bir Sunucuya ihtiyaç duyan SMTP istemcileri için bir test aracı görevi görmesi amaçlanmıştır. Böylece, tüm ileti dizisini günlüğe kaydedecek veya alınan her postayı bir dosyaya dökecek şekilde yapılandırabilirsiniz. İkincisi bir nullmailer için gereklidir.

Smtp-sink'i yapılandıracak yapılandırma dosyası yok. Her şey komut satırı seçenekleri ile yapılır.

smtp-sink -c -d "%Y%m%d%H/%M." -f . -u postfix -R /tmp/ -B "550 5.3.0 The recipient does not like your mail. Don't try again." -h spamtrap.example.com 25 1024

Her parametreye daha yakından bakalım.

-u postfix
Runs the program under the user "postfix"
-R /tmp/
Sets the output directory to /tmp/. In this directory the mails will be stored. If you have a high spam volume (hundreds of Spam per minute) it is recommended to write the mails to a ramdisk
-d "%Y%m%d%H/%M."
Writes the mail to a directory of the format "YearMonthDayHour" and in this directory the files are name "Month.RandomID". Note that the dates are in UTC
-c
Write statistics about connection counts and message counts to stdout while running
-f .
Reject the mail after END-OF-DATA. But the mail will be saved. Cool, isn't it?!
-B "550 5.3.0 The recipient does not like your mail. Don't try again"
This is the rejection message after END-OF-DATA.
-h spamtrap.example.com
Announce the hostname spamtrap.example.com
25
The port to listen on. Can be prepended with an IP or host if you want to bind on a special interface.
1024
The backlog count of connections that can wait in the TCP/IP stack before they get a free slot for sending mail.

Smtp-sink'in man sayfasında daha fazla bilgi bulabilirsiniz, ancak bunlar bir tümünü yakalama spamtrap'ı çalıştırmak için önemli olanlardır. Bu yapılandırmada, program herhangi bir gönderenden IPv4 ve IPv6 ile herhangi bir alıcıya herhangi bir boyutta posta kabul eder. Tek kısıtlama 1024 kuyruklu bağlantı ile sadece 256 eşzamanlı bağlantı mümkün olmasıdır ve program deneysel olarak işaretlenmiştir. Bu nedenle üretim ortamında smtp-sink kullanmayın.

-B seçeneği yalnızca Postfix'in daha yeni sürümlerinde geçerlidir. 2.7.1'de eksik. 2.8.2'de mevcuttur. Arada bir yerde tanıtıldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.