.titleBar { margin-bottom: 5px!important; }

hylafax Sendebestätigung

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von luchs3, 3 März 2009.

  1. luchs3

    luchs3 Neuer User

    Registriert seit:
    15 Aug. 2007
    Beiträge:
    77
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Wien
    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
     
  2. abw1oim

    abw1oim Aktives Mitglied

    Registriert seit:
    26 März 2007
    Beiträge:
    946
    Zustimmungen:
    1
    Punkte für Erfolge:
    18
    Ort:
    Bonn
    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.
     
  3. luchs3

    luchs3 Neuer User

    Registriert seit:
    15 Aug. 2007
    Beiträge:
    77
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Wien
    klingt super!

    meine version ist 4.4.3.
     
  4. abw1oim

    abw1oim Aktives Mitglied

    Registriert seit:
    26 März 2007
    Beiträge:
    946
    Zustimmungen:
    1
    Punkte für Erfolge:
    18
    Ort:
    Bonn
    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!
     
  5. SenfTutGut

    SenfTutGut Neuer User

    Registriert seit:
    9 März 2009
    Beiträge:
    32
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    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
     
  6. abw1oim

    abw1oim Aktives Mitglied

    Registriert seit:
    26 März 2007
    Beiträge:
    946
    Zustimmungen:
    1
    Punkte für Erfolge:
    18
    Ort:
    Bonn
    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.
     
  7. SenfTutGut

    SenfTutGut Neuer User

    Registriert seit:
    9 März 2009
    Beiträge:
    32
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    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?
     
  8. schufti

    schufti Mitglied

    Registriert seit:
    11 Feb. 2006
    Beiträge:
    222
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Hi,

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

    z.B. : lpr /etc/hosts

    schufti
     
  9. SenfTutGut

    SenfTutGut Neuer User

    Registriert seit:
    9 März 2009
    Beiträge:
    32
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Drucken will ich nicht, und ein Drucker ist auch nicht angeschlossen
     
  10. abw1oim

    abw1oim Aktives Mitglied

    Registriert seit:
    26 März 2007
    Beiträge:
    946
    Zustimmungen:
    1
    Punkte für Erfolge:
    18
    Ort:
    Bonn
    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.
     
  11. SenfTutGut

    SenfTutGut Neuer User

    Registriert seit:
    9 März 2009
    Beiträge:
    32
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    @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
    ++ mailaddr=xxxx@xxxx.de
    ++ 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
    + SENDTO=xxxx@xxxxx.de
    + 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
     
  12. abw1oim

    abw1oim Aktives Mitglied

    Registriert seit:
    26 März 2007
    Beiträge:
    946
    Zustimmungen:
    1
    Punkte für Erfolge:
    18
    Ort:
    Bonn
    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):

    Wenn Du eine mail an xxxx@xxxxx.de haben willst, musst Du sie beim Faxauftrag auch anfordern, siehe man sendfax:

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

    schufti Mitglied

    Registriert seit:
    11 Feb. 2006
    Beiträge:
    222
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Hi SenfTutGut.

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

    Der Threadstarter schrieb
    Der Lösungsvorschlag von abw1oim
    du schriebst in deinem 1. Post
    aber nie, dass du kein email bekommst

    jetzt plötzlich
    super, :-Ö
     
  14. SenfTutGut

    SenfTutGut Neuer User

    Registriert seit:
    9 März 2009
    Beiträge:
    32
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    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
     
  15. abw1oim

    abw1oim Aktives Mitglied

    Registriert seit:
    26 März 2007
    Beiträge:
    946
    Zustimmungen:
    1
    Punkte für Erfolge:
    18
    Ort:
    Bonn
    @SenfTutGut:

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

    und man faxmail

    Dazu passt nicht:

    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.
     
  16. Tigger1975

    Tigger1975 Neuer User

    Registriert seit:
    27 Sep. 2007
    Beiträge:
    23
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  17. TRex

    TRex Neuer User

    Registriert seit:
    10 Apr. 2009
    Beiträge:
    40
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  18. abw1oim

    abw1oim Aktives Mitglied

    Registriert seit:
    26 März 2007
    Beiträge:
    946
    Zustimmungen:
    1
    Punkte für Erfolge:
    18
    Ort:
    Bonn
    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 ...
     
  19. TRex

    TRex Neuer User

    Registriert seit:
    10 Apr. 2009
    Beiträge:
    40
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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 ;-)
     
  20. user_account

    user_account Neuer User

    Registriert seit:
    6 Nov. 2008
    Beiträge:
    81
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    #20 user_account, 5 März 2015
    Zuletzt bearbeitet: 6 März 2015
    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. ;-)