Postfix/Mysql Auto-Reply Vacation Message
Özellikle tatile çıkan kullanıcıların, mail gönderen kişiye otomatik olarak tatildeyim mesajı göndermesini sağlayacak bir yapıyı Postfix üzerinde kuracağız. Bunu yapmak için, mail sistemi yapınıza uygun olarak birden fazla yöntem mevcuttur. Bu yöntemler icerisinde benim en çok beğendiğim ve kullandığımı Debian üzerinde anlatacağım.
Öncelikle zaten Postfix üzerinde bir mail sisteminiz olduğunu düşünüyorum. İşlemler bu yapınıza ek olarak yapacaklarınızı kapsamaktadır.
1. Response mailini perl ile göndereceğiz. Bunun için aşağıdaki paketlerin yüklü olması gerekiyor.
# apt-get install libemail-mime-encodings-perl libmime-perl libemail-mime-contenttype-perl libmime-types-perl libdbd-mysql-perl libclass-dbi-mysql-perl libemail-valid-perl libmail-sendmail-perl \
vacation libmail-sender-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl
2. User , dizinler ve dosyalar ayarlanır:
vacation adında bir kullanıcı yaratiyoruz
# adduser vacation –no-create-home –disabled-login
# mkdir /var/spool/vacation
Mail gönderme işlemini yapacak perl script ini yukarıda açtığımız dizin içerisine kopyalıyoruz:
vacation dosyasını indirip rar içindeki “vacation.pl” dosyasını “/var/spool/vacation” dizine içerisine kopyalayınız. Sonra izinler:
# chown -R vacation:vacation /var/spool/vacation
# chmod 700 /var/spool/vacation/vacation.pl
Log dosyaları için:
# mkdir /var/log/vacation/
# chown -R vacation:vacation /var/log/vacation
3. Domain ve Transport a ekleme
Yapımıza göre transport ayarlarını dosyada , mysql’de ya da her ikisinde de tutuyor olabiliriz. İlgili yere transport ayarını eklemesiniz
Örneğin “/etc/postfix/transport” file kullanıyorsak, dosyaya aşağıdaki satı eklenir.
auto-reply.example.com vacation:
Daha sonra da aşağıdaki komut çalıştırılır:
# postmap /etc/postfix/transport
Eğer mysql de bir transport tablosunda tutuyorsak sadece o tabloya ekleme yapmak yeterli olacaktır.
# vi /etc/hosts
/ect/hosts dosyasına aşağıdaki satırı ekleyiniz:
127.0.0.1 auto-reply.example.com
4. vi /etc/postfix/master.cf
master.cf dosyasına eklenmesi gereken filter:
vacation unix – n n – – pipe
flags=Rhu user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} — ${recipient}
4. vi /etc/postfix/main.cf
main.cf ‘de olması gerekenler:
transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf, texthash:/etc/postfix/transport
recipient_bcc_maps = mysql:/etc/postfix/mysql-virtual_vacation.cf
vacation_destination_recipient_limit = 1
5. vi /etc/postfix/mysql-virtual_vacation.cf
user = root
password = xxxxx
dbname =vmail
table = mail_users
select_field = CONCAT(SUBSTRING_INDEX(email,’@’,1),’@auto-reply.’,SUBSTRING_INDEX(email,’@’,-1))
where_field = email
additional_conditions = and email IN (SELECT email from mail_vacation WHERE active=’1′)
hosts = 127.0.0.1
“/etc/postfix/mysql-virtual_vacation.cf” dosyası için yukarıdakine benzer bir tanımlama olmalıdır.
mail_users tablosu mail user larını tuttugumuz tablodur. Bunun zaten olması gerekir. Vacation tablosunu sonraki adımda biz yeni yaratacağız.
6. Veritabanı tabloları yaratılır:
CREATE TABLE `vacation` (
`email` varchar(255) NOT NULL default '',
`subject` varchar(255) NOT NULL default '',
`body` text NOT NULL,
`cache` text NOT NULL,
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(4) NOT NULL default '1',
PRIMARY KEY (`email`),
KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix – Virtual Vacation';
CREATE TABLE `vacation_notification` (
`on_vacation` varchar(255) NOT NULL default '',
`notified` varchar(255) NOT NULL default '',
`notified_at` timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix – Virtual Vacation Notifications';
6. İşiniz bitiyse restart yapıyoruz:
# /etc/init.d/postfix restart
7. Test
“vacation” tablosuna mail adresisinizi giriniz. Kendinize başka bir adresten mail atınız.
8. Umarım sorun çıkmaz. Eğer size 2 adet response donerse bunu şu şekilde çözebilirsiniz:
master.cf altında smtpd altına aşağıdakini ekleyiniz:
-o receive_override_options=no_address_mappings
Recent Comments