/* This is a sample start-up script for mailfromd. -*- mfl -*- Site administrators are urged to write nicer versions. Copyright (C) 2005, 2006, 2007 Sergey Poznyakoff This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #error "Do not use this file 'AS IS'! Tailor it to suit your site!" #pragma option relay "/etc/mail/sendmail.cw" #pragma option relay "/etc/mail/relay-domains" #pragma regex +extended +icase #pragma option debug 1 #include_once #require dns set mailfrom_address "<>" set ehlo_domain "your.domain" number gltime set gltime interval("1 hour") number need_greylist set need_greylist 0 func cachestr() returns string do if %cache_used return "[CACHED] " else return "" fi done prog envfrom do if $f = "" pass elif hostname ${client_addr} matches ".*(adsl|sdsl|hdsl|ldsl|dialin|dialup|ppp|dhcp|dynamic).*" reject 550 5.7.1 "Use your SMTP relay" elif hostname ${client_addr} matches ".*-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}.*" on poll host ${client_addr} for $f do when success: pass when not_found or failure: reject 550 5.1.0 cachestr() "Sender validity not confirmed" when temp_failure: tempfail 450 4.1.0 "Try again later" done elif relayed hostname ${client_addr} pass elif $f mx fnmatches "*.yahoo.com" or $f mx fnmatches "*.namaeserver.com" set need_greylist 1 else on poll $f do when success: pass when not_found or failure: reject 550 5.1.0 cachestr() "Sender validity not confirmed" when temp_failure: tempfail done fi if rate($f "-" ${client_addr}, interval("1 hour 30 minutes")) > 100 tempfail 450 4.7.0 "Mail sending rate exceeded. Try again later" fi done prog envrcpt do if %need_greylist and not dbmap("/var/run/whitelist.db", $client_addr) if greylist($client_addr "-" $f "-" $rcpt_addr, %gltime) if %greylist_seconds_left = %gltime tempfail 450 4.7.0 "You are greylisted for " %gltime " seconds" else tempfail 450 4.7.0 "Still greylisted for " %greylist_seconds_left " seconds" fi fi fi done