hylafax Sendebestätigung

luchs3

Neuer User
Mitglied seit
15 Aug 2007
Beiträge
77
Punkte für Reaktionen
0
Punkte
0
Hi,

Ich möchte, dass mein Hylafax eine Sendebestätigung druckt.
Leider finde ich nirgends, wie ich das anstellen kann.

Wäre super, wenn ihr mir helfen könntet.

Danke im voraus
Niko
 
Welche Hylafax-Version benutzt Du?
Grundsätzlich kann man das im notfify-Skript erledigen, das - sofern bei Faxversand im Client bzw. auf der Kommadsozeile angegeben - nach Faxversand (erfolgreich oder Fehler) eine Mail an den Faxabsender schickt.

Abhängig von der Hylafaxversion kann man dann den Teil der generierten Mail, der den eigentlichen Sendebreicht enthält, auch relativ komfortabel als Ausdruck fertigen lassen.

Im Prinzip muss man dafür nur den Mailinhalt (ohne ggf. vorhandene Attachments) statt an sendmail an lpr übergeben.

Wenn Du Deine konkrete Version verrätst, kann Dir auch mit einem entsprechend angepasstem notify-Skript weitergeholfen werden.
 
klingt super!

meine version ist 4.4.3.
 
Dann sollte folgendes funktionieren (ist nur gehackt, geht also auch schöner!) wenn man es in die notify (zu finden unter /var/spool/hylafax/bin) am Ende einfügt (Änderungen rot und fett):

Code:
eval CreateMailMessage "$template" $ATTACH_ARGS \
	2>$ERRORSTO | $SENDMAIL -f"$FROMADDR" -oi "$mailaddr"

[COLOR="Red"][B]TEMPLATE_PATH=`etc/templates/$TEMPLATE/`

$SED -n -e '1,/^$/d;p' $template | template "$TEMPLATE_PATH" > $TMPDIR/body.txt

cat $TMPDIR/body.txt | lpr

rm -rf $TMPDIR/body.txt
[/B][/COLOR]
CleanupPrivateTmp

Damit ein Sendebericht erzeugt wird, muß dieser natürlich beim Faxversand angefordert werden (Option für sendfax: -D).

Viel Spaß beim Ausprobieren!
 
und wie geht das mit der neusten Version 6.0.3

FaxNotify unter /var/spool/hylafax/etc mit dem Inhalt
PHP:
RETURNFILETYPE=pdf;
hat keine Wirkung

Gruß
Senftutgut
 
