php’nin mail fonksiyonuyla gönderilen posta kaydını tutmak


php’nin mail() fonksiyonuyla gönderilen e-postalar varsayılan olarak tanımlı sendmail yazılımı vasıtasıyla gönderilir. Sendmail’in ayarlarından LOG düzeyini arttırsanız da hangi dosyadan veya hangi kullanıcı tarafından gönderildiğini bulamazsınız. Hele web sağlayıcısı olarak hizmet veren bir makinanız varsa hangi kullanıcı sizin kaynaklarınızı kullanarak önemsiz e-posta gönderiyor tespit etmek zordur. Akla gelen yöntemse php ile posta sunucusu arasında sendmail e köprü görevi üstlenen ve aynı zamanda kayıt tutan bir yazılım eklemek. Şöyle;

vi /usr/sbin/sendmail.spamkontrol

diyerek içine

#!/usr/bin/perl
# use strict;
 use Env;
 my $date = `date`;
 chomp $date;
 open (INFO, ">>/var/log/spam_log") || die "Dosya Acilmadi ::$!";
 my $uid = $>;
 my @info = getpwuid($uid);
 if($REMOTE_ADDR) {
 print INFO "$date - $REMOTE_ADDR ran $SCRIPT_NAME at $SERVER_NAME n n";
 print 'n';
}
 else {
print INFO "$date - $PWD -  @infonn";
 print 'n';
}
 my $mailprog = '/usr/sbin/sendmail';
 foreach  (@ARGV) {
 $arg="$arg" . " $_";
 }
open (MAIL,"|$mailprog $arg") || die "cannot open $mailprog: $!n";
 while ( ) {
 print MAIL;
 }
 close (INFO);
 close (MAIL);

dosyayı kaydettikten sonra ;

chmod +x /usr/sbin/sendmail.spamkontrol 
touch /var/log/spam_log 
chmod 0777 /var/log/spam_log

Şeklinde gerekli yetkileri verdikten sonra isterseniz php.ini deki sendmail tarifini yeni dosyamız olan /usr/sbin/sendmail.spamkontrol olarak girebilirsiniz yada apache deki Virtual Host tanımına aşağıdaki gibi bir tanımlama girebilirsiniz.

php_admin_value sendmail_path '/usr/sbin/sendmail.spamkontrol'

Bu değeri herbir VirtualHost tanımına da girebilirsiniz.  Apache’yi tekrar başlattıktan sonra /var/log/spam_log dosyasında ağaşıdaki örnek kayıt dosyası gibi çıktı alacaksınız.

[root@immortal ~]# tail /var/log/spam_log
 Fri Aug 28 15:37:20 EEST 2009 - /home/testuser1 -
 Fri Aug 28 15:45:01 EEST 2009 - /home/testuser2 -
 Fri Aug 28 15:53:30 EEST 2009 - /home/testuser1 -
 Fri Aug 28 15:57:43 EEST 2009 - /home/testuser1 -
 Fri Aug 28 15:58:47 EEST 2009 - /home/testuser2 -
 Fri Aug 28 16:21:21 EEST 2009 - /home/testuser2 -

Eğer log dosyanızın boyutu çok büyürse log rotasyonu için /etc/logrotate.conf dosyasına aşağıdakileri ekleyebilirsiniz.


# SPAM LOG rotation
 /var/log/spam_log { 
 monthly 
 create 0777 root root     
 rotate 1
 }

[MattF ve ramprage’e teşekkürler]