#!/usr/bin/perl -w ##### # # vacation - Programm zum automatischen beantworten von engehenden eMails # # * needs $HOME/.vacation.msg (mailheader and body as text without To:-Line) # * syntax: $HOME/.forward: |/usr/bin/vacation # * installation: $ touch /var/log/vacation.log; chmod 666 /var/log/vacation.log # * Copyright: Achim Schmidt, schmidt@waaf.net 2002-06-05 # * Changes: 2002-06-11: Mail with Precedence bulk isn'treplied any more # ##### my ($pat, $user, $homedir, $a, $mail_in, $pat_from1, $pat_from2, $mail_emp, $mail_body, $tmp, $logfile, $sendmail, $pat_bulk); $logfile = "/var/log/vacation.log"; $sendmail = "/usr/lib/sendmail"; $user = $ARGV[0]; while () { $mail_in .= $_; } sub logzeile { my ($logfile, $text) = @_; my ($se, $mi, $st, $mo, $mt, $ja, $wt, $jt, $sz) = localtime(time); $mt+=1; $ja+=1900; $jt+=1; $mt = $mt < 10 ? $mt = "0".$mt : $mt; $mo = $mo < 10 ? $mo = "0".$mo : $mo; $st = $st < 10 ? $st = "0".$st : $st; $mi = $mi < 10 ? $mi = "0".$mi : $mi; $se = $se < 10 ? $se = "0".$se : $se; my ($auszeit) = "$ja-$mt-$mo $st:$mi:$se"; my ($ruck) = "$auszeit | $text\n"; open(LOGG1, ">>$logfile"); print LOGG1 "$ruck"; close(LOGG1); } $pat = "\n$user:(.*):(.*):(.*):(.*):(.*):(.*)"; $pat_from1 = 'From:(.*)\n'; $pat_from2 = 'Return-Path:(.*)\n'; $pat_bulk = 'Precedence: bulk'; if(! $user){ die "syntax: $0 benutzername\n";} open(DATEI, ") { $a .= $_; } close(DATEI); if($a =~ /$pat/){ $homedir = $5; if($mail_in =~ /$pat_from2/){ $mail_empf = $1; } else { if($mail_in =~ /$pat_from1/){ $mail_empf = $1; } } if($mail_in =~ /$pat_bulk/){ logzeile("$logfile", "vacation Loop: '$user' gegen '$mail_empf'!"); exit 0; } if(! $mail_empf){ logzeile("$logfile", ".vacation.msg für '$user' in '$tmp' nicht gefunden!"); exit 0; } $tmp = "$homedir/.vacation.msg"; if( stat($tmp) ){ open(DATEI2, "<$tmp"); while () { $mail_body .= $_; } close(DATEI2); open(MAIL,"|$sendmail -t") || die; print MAIL "To: $mail_empf\n$mail_body\n"; close(MAIL); logzeile("$logfile", "'$user' -> $mail_empf"); exit 0; } else { logzeile("$logfile", ".vacation.msg für '$user' in '$tmp' nicht gefunden!"); exit 0; } } else { logzeile("$logfile", "Benutzer '$user' in '/etc/passwd' nicht gefunden!"); exit 0; } exit 0;