Muß laut Sourcecode funktionieren, (es muß natürlich in notify der richtige Pfad stehen, also

Code:
etc/FaxNotify

wie im Hylafax-Vanilla-Code.
Sollte das von einem Paket installiert sein, "verbiegen" die Distris gerne mal die Pfade, deshalb bin/notify konsultieren.
Außerdem gilt natürlich immer noch, dass etc/FaxNotify durch den hylafax-Prozess lesbar+ausführbar sein muß, sonst geht es auch nicht.

Im Ergebnis: Die 6x-Serie hat an der Semantik des Parameters RETURNFILETYPE nichts geändert, wenn es nicht mehr funktioniert, ist es ein Problem, das an zuvor beschriebenen Faktoren liegen kann.
 
Irgendwas stimmt da nicht:

mein log:
Code:
Aug  5 16:02:35 localhost FaxSend[22054]: MODEM WWW.SOFT-SWITCH.ORG spandsp/
Aug  5 16:02:35 localhost FaxSend[22054]: SEND FAX: JOB 15 DEST xxxxx COMMID 000000066 DEVICE '/dev/ttyIAX0' FROM 'XXXX <XXX@XXX>' USER fax
Aug  5 16:02:49 localhost kernel: zaptel Disabled echo canceller because of tone (rx) on channel 2
Aug  5 16:03:08 localhost FaxSend[22054]: SEND FAX: JOB 15 SENT in 0:00:13
Aug  5 16:03:10 localhost FaxQueuer[21753]: NOTIFY: bin/notify "doneq/q15" "done" "0:00:44"
Aug  5 16:03:10 localhost FaxQueuer[21753]: NOTIFY exit status: 0 (22082)
Aug  5 16:03:33 localhost FaxGetty[1995]: MODEM WWW.SOFT-SWITCH.ORG spandsp/


auf der console
Code:
bin/notify "doneq/q15" "done" "0:00:44"
ergibt auch keine Meldung

Wo setzte ich an?
 
Hi,

das ist jetzt ev. eine blöde Frage, aber Drucken generell funktioniert schon, oder?

z.B. : lpr /etc/hosts

schufti
 
Aug 5 16:03:10 localhost FaxQueuer[21753]: NOTIFY: bin/notify "doneq/q15" "done" "0:00:44"
Aug 5 16:03:10 localhost FaxQueuer[21753]: NOTIFY exit status: 0 (22082)

sagt ja zunächst mal, das notify ohne Fehler durchgelaufen ist.
Ob nun überhaupt eine Mail verschickt wird, hängt zunächst mal an den Aufrufparametern beim Faxversand siehe man sendfax.

Ist dort alles richtig eingestellt (respektive Mailbenachrichtigung bei done an - welche nämlich per default aus ist), hängt eine erfolgreiche Benachrichtigung immer noch am verwendeten MDA. Insoweit wäre ein log des entsprechenden MDA (sendmail, postfix oder whatever) hilfreich.

Alternativ kannst Du in bin/notify.sh mal als ersten Befehl

Code:
set -x

einfügen, danach nochmal
Code:
bin/notify "doneq/q15" "done" "0:00:44"

ausführen und die entstehenden Ausgaben hier posten.
 
Alternativ kannst Du in bin/notify.sh mal als ersten Befehl

Code:
set -x

einfügen, danach nochmal
Code:
bin/notify "doneq/q15" "done" "0:00:44"

ausführen und die entstehenden Ausgaben hier posten.

@abw1oim

Hier die Ausgabe

Code:
++ PCL6CMD=pcl6
++ PSPACKAGE=gs
++ QPENCODE=/usr/bin/mimencode -q
++ RM=/bin/rm
++ SBIN=/usr/local/sbin
++ SCRIPT_SH=/bin/bash
++ SED=/bin/sed
++ SENDMAIL=/usr/sbin/sendmail
++ SPOOL=/var/spool/hylafax
++ SYSVINIT=
++ TARGET=i686-pc-linux-gnu
++ TIFF2PDF=/usr/bin/tiff2pdf
++ TIFFBIN=/usr/bin
++ TTYCMD=/usr/bin/tty
++ UUCP_LOCKDIR=/var/lock
++ UUCP_LOCKTYPE=ascii
++ UUENCODE=/usr/bin/uuencode
+ INFO=/usr/local/sbin/faxinfo
+ TIFFINFO=tiffinfo
+ FAX2PS=/usr/bin/fax2ps
+ TIFF2PS=tiff2ps
+ PS2PDF=ps2pdf
+ PDF2PS=pdf2ps
+ PS2FAX=bin/ps2fax
+ PDF2FAX=bin/pdf2fax
+ TOADDR=FaxMaster
+ FROMADDR=fax
+ NOTIFY_FAXMASTER=never
+ RETURNFILETYPE=
+ MIMEBOUNDARY=NextPart3805
+ RETURNTECHINFO=yes
+ /usr/bin/tty
++ /usr/bin/tty
+ ERRORSTO=/dev/pts/2
+ SetupPrivateTmp
+ '[' -d '' ']'
+ '[' -z '' ']'
+ TMPDIR=/tmp
++ mktemp -d /tmp/hylafaxtmp-XXXXXXXX
+ HYLAFAX_TMPDIR=/tmp/hylafaxtmp-XXGPaqyE
+ '[' 0 '!=' 0 ']'
+ TMPDIR=/tmp/hylafaxtmp-XXGPaqyE
+ export TMPDIR
+ trap cleanupExit 0
+ trap 'hfExit 1' 1 2 15
+ parseQfile
+ VAR_PREFIX=
+ '[' -n '' ']'
+ FILENAME=doneq/q15
+ '[' '!' -f doneq/q15 ']'
+ /usr/bin/mawk -F: '
    function p(varname,val)
    {
        gsub(/\047/, "\047\\\047\047", val);
        # mawk sees 047 as decimal 47 rather than octal, so we use the decimal
        # value of the quote character: 39.
        printf "%s%s=%c%s%c\n",var_prefix,varname,39,val,39
        printf "export %s%s\n",var_prefix,varname
    }
    BEGIN {
        var_prefix="";
        nfiles = 0;
        npins = 0;
    }
    /^nsf/      { p("equipment", $3); p("station", $5); next; }
    /^external/    { p("number", $2); next; }      # override unprocessed number
    /^regarding/    { regarding = $0; sub("regarding:", "", regarding); p("regarding", regarding); next; }
    /^jobtag/    { jobtag = $0; sub("jobtag:", "", jobtag); p("jobtag", jobtag); next; }
    # status needs to be used in the shell as faxstatus since status is reserved word
    /^status:/    { status = $0; sub("status:", "", status);
              while ($0 ~ /\\\\$/ && getline > 0) {
                  sub(/\\\\$/, "\\n", status);
                  status = status $0;
              } p("faxstatus", status);
              next;
            }
    /^[!]*post/    { p("files_"++nfiles, $4); p("filetype_"nfiles, "PostScript"); next; }
    /^[!]*tiff/    { p("files_"++nfiles, $4); p("filetype_"nfiles, "TIFF"); next; }
    /^[!]*pdf/    { p("files_"++nfiles, $4); p("filetype_"nfiles, "PDF"); next; }
    /^[!]*pcl/    { p("files_"++nfiles, $4); p("filetype_"nfiles, "PCL"); next; }
    /^page:/    { p("pins_"++npins, $4); next; }
    /^data:/    { p("files_"++nfiles, $4); next; }
    /^poll/        { p("poll", " -p"); next; }
    # Only parse remaining valid lines and allows for colons to appear in the value part
    /^[a-z]+:/     { str = $0; sub($1":", "", str); p($1, str); next; }
    {printf "# Invalid line> %s\n", $0;}
    END { p("nfiles", nfiles); p("npins", npins) } ' doneq/q15
+ . /tmp/hylafaxtmp-XXGPaqyE/qfile-awk.sh
++ tts=1249480990
++ export tts
++ killtime=1249491685
++ export killtime
++ retrytime=0
++ export retrytime
++ state=7
++ export state
++ npages=1
++ export npages
++ totpages=1
++ export totpages
++ nskip=0
++ export nskip
++ skippages=0
++ export skippages
++ ncover=0
++ export ncover
++ coverpages=0
++ export coverpages
++ ntries=0
++ export ntries
++ ndials=0
++ export ndials
++ totdials=1
++ export totdials
++ maxdials=12
++ export maxdials
++ tottries=1
++ export tottries
++ maxtries=3
++ export maxtries
++ pagewidth=209
++ export pagewidth
++ resolution=98
++ export resolution
++ pagelength=296
++ export pagelength
++ priority=127
++ export priority
++ schedpri=127
++ export schedpri
++ minbr=0
++ export minbr
++ desiredbr=13
++ export desiredbr
++ desiredst=0
++ export desiredst
++ desiredec=2
++ export desiredec
++ desireddf=3
++ export desireddf
++ desiredtl=0
++ export desiredtl
++ useccover=1
++ export useccover
++ usexvres=0
++ export usexvres
++ number=xxxx
++ export number
++ number=xxxx
++ export number
++ [email protected]
++ export mailaddr
++ sender=senf
++ export sender
++ jobid=15
++ export jobid
++ jobtag=
++ export jobtag
++ pagehandling=
++ export pagehandling
++ modem=any
++ export modem
++ faxnumber=
++ export faxnumber
++ tsi=
++ export tsi
++ receiver=
++ export receiver
++ company=
++ export company
++ location=
++ export location
++ voice=
++ export voice
++ fromcompany=
++ export fromcompany
++ fromlocation=
++ export fromlocation
++ fromvoice=
++ export fromvoice
++ regarding=
++ export regarding
++ comments=
++ export comments
++ cover=
++ export cover
++ client=localhost.localdomain
++ export client
++ owner=fax
++ export owner
++ groupid=15
++ export groupid
++ signalrate=14400 bit/s
++ export signalrate
++ dataformat=2-D MMR
++ export dataformat
++ jobtype=facsimile
++ export jobtype
++ tagline=
++ export tagline
++ subaddr=
++ export subaddr
++ passwd=
++ export passwd
++ doneop=default
++ export doneop
++ commid=000000066
++ export commid
++ csi=+49 xxxx
++ export csi
++ equipment=Canon Laser Class 9000 Series
++ export equipment
++ station=YYYY
++ export station
++ pagerange=
++ export pagerange
++ faxstatus=
++ export faxstatus
++ statuscode=0
++ export statuscode
++ returned=2
++ export returned
++ notify=none
++ export notify
++ pagechop=default
++ export pagechop
++ chopthreshold=3
++ export chopthreshold
++ files_1=docq/doc15.ps
++ export files_1
++ filetype_1=PostScript
++ export filetype_1
++ nfiles=1
++ export nfiles
++ npins=0
++ export npins
+ '[' default = default ']'
+ doneop=remove
+ '[' facsimile = pager ']'
+ '[' -n '' ']'
+ DESTINATION=xxxxx
+ '[' -n '' ']'
+ JOBINFO=15
+ COMMID=000000066
+ SENDTO=
+ export COMMID SENDTO FROMADDR TOADDR DESTINATION WHY JTIME NEXT JOBINFO
+ '[' -f etc/FaxNotify ']'
+ . etc/FaxNotify
++ RETURNFILETYPE=pdf
+ SENDTO=FaxMaster
+ [email protected]
+ export SENDTO
+ CleanupPrivateTmp
+ '[' -d /tmp/hylafaxtmp-XXGPaqyE ']'
+ rm -Rf /tmp/hylafaxtmp-XXGPaqyE
+ cleanupExit
+ trap - 0 1 2 15
+ CleanupPrivateTmp
+ '[' -d /tmp/hylafaxtmp-XXGPaqyE ']'

ich hoffe die Angaben reichen, da ich die Ausgabe leider nicht in eine Datei bekommen haben.

Danke schonmal für die Hilfe


Gruß
Senftutgut
 
+ '[' -f etc/FaxNotify ']'
+ . etc/FaxNotify
++ RETURNFILETYPE=pdf
+ SENDTO=FaxMaster
+ [email protected]
+ export SENDTO
+ CleanupPrivateTmp
+ '[' -d /tmp/hylafaxtmp-XXGPaqyE ']'
+ rm -Rf /tmp/hylafaxtmp-XXGPaqyE

Da liegt der Hund begraben:

  • etc/FaxNotify wird ausgeführt -> RETURNFILETYPE wird gesetzt
  • SENDTO wird gesetzt
  • Hylafax löscht, da für "done" keine Bestätigung angefordert wurde

Der entsprechende Code sieht (bei 6.0.3) so aus:

Code:
## We process the NOTIFY_FAXMASTER first, because we want
## this to go without the attachemnts, if they are used
## Faxmaster goes to $TOADDR, but templates always use SENDTO
[B]SENDTO="$TOADDR"[/B]
case "$NOTIFY_FAXMASTER:$WHY" in
    "always:*")                     do_faxmaster;;
    "yes:*")                        do_faxmaster;;

    "errors:success")               ;;              # Not errors
    "errors:blocked")               ;;              # Not errors
    "errors:*")                     do_faxmaster;;  # errors

    *)                              ;;              # Do nothing;
