#! /usr/bin/perl -w # mailandfax.pl v. 1.0 # nik@nerxs.com # Changes a mail to a fax und sends it to the number # given in the last part of the To-address p.e. efax-0221213415. # Only working with qmail and efax. use POSIX; # set these for testing purposes only. They are only needed when # using MailAndFax directly without dot-qmail. If using the dot-qmail-file the # environment values are taken instead. $faxnumber = ""; $sender = "sender@this.domain"; ## configuration part. Change these! # qmail-inject path $qmailinject = "/var/qmail/bin/qmail-inject"; # modem device $device = "/dev/cuaa1"; # Language. Set this to "en" for english error messages $lang = "en"; # Local ID set on top of every page p.e. +49 221 456777 $localid = ""; # Sender only on first page p.e. C0re GmbH . Bonner Talweg 54 . 53113 Bonn . Germany $header = ""; ## end of configuration part $subject = ""; $content = ""; $i = 0; $date = strftime("%d.%m.%Y", localtime); $time = strftime("%H:%M", localtime); # Get faxnumber from To-address if ($ENV{EXT}) { $faxnumber = $ENV{EXT}; } # mail success and error replies if ($lang eq "en") { $buisy = "The dialed number was busy or the modem device was in use. Try again later.\n"; $error = "An error occured. Please check efax man page or your qmail logfile for more details. Error code: "; $errorsubject = "MailAndFax error "; $success = "The fax has succesfully been send to " . $faxnumber . ".\n"; $successsubject = "MailAndFax success "; } else { $buisy = "Die von Ihnen gewählte Faxnummer " . $faxnumber . " ist besetzt oder das \nModem wird gerade benutzt. Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.\n"; $error = "Ihr Fax an die Faxnummer " . $faxnumber . "konnte nicht versandt werden. \nBitte überprüfen Sie die Faxnummer und versuchen Sie es erneut. Beachten\nSie bitte, dass die Faxnummer keine Klammern, Leerzeichen oder\nSonderzeichen außer \"-\" oder \"/\" enthalten darf. Sollte der Fehler\ntrotz richtiger Faxnummer weiterhin auftreten, wenden Sie sich bitte\nan Ihren Administrator. \n\nFehler-Code: "; $errorsubject = "MailAndFax Fehlerbenachrichtigung "; $success = "Dieses Fax wurde am $date um $time Uhr erfolgreich an die Faxnummer $faxnumber versandt."; $successsubject = "MailAndFax Versandbestätigung "; } # Get mailsender if ($ENV{SENDER}) { $sender = $ENV{SENDER}; } # read mail from STDIN while () { # Get newline after headers. Delete all headers. if ($_ eq "\n" && $i == 0) { $content = ""; $i++; } elsif ($_ =~ /^Subject:/) { s/Subject: //; $subject = $_ . "\n"; } else { $content = $content . $_; } } $pid = getpid(); $file = "tmp/tmp-".$pid .".txt"; # write fax to a file unless (open FILE, ">$file") { die "Error: MailAndFax could not open $file.\n"; } print FILE "\n\n"; print FILE $header; print FILE "\n\n"; print FILE $subject; print FILE $content; close(FILE); # change permissions of that file unless (chmod(0777,$file)) { die "Error: MailAndFax could not chmod 777 $file. \n"; } # make gif to send via fax system("fax make $file"); # get name of all files $find = "find tmp/ -type f |grep " . $file . "."; @faxfiles = `$find`; $sendfax = "efax -d " . $device . " -l \"" . $localid . "\" -t " . $faxnumber; foreach $faxfile (@faxfiles) { chomp($faxfile); $sendfax = $sendfax . " " . $faxfile; } # send fax and get return value. $info = system($sendfax); $info = $info/256; # remove all temporary files. system("rm -f $file*"); # success if ($info == 0) { open INJECT, "|$qmailinject"; print INJECT "To: $sender\n"; print INJECT "Subject: " . $successsubject . $subject; print INJECT "\n"; print INJECT $success; print INJECT "\n\n----\n"; print INJECT $content; close INJECT; print "MailAndFax: Fax send successfully to $faxnumber.\n"; } elsif ($info == 1) { open INJECT, "|$qmailinject"; print INJECT "To: $sender\n"; print INJECT "Subject: " . $errorsubject . $subject; print INJECT "\n"; print INJECT $buisy . $info; print INJECT "\n\n----\n"; print INJECT $content; close INJECT; print "Error: $info\n"; print "Error: MailAndFax efax has been unsuccessful.\n"; } # no success else { open INJECT, "|$qmailinject"; print INJECT "To: $sender\n"; print INJECT "Subject: " . $errorsubject . $subject; print INJECT "\n"; print INJECT $error . $info; print INJECT "\n\n----\n"; print INJECT $content; close INJECT; print "Error: $info\n"; print "Error: MailAndFax efax has been unsuccessful.\n"; }