Folgendes Howto dient dazu, Faxe mittels Hylafax als PDF in das OTRS
einzupflegen und auch damit zu verschicken. Außerdem ist es damit
möglich, Briefe über ein firmeninternes Faxgerät in eine eigene
"Briefqueue" einzupflegen. Das ganze läuft bei mir Ubuntu Server 7.10
und OTRS 2.2.4. (Zeichensatz UTF8), lässt sich aber sicher auch auf
andere Distributionen übertragen.
1.) Als erstes werden alle nötigen Packete installiert:
Code: Select all
apt-get install hylafax-server hylafax-client a2ps imagemagick fetchmail recode metamail mailtextbody
Falls musst du das bei einer anderen Distribution selbst machen.
Falls einige Pakete noch konfiguriert werden müssen, sollten die
Standardwerte die richtige Wahl sein. Bei mir war nur das Papierformat
einzustellen, welches aber schon richtig auf "A4" stand.
2.) Danach muss das Faxsetup aufgerufen werden:
Code: Select all
faxsetup
Ihr diese erstmal ignorieren und die gestellten Fragen alle mit "yes"
beantworten.
3.) Das Faxsetup ruft nun automatisch das Modemsetup auf, wenn vorher alle
Fragen mit "yes" beantwortet wurden. Als erstes wird der Port
abgefragt, an den euer Modem angeschlossen ist. Ich habe hier den
vorgeschlagenen COM1 (ttyS0) verwendet. Als nächstes kommt der Country
Code, der in Deutschland "49" ist. Danach kommt der Area Code. Nehmt
für diesen eure Vorwahl, ohne die führende 0. Als nächstes muss
nochmal die komplette Nummer mit Ländercode und Vorwahl eingegeben
werden. Orintiert euch einfach am vorgegebenen Beispiel. Nun wird der
Absendername abgefragt. Hier kann etwas beliebiges eingetragen werden,
wie z.B. "Support". Die nächsten Abfragen können alle mit "Enter"
bestätigt werden, bis die Abfrage kommt, ob ein weiteres Modem
konfiguriert werden soll. Diese und die nächste Abfrage sollte mit "no"
beantwortet werden.
In den Tabellen unter folgendem Link sind nochmal alle Optionen genau
erklärt: http://www.easylinux.de/Artikel/ausgabe ... 016-faxen/
4.) Als nächstes muss die Datei "/var/spool/hylafax/etc/FaxDispatch"
angelegt werden, in der die Einstellungen zum Faxverssand an das OTRS
gespeichert werden. In die Datei kommt nun noch folgender Inhalt:
Code: Select all
FROMADDR=fax@domain.de;
SENDTO=otrs@domain.de;
TOADDR=otrs@domain.de;
FILETYPE=pdf;
NOTIFY_FAXMASTER=never;
#case "$SENDER" in
#03012345678) FROMADDR=brief@domain.de;;
#esac
optional und daher erstmal auskommentiert. Er ist dafür zuständig, dass
Faxe die von einer bestimmten Nummer kommen eine andere "From" Adresse
bekommen und somit später anders vom OTRS gefiltert werden können.
Dies kann dazu verwendet werden, um z.B. Briefe als PDF in das OTRS
einzupflegen. Wenn man so ein Fax von einer internen Nummer schickt
entstehen dadurch natürlich auch keine Kosten durch Telefongebühren.
5.) Wenn man im Betreff der erzeugten Mail später nur die Telefonnummer
des Absenders haben möchte, sollte man das Template der verwendeten
Landessprache ändern. Dies ist zu empfehlen, da die Ticket ID schon
viel Platz weg nimmt und es sonst passieren könnte, dass die Nummer
im OTRS nicht komplett angezeigt wird.
In "/var/spool/hylafax/etc/templates/en/faxrcvd-success.txt"
Suche nach:
Code: Select all
Subject: Fax receivd from $SENDER
Code: Select all
Subject: $SENDER
an das OTRS gesendet wird. Die entsprechenden Teile der Datei müssen
natürlich an eure Gegebenheiten angepasst werden. Die Datei muss die
Dateirechte "0400" haben und dem User "uucp" gehören.
Damit sollte euer Server schonmal Fax empfangen können und in das OTRS
einpflegen. Ihr braucht dazu nur noch einen Postmasterfilter
einrichten, der nach der E-Mail Adresse filtert und in die Faxqueue
sortiert.
6.) Damit Ihr aus dem OTRS auch Faxe versenden könnt, ist es nötig,
dass die mit dem OTRS versendeten Faxantwortmails von Fetchmail abgeholt
werden. Fetchmail führt dann nach dem Empfang aller Mails ein Script
aus, welches die empfangene Mail in ein faxbares Format umwandelt und
letztendlich an die entsprechende Nummer faxt.
Achtung! OTRS darf die Mails nicht base64 codiert senden, damit es
funktioniert.
Als erstes muss also eine Datei "/root/.fetchmailrc" angelegt werden, die
folgenden Inhalt haben muss:
Code: Select all
poll mail.domain.de
proto pop3
user "fax"
pass "yourpass"
is faxmaster
postconnect "/var/spool/hylafax/bin/mail2fax.sh"
euren Gegebenheiten angepasst werden.
Damit man Fetchmail nicht manuell aufrufen muss sollte es im Daemon
Mode aufgerufen werden oder ein Cronjob angeelgt werden der das aller
10 Minuten für euch übernimmt. Für den Daemon Mode gebt folgendes auf
der Shell ein:
Code: Select all
fetchmail -d 600 -L syslog -f /root/.fetchmailrc
" /var/spool/cron/crontabs/root" hinzufügen:
Code: Select all
0,10,20,30,40,50 * * * * fetchmail -L syslog -f /root/.fetchmailrc
7.) Das Script welches von Fetchmail aufgerufen wird, habe ich unter
"/var/spool/hylafax/bin/mail2fax.sh" abgelegt. Es hat folgenden
Inhalt:
Code: Select all
#!/bin/bash
#
# Mail2fax for OTRS
#
# by monotek
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
#config
OTRS_MAIL="support@domain.de"
AUTH_MAIL="(support|sales)@domain.de"
FAX_MAIL="faxsupport@domain.de"
MAILBOX="/var/mail/faxmaster"
FIRMFAX="03012345689"
DIALPREFIX="0"
TEMP_DIR="/tmp/faxtmp"
FAX_BACKUP="yes"
BACKUP_DIR="/var/spool/hylafax/backup"
HOLD="30"
SENDMAIL="/usr/sbin/sendmail"
DATE=`date '+%G%m%d%H%M%S'`
function send_errormail (){
(echo "To: ${OTRS_MAIL}"
if [ -z "${3}" ]; then
echo "From: Fax Server <${FAX_MAIL}>"
else
echo "From: ${3}"
fi
echo "X-Loop: yes"
echo "Subject: ${1}"
echo ""
echo ""
echo " !!! ACHTUNG FEHLER !!! "
echo ""
echo " ${2}"
echo ""
) | 2>&1 ${SENDMAIL} -oi ${OTRS_MAIL}
}
# script
sleep 20
test -d ${TEMP_DIR} || rm -r ${TEMP_DIR}
if [ -e ${MAILBOX} ]; then
mkdir -p ${TEMP_DIR}
csplit -f ${TEMP_DIR}/mail_ -n 3 -k -s -z ${MAILBOX} '/^From .*@.*\..*/' '{*}'
for COUNT in `ls ${TEMP_DIR} | grep mail_\[0-9\] | sed 's/mail_//'`; do
# check if sender is allowed to send mail
if [ -z "`egrep "^From:.*${AUTH_MAIL}>$" < ${TEMP_DIR}/mail_${COUNT}`" ]; then
send_errormail "Fax auth error" "
Faxsender ist nicht zum versenden autorisiert!
Original From:
`egrep "^From " < ${TEMP_DIR}/mail_${COUNT}`
Original Subject:
`egrep "^Subject: " ${TEMP_DIR}/mail_${COUNT}`
Origianl Body:
`sed '1,/^$/d' < ${TEMP_DIR}/mail_${COUNT}`" "`egrep "^From: .*@.*\..*" < ${TEMP_DIR}/mail_${COUNT} | sed 's/^From: //g'`"
else
# check if mail contains attachment
if [ -n "`egrep "^Content-Type: multipart/mixed" < ${TEMP_DIR}/mail_${COUNT}`" ]; then
send_errormail "`egrep "^Subject: " < ${TEMP_DIR}/mail_${COUNT} | sed 's/^Subject: //g'`" "
Das Fax wurde nicht versandt!
Ein Fax darf keine Attachments enthalten!
Das Fax bitte ohne Attachment erneut versenden!"
else
# create fax
/var/spool/hylafax/bin/appendheaders.pl < ${TEMP_DIR}/mail_${COUNT} | sed -n '/^MIME-Version:/,$p' | mailtextbody | recode -p UTF-8..ISO-8859-15 | sed '/^.*HylaFAX Agent <.*@.*\..*>.*:/,$d' > ${TEMP_DIR}/fax_${COUNT}
fi
# get fax number from subject
NR=`egrep "^Subject: " ${TEMP_DIR}/fax_${COUNT} | sed -e 's/Subject:.*\[.*\]//' -e 's/^\+*/00/' -e 's/[^[:digit:]]//g' -e 's/\(^0*490\|^0*49\|^000\)/0/'`
# check if fax number is internal fax
if [ "${NR}" = "${FIRMFAX}" ]; then
send_errormail "`egrep "^Subject: " < ${TEMP_DIR}/fax_${COUNT} | sed 's/^Subject: //g'`" "
Das FAX wurde nicht versandt, da dies ein Brief ist!
Bitte Adresse des Kunden aus dem Fax entnehmen und per Briefpost antworten!"
else
if [ -n "`echo ${NR} | egrep ^[[:digit:]]\{3,\}$`" ]; then
# send fax
a2ps -1 -c -q -B --borders=no -o - < ${TEMP_DIR}/fax_${COUNT} | sendfax -d ${DIALPREFIX}${NR}
else
# send error mail
send_errormail "`egrep "^Subject: " < ${TEMP_DIR}/fax_${COUNT} | sed 's/^Subject: //g'`" "
Das FAX wurde nicht versandt!
Bitte Fax-Nummer im Betreff prüfen und erneut versenden!
Die Faxnummer muss hinter der Ticketnummer stehen!
Die Nummer muss mindestens 3 Stellen haben."
fi
fi
fi
done
# faxbackup
if [ "${FAX_BACKUP}" = yes ]; then
test -d ${BACKUP_DIR}/${DATE} || mkdir -p ${BACKUP_DIR}/fax_${DATE}
cat ${MAILBOX} >> ${BACKUP_DIR}/faxbackup
cp ${TEMP_DIR}/fax* ${BACKUP_DIR}/fax_${DATE}
find ${BACKUP_DIR} -type d -mtime +${HOLD} -regex ^${BACKUP_DIR}/fax_[0-9]*$ -exec rm -r {} \;
fi
rm -r ${TEMP_DIR} ${MAILBOX}
fi
Config-Zeilen müssen noch an eure Bedürnisse angepasst werden.
Die Variable "OTRS_MAIL" ist eure Otrs E-Mail Adresse, von der Ihr
Mails mit dem OTRS versendet.
Die Variable "FAX_MAIL" ist die Adresse an die Mails geschickt werden,
die in Faxe umgewandelt werden sollen.
Wenn ihr Briefe mit eurem Firmenfaxgerät digitalisieren wollt, die
dann auch ins Otrs eingepflegt werden, müsst Ihr bei der Variable
"FIRMFAX" die Faxnummer eures Firmenfaxgerätes eintragen. Dies ist
nötig, da die Agenten im OTRS öfters vergessen, das Sie den Brief mit
der Briefpost beantworten müssen. Sie bekommen dann eine Antwort, dass
das Ganze mit der Briefpost raus muss.
Das Script ist außerdem so abgesichert, dass nur Faxe versendet
werden, die von der unter der Variablen "OTRS_MAIL" angegebenen Adresse
verschickt werden. Wenn jemand versucht von einer anderen E-Mail
Adresse ein Fax abzusetzen, wird dies Mail, mit dem Betreff "Fax auth
error", in das OTRS umgeleitet, so dass ihr auch keine Mail verpasst.
Das Ganze ist also gleichzeitg eine Art Spamschutz.
Außerdem können die versendeten Faxe gebackupt werden, wenn Ihr das
wollt (Variable "FAX_BACKUP").
Das Script fängt außerdem ab, wenn die ermittelte Telefonnummer
"unlogisch" ist. Unlogisch bedeutet die Nummer ist kürzer als 3
Stellen. Der Agent der die Mail versendet bekommt dann ne Mail in das
Ticket im OTRS, mit der Aufforderung die Nummer zu prüfen.
Es wird davon nicht abgefangen, wenn z.B. 12 mal besetzt oder der
Anschluss nicht erreichbar ist. Solche Faxe wandern weiterhin ins
Nirvana. Man kann das nur anhand der Hylafax Sendqueue mittels der
Shell oder dem Webmin Modukl sehen. Also sollte man da ab und zu mal
reinsehen....
8.)Das Mail2fax.sh Script ruft außerdem noch ein Perlscript auf, welches
die Header der Mail noch dem Text vorstellt, so das der Kunde die
Ticket ID aus dem Betreff und die Absenderadresse bekommt, um später
auch per Mail auf ein Fax antworten zu können. Das Perlscript muss
unter "/var/spool/hylafax/bin/appendheaders.pl" abgelegt werden und
hat den folgenden Inhalt:
Code: Select all
#!/usr/bin/perl
# Martin Domig - Wed Aug 7 16:49:19 CEST 2002
$textplain = 0;
$appendhdr = 0;
while(<STDIN>) {
print $_;
if(/^From:/) { ($from)=(/From: (.*)/); }
if(/^To:/) { ($to)=(/To: (.*)/); }
if(/^Subject:/) { ($subject)=(/Subject: (.*)/); }
if(/^Date:/) { ($date)=(/Date: (.*)/); }
if(/^Cc:/) { ($cc)=(/Cc: (.*)/); }
if(/^Content\-Type: text\/plain/) {
# headers ausgeben nur wenn content type text/plain
$textplain = 1;
}
if(/^\s*$/) {
# Leerzeile
if(($appendhdr == 0) && ($textplain != 0)) {
# Headers ausgeben
# print("--- APPENDED HEADERS\n");
if($from) { print("From: $from\n"); }
# if($to) { print("To: $to\n"); }
if($subject) { print("Subject: $subject\n"); }
if($date) { print("Date: $date\n"); }
print("\n");
print("\n");
print("\n");
# if($cc) { print("Cc: $cc\n"); }
# print("--- APPENDED HEADERS END\n");
# ...und zwar nur ein mal
$appendhdr = 1;
}
}
}
9.)Um zu verhindern, dass jedes versendete Fax ein Deckblatt bekommt,
müsst Ihr in der Datei "/var/spool/hylafax/etc/hyla.conf" die
folgende Zeile ändern.
Suchen nach:
Code: Select all
# AutoCoverPage: No
Code: Select all
AutoCoverPage: No
Auflösung des Faxes sowie das Datumsformat eingestellt. Fügt dazu
folgendes am Ende der Datei hinzu:
Code: Select all
PageSize: a4
VRes: 196
DateFormat: ""%H:%M:%S %d.%m.%y""
von "/var/spool/hylafax/etc" komplett in "/etc/hylafax" kopiert werden
sollte, damit die Dateien den gleichen Inhalt haben. Danach Hylafax noch
mittels "/etc/init.d/hylafax resart" neu starten. Damit sollte nun auch der
Faxversand funktionieren und das Faxgateway komplett eingerichtet sein.
10.) Quellen und weitere Links zum Thema:
http://www.tecchio.net/webmin/hylafax/
Unter dem ersten Link gibt es übrigens noch ein Hylafax Webmin Modul,
mit dem man den Fax Server überwachen kann...
http://www.hylafax.org/
http://www.linuxpunk.org/mail2fax/
http://www.linuxnetmag.com/de/issue8/m8hylafax1.html
http://www.debianhowto.de/de:howtos:sar ... x_avm_isdn
http://wiki.ifax.com
http://www.linux-magazin.de/Artikel/aus ... /capi.html
Ich hoffe man kan mit dem Howto was anfangen
Falls es noch Kritik und Anregungen geben sollte, lasse ich diese gern
noch in das Howto einfließen...