esac

# We use SENDTO in the templates, but $mailaddr is the job
# param.  We set this *after* FaxNotify is sourced, because
# some admins seem to play with mailaddr expecting it to change
# the destination of the nofify email
[B]SENDTO="$mailaddr"
export SENDTO
[/B]
case "$WHY:$notify" in
    *":always")                     do_notify;;     # They've asked for it

    "requeued:when done+requeued")  do_notify;;     # Requeued
    "requeued:when requeued")       do_notify;;     # Requeued
    "requeued:when done")           ;;              # Do nothing;
    "requeued:none")                ;;              # Do nothing;

    "blocked:"*)                    ;;              # Blocked

    "done:when done+requeued")      do_notify;;     # Done
    "done:when requeued")           ;;              # Do nothing
    "done:when done")               do_notify;;     # Done
    "done:none")                    ;;              # Do nothing

    # Anything else is a "failure", which always runs notification
    *)                              do_notify;;
esac


[B]CleanupPrivateTmp[/B]

Fette Zeilen werden bei Dir ausgeführt, der Rest nicht.
Das ergibt sich aus den Einstellungen (auch in Deinem Log zu sehen):

++ notify=none --> Kommt aus dem Faxjob
+ NOTIFY_FAXMASTER=never --> Kommt als Parameter aus notify.sh

Wenn Du eine mail an [email protected] haben willst, musst Du sie beim Faxauftrag auch anfordern, siehe man sendfax:

-D

Enable notification by electronic mail when the facsimile has been delivered. By default Hyla FAX will notify the submitter only if there is a problem with a job.

Für andere clients als sendfax ergibt sich die entsprechende Option zur Sendebestätigung aus deren jeweiliger Bedienungsanleitung!
 
Hi SenfTutGut.

das ist aber fein, dass du auch mal kundtust, was du (nicht) willst.

Der Threadstarter schrieb
Ich möchte, dass mein Hylafax eine Sendebestätigung druckt.
Leider finde ich nirgends, wie ich das anstellen kann.

Der Lösungsvorschlag von abw1oim
TEMPLATE_PATH=`etc/templates/$TEMPLATE/`

$SED -n -e '1,/^$/d;p' $template | template "$TEMPLATE_PATH" > $TMPDIR/body.txt

cat $TMPDIR/body.txt | lpr

rm -rf $TMPDIR/body.txt

du schriebst in deinem 1. Post
und wie geht das mit der neusten Version 6.0.3

aber nie, dass du kein email bekommst

jetzt plötzlich
Drucken will ich nicht, und ein Drucker ist auch nicht angeschlossen

super, :-Ö
 
Ahh, jetzt haben wir den Schuldigen:

Ich nutze postfix und in der master.cf steht
Code:
fax	unix	-	n	n	-	1	pipe flags=  user=fax  argv=/usr/bin/faxmail -n -d ${user}

nur das -d nicht mehr unterstützt wird.

ein
Code:
fax	unix	-	n	n	-	1	pipe flags=  user=fax  argv=/usr/bin/faxmail -n -t done ${user}

geht auch nicht....

Ich mache bald hitzefrei
 
@SenfTutGut:

fax unix - n n - 1 pipe flags= user=fax argv=/usr/bin/faxmail -n -t done ${user}

Du bist in der Lage, zu lesen?:mad: - Sorry, aber die Frage musste jetzt sein.;)

case "$WHY:$notify" in
*":always") | do_notify;; # They've asked for it

..............

"done:when done+requeued") | do_notify;; # Done
"done:when requeued") | ;; # Do nothing
"done:when done") | do_notify;; # Done
"done:none") | ;; # Do nothing

....
esac

und man faxmail

-d | Enable direct delivery of facsimile; the formatted document will be submitted directly to a HylaFAX server for transmis-
sion as facsimile. This option is similar to piping the output of faxmail to the input of sendfax(8C) except when direct
delivery is enabled faxmail interprets ``x-fax-'' header lines in the envelope of the mail message to look for control
information to use in delivering the facsimile and, by default, no automatic cover page generation is done.


-t when | Notify the sender of job status according to when.

Dazu passt nicht:

nur das -d nicht mehr unterstützt wird.

Die Bedeutung von -d ist nur eine ganz andere, als die von Dir erwartete.

Die Angabe -t done führt zu keinem Ergebnis im hylafax-Code, also auch keiner Mail. Entweder -t always oder (da bin ich mir nicht sicher mit der Syntax) -t "when done"

Im Übrigen schließe ich mich schufti an:

Wenn Du vom Forum Hilfe erwartest, solltest Du nicht einfach irgeneinen Thread benutzen, der ein ganz anderes Problem (Hier: Druck des Sendeberichts) aufgreift und außerdem solltest Du Dir angewöhnen, Dein Problem so abzugrenzen, dass Leser nicht Ihre Glaskugel bemühen müssen, um herauszufinden, was in welcher Konstellation nicht funktioniert.
Insoweit klinke ich mich jetzt hier aus.
 
Hallo, also ich habe mir das genau durchgelesen,

alles versucht umzusetzen geht aber nicht.

Ich habe das Notify Script angepasst denn ich möchte ein Locales Script ausführen keine Email erzeugen. Dies funktioniert auch Problemlos.
Was ich suche ist ein Erzwingen des Sendeberichts, also nicht durch sendfax -D oder ähnliches zu Aktivieren sondern immer.

Ich dachte erst mit den oben beschriebenen Einstellungen in der FaxNotify würde das gehen, aber das wird ja erst im bin/notify ausgefühert Somit ist das ja zu Spät.

Meine Frage ist also Wie kann ich dem Hylafax sagen das das Notify Script immer nach jedem Senden gestartet werden soll.
 
Ich betätige mich da mal als Leichenfledderer, da ich grade die Notify angepasst habe. Funkttioniert prima, vielen Dank mal ans Forum.
Was mich jetzt noch plagt ist folgendes:

Wenn ich ein Telefax mit 4 Attachments versende, dann bekomme ich einen Sendebericht, der auch 4 Attachments hat. Weiterhin drucke ich mir eine Sendequittung via Enscript, die ich hinten anhängen will.

Jetzt würde ich gerne via TIFFCP alle Attachment in eine MULTI-Page-tiff verwandeln und den Sendebericht hinten als letzte Seite anhängen.
Wie kann ich denn diess Attachment-Array in Einzeltiffs speichern?
Gruß peter
 
Da müsstest Du im Prinzip in der notify reinschauen, wo die Attachements gebaut werden (da werden alle durchlaufen). Wenn man die Namen der Attachements hat (respektive weiß, wann im Skript die woher bezogen werden), kann man sie auch geeignet mergen und mit einem Sendebericht zusammen in ein Multi-TIFF (oder PDF) packen.)

Das Szenario finde ich selbst spannend, da ich im Moment noch nicht verstehe, wie es abläuft: Wenn ich ein Faxc mit mehreren Bestandteilen versende, merge ich die nämlich vor Versand zusammen (bei mail2fax). Insofern kannst Du ja Deine Erkenntnisse dann gerne sharen ...
 
jepp, wir haben dasselbe Problem.

Ich habe mir die common_functions mal angesehen, in welcher 1. Buildattachmens und 2. Createmail gemacht werden, da muss ja irgendwo die schleife sein, die alle Attachments zusammen anhängt. Wenn ich diese extrahiert bekäme könnte ich das zusammenasteln. Die Sendebestätigung anhängen ist bei mir kein Problem, aber sie hängt eben am letzten Attachment ;-)
 
Ich habe mir die common_functions mal angesehen, in welcher 1. Buildattachmens und 2. Createmail gemacht werden, da muss ja irgendwo die schleife sein, die alle Attachments zusammen anhängt. Wenn ich diese extrahiert bekäme könnte ich das zusammenasteln.

Da ich mich gerade selber damit befasse und an Hylafax herumgebastelt habe, grabe ich mal diesen alten Thread raus und füge ein paar Infos hinzu.

Sowohl notify nach Faxversand, als auch faxrcvd nach Faxempfang rufen für jedes angeforderte Attachment-Format einmal BuildAttachArgs() auf, also einmal für Format A, einmal für Format B, usw..

Ich schreibe im Weiteren der Einfachheit halber nur noch von notify, faxrcvd verhält sich aber gleich.

BuildAttachArgs() liegt in common-functions und arbeitet bei jedem Aufruf alle in dem Job vorhandenen Dateien (so viele Dateien wie man auf einmal gesendet hat) durch; dabei konvertiert es, falls erforderlich, über ConvertFile():

Aufruf 1 von BuildAttachArgs() durch notify für Format A: Datei 1 zu Format A, Datei 2 zu Format A, usw..
Aufruf 2 von BuildAttachArgs() durch notify für Format B: Datei 1 zu Format B, Datei 2 zu Format B, usw..

Nach jeder Bearbeitung einer Datei hängt BuildAttachArgs() 4 Angaben als String an die Variable $ARGS:

  1. den Ort der resultierenden Datei, z.B. /tmp/hylafaxtmp-(Zufallscode)/doc1.pdf
  2. den Dateityp, z.B. application/pdf
  3. den Namen für's Versenden, z.B. doc1.pdf
  4. die Beschreibung, z.B. Fax Document (PDF)

Die einzelnen Werte stehen in Anführungszeichen und werden durch Leerzeichen getrennt. Das sieht dann so aus:

"/tmp/hylafaxtmp-(Zufallscode)/doc1.pdf" "application/pdf" "doc1.pdf" "FAX Document (PDF)"

Bei zwei Dateien bekommt man also im ersten Durchlauf 8 Werte als String in $ARGS für das Format A. Schematisch dargestellt:

"Ort Datei 1/A" "Typ Datei 1/A" "Name Datei 1/A" "Beschr. Datei 1/A" "Ort Datei 2/A" "Typ Datei 2/A" "Name Datei 2/A" "Beschr. Datei 2/A"

Sind alle vorhandenen Dateien bearbeitet, ist der Durchlauf von BuildAttachArgs() für Format A beendet und der Inhalt von $ARGS wird an notify zurückgegeben.

Wir sind im Code an dieser Stelle in common-functions:

Code:
for i in `LocalSequence 1 $nfiles`
do
 (...)
 if [ -f "$a_file" ]
 then
  ARGS="$ARGS"" \"$a_file\" \"$a_type\" \"$a_name\" \"$a_desc\""
 fi
done
printf '%s "$ARGS"

Bei "done" ist der Durchlauf komplett und die Liste in $ARGS fertig. Mit "printf" wird der Inhalt der Variable an notify übergeben. An der Stelle kann man gut eingreifen, selber die Dateien bei jedem Durchlauf "sammeln", zusammenlegen und schließlich $ARGS passend angepasst zurückgeben. Siehe Code-Schnipsel am Ende des Beitrags...

Notify nimmt die 8 Werte in $ARGS entgegen und hängt sie an die Variable $ATTACH_ARGS an.

Es folgt der zweite Durchlauf für Format B. Notify ruft erneut BuildAttachArgs() auf und BuildAttachArgs() beginnt von vorne, mit einer leeren $ARGS. Es kommen (wenn man nichts geändert hat) wieder 8 Werte zusammen:

"Ort Datei 1/B" "Typ Datei 1/B" "Name Datei 1/B" "Beschr. Datei 1/B" "Ort Datei 2/B" "Typ Datei 2/B" "Name Datei 2/B" "Beschr. Datei 2/B"

Das wiederholt sich: ist der Durchlauf beendet, geht der Inhalt von $ARGS an notify und wird an $ATTACH_ARGS angehängt.

In $ATTACH_ARGS stehen, wenn man nichts geändert hat, bei 2 Dateien und nach dem zweiten Format also 16 Werte.

Die einzelnen Formate werden in der Reihenfolge abgearbeitet, in der sie in RETURNFILETYPE stehen, also mit RETURNFILETYPE="PDF TIFF" z.B. zuerst PDF, dann TIFF.

Sind alle Formate durchgearbeitet, ist $ATTACH_ARGS komplett.

Wir sind im Code in notify an dieser Stelle:

Code:
if [ -n "$RETURNFILETYPE" ]; then
 for ft in $RETURNFILETYPE
  do
   ATTACH_ARGS="$ATTACH_ARGS "`BuildAttachArgs $ft`
 done
fi

Genauer gesagt bei "done".

Das Versenden der Mail erfolgt kurz darauf:

Code:
eval CreateMailMessage "$template" $ATTACH_ARGS \
 2>$ERRORSTO | $SENDMAIL -f"$FROMADDR" -oi "$SENDTO"

Der Aufruf steht in notify, CreateMailMessage() wiederum in common-functions. CreateMailMesage() geht $ATTACH_ARGS mittels "shift; shift; shift; shift" in Viererpaketen durch und zieht der Reihe nach die Werte aus der Variable.

Hier ist mal ein kleiner Code-Schnipsel für das Abfischen und Zusammenlegen der Dateien in BuildAttachArgs(), für das PDF-Format . Der rote Code ist neu:

Code:
  (...)
  if [ -f "$a_file" ]
   then
    [COLOR="#B01837"]if [ "{$1,,}" == "pdf" ] ; then
     MFILES="$MFILES"" "$a_file
     MPATH=$(dirname $a_file)
     MNAME=$a_name
    else[/COLOR]
     ARGS="$ARGS"" \"$a_file\" \"$a_type\" \"$a_name\" \"$a_desc\""
[COLOR="#B01837"]    fi[/COLOR]
  fi
  done
[COLOR="#B01837"]  if [ "$1" == "PDF" ] || [ "$1" == "pdf" ] && [ "$2" == "notify" ] ; then
   touch $MPATH/merged_attachments.pdf
   gs \
    -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER -dPDFSETTINGS="/printer" \
    -dColorConversionStrategy=/LeaveColorUnchanged \
    -dSubsetFonts=true -dEmbedAllFonts=true \
    -sOutputFile="$MPATH/$MNAME" \
    ${MFILES:1}
   ARGS="$ARGS"" \"$MPATH/$MNAME\" \"application/pdf\" \"$MNAME\" \"FAX Dokument (PDF)\""
  fi[/COLOR]
 printf '%s' "$ARGS"
}

Man schnappt sich die Dateien während während die Schleife durchläuft und sammelt sie in $MFILES. Ist die Schleife durchgelaufen, schmeisst man die gesammelten Dateien mit Ghostscript in eine Datei und übergibt dann abweichend vom Normalfall nicht alle einzelnen Dateien, sondern nur die eine zurück an notify.

Ich habe mir das in meiner Erweiterung für alle Dateitypen eingerichtet, an-/abschaltbar über einen Eintrag in FaxNotify.

Eine Antwort mit nur 1 1/2 Jahren Verspätung... Naja, vielleicht trotzdem hilfreich. ;-)
 
Zuletzt bearbeitet:

Statistik des Forums

Themen
244,965
Beiträge
2,221,831
Mitglieder
371,738
Neuestes Mitglied
vulubalulu
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.