HylaFAX The world's most advanced open source fax server

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

[hylafax-users] Handy Faxrcvd Script



Notes are below script text.


#! /bin/sh
#       $Id: faxrcvd.sh,v 1.1.1.1 1998/10/12 20:47:48 root Exp $
#
# HylaFAX Facsimile Software
#
# Copyright (c) 1990-1996 Sam Leffler
# Copyright (c) 1991-1996 Silicon Graphics, Inc.
# HylaFAX is a trademark of Silicon Graphics
#
# Permission to use, copy, modify, distribute, and sell this software and
# its documentation for any purpose is hereby granted without fee, provided
# that (i) the above copyright notices and this permission notice appear in
# all copies of the software and related documentation, and (ii) the names of
# Sam Leffler and Silicon Graphics may not be used in any advertising or
# publicity relating to the software without the specific, prior written
# permission of Sam Leffler and Silicon Graphics.
#
# THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
# EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
# WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 
#
# IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
# ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
# OF THIS SOFTWARE.
#
#
#
#######################################        
# LEAVE THIS AT TOP OF THE FILE!!!
# Automatically Print to the CUPS printing system to the printer PrinterPG
# There is a weekly CRON job defined to cleanup the print queue jobs
###/usr/bin/tiff2ps -a1 $1 | /usr/bin/lpr -PHaywardFax
# HAD TO ADD FLAGS TO SET WIDTH AND HEIGHT OF IMAGES
# OTHERWISE SOME FAXES DIDN"T PRINT PROPERLY and the TSID header info
# wouldn't print out.  Laser printers have a maximum printable area and
# some sender's faxes are set to A4 paper size!!!
/usr/bin/tiff2ps -a -1 -h10.675 -w8.25 $1 | /usr/bin/lpr -PHaywardFax
#######################################        


# faxrcvd file devID commID error-msg
#
if [ $# != 4 ]; then
    echo "Usage: $0 file devID commID error-msg"
    exit 1
fi

test -f etc/setup.cache || {
    SPOOL=`pwd`
    cat<<EOF

FATAL ERROR: $SPOOL/etc/setup.cache is missing!

The file $SPOOL/etc/setup.cache is not present.  This
probably means the machine has not been setup using the faxsetup(1M)
command.  Read the documentation on setting up HylaFAX before you
startup a server system.

EOF
    exit 1
}
. etc/setup.cache

##########################
##### Set Variables ######
##########################
INFO=$SBIN/faxinfo
FAX2PS=$TIFFBIN/fax2ps
TOADDR=FaxMaster
HOSTNAME=`hostname`                     # XXX no good way to find FQDN
PORT=4559                               # XXX no good way to lookup service
FILE="$1"
DEVICE="$2"
COMMID="$3"
MSG="$4"
# Parse out the fax tif filename alone, strip the log folder name 
FILENAME=`echo $1 | awk -F\/ '{print $2}'` 

# If you don't have a matchfile, lookups will not occur
MATCHFILE=/home/neomail/fax/nametofax.txt

# If you want to do the WEB link stuff, set to YES, else original links previal
WEBNOTIFY=YES
WEBSITE="http://linux-2"
WEBFOLDER=/home/neomail/fax
WEBCGIFILE=/cgi-bin/viewfaxfolder.cgi
WEBFAXPATH=/fax

##########################
####### START MAIN #######
##########################


    # Check the sender's TSI and setup to dispatch
    # facsimile received from well-known senders.
    #
    SENDER="`$INFO $FILE | $AWK -F: '/Sender/ { print $2 }' 2>/dev/null`"

    #############################################################
    ############## ALTERNATE SENDER RETRIEVAL METHOD ############
    #############################################################
    # I WROTE MY OWN SCRIPT TO GET THE SENDER INFO FROM THE JOB CONVERSATION -
    # ON FAILED JOBS THE FILE DOES NOT EXIST
   
    SENDER2=`cat log/c$COMMID | awk -F\" ''/FTSI/' {print $2}' | \
        sed -e 's/[ ]*//g' | \
        awk 'getline {print $0}'`
   
    ##### This doesn't work well for my modem...
    #####SENDER2=`cat log/c$COMMID | awk -F\" ''/FTSI/' {print $2}' | \
    #####   sed -e 's/[ ]*//g'`

    # If SENDER2 returns nothing, use SENDER instead.  Else, if BOTH are
    # blank change value to UNSPECIFIED.
    if [ "`echo $SENDER2 | sed -e 's/[ ]*//g'`" = "" ]; then
        if [ "`echo $SENDER | sed -e 's/[ ]*//g'`" = "" ]; then
                SENDER2="- UNSPECIFIED -"
        else
                # Strip out spaced from SENDER so same format to later
                # compare with text database for email details.
                SENDER2="`echo $SENDER | sed -e 's/[ ]*//g'`"   
        fi
    fi
   
    # Now use the resulting SENDER2 variable and compare it to the compare 
    # file that is formatted "CUSTOMER NAME;555-111-1234" in each line entry.
    # The filename is based on MATCHFILE such as /var/spool/fax/bin/namefax
    # Only do this is the MATCHFILE has been set up.
    if [ -f $MATCHFILE ]; then 
        # Initialize MATCH
        MATCH=""
        
        # Compare SENDER2 with each line in MATCHFILE
        # Note: The AWK just finds the LINE with the search text - this does
        # not guarantee a correct match.  You may have multiple numbers on
        # the right of the semicolon.
        MATCH="`cat $MATCHFILE | awk -F\; '/'$SENDER2'/ { print $1 }' \
                2>/dev/null`"
   
        # If there is a match then change SENDER2 to the matching text
        # so it will show in the subject line instead of the telno.
        if [ "$MATCH" != "" ]; then
            SENDER2=$MATCH
        fi
    fi
    #############################################################
    ########## END ALTERNATE SENDER RETRIEVAL METHOD ############
    #############################################################

if [ -f $FILE ]; then
# A fax was received, since a TIF file came in.

  #######################################
  # COPY FAX FILE TO WEB FOLDER.  ALSO, MODIFIED SCRIPTS BELOW TO SHOW HTTP:
  # REFERENCE FTP REFERENCE BECAUSE FTP REFERENCES DONT WORK PROPERLY.

  if [ $WEBNOTIFY ]; then
        # Copy the fax files to the destination folder in the Apache server
        # Copy the TIF file there first
        cp $1 $WEBFOLDER
        # Copy the LOG file there next
        cp log/c$3 $WEBFOLDER
        # Set the permissions so they can be read. Folder must be writable!
        chmod 755 $WEBFOLDER/*                     
  fi
  ################################

    SENDTO=
    if [ -f etc/FaxDispatch ]; then
        . etc/FaxDispatch       # NB: FaxDispatch sets SENDTO based on $SENDER
    fi
    (echo "To: $TOADDR"
     echo "From: The HylaFAX Receive Agent <fax>"
     if [ "$MSG" ]; then
         echo "Subject: (Partial) Facsimile received from $SENDER2";
     else
         echo "Subject: Facsimile received from $SENDER2";
     fi

     echo ""
        if [ $WEBNOTIFY ]; then
            echo "The following fax may or may not be yours... view it to see."
            echo ""
            echo "$FILE ($WEBSITE$WEBFAXPATH/$FILENAME):"; $INFO -n $FILE
        else
            echo "$FILE (ftp://$HOSTNAME:$PORT/$FILE):"; $INFO -n $FILE
        fi       
     echo "ReceivedOn: $DEVICE"
     if [ "$MSG" ]; then
        echo ""
        echo "The full document was not received because:"
        echo ""
        echo "    $MSG"
        echo ""
        echo "    ---- Transcript of session follows ----"
        echo ""
        if [ -f log/c$COMMID ]; then
            $SED -e '/-- data/d' \
                 -e '/start.*timer/d' -e '/stop.*timer/d' \
                 log/c$COMMID
        elif [ -n "$COMMID" ]; then
            echo "    No transcript available (CommID c$COMMID)."
        else
            echo "    No transcript available."
        fi
     else
        if [ $WEBNOTIFY ]; then
            #echo "$FILE ($WEBSITE$WEBFAXPATH/c$COMMID):"; $INFO -n $FILE
            echo "$FILE ($WEBSITE$WEBFAXPATH/c$COMMID):"
            echo
            echo "To manage fax logs and tifs on the web server,"
            echo "click here: ($WEBSITE/$WEBCGIFILE)";
        else
            echo "CommID:     c$COMMID (ftp://$HOSTNAME:$PORT/log/c$COMMID)"
        fi                     
     fi
     if [ -n "$SENDTO" ]; then
        echo ""
        echo "The facsimile was automatically dispatched to: $SENDTO."
     fi
    ) | 2>&1 $SENDMAIL -ffax -oi $TOADDR
    if [ -n "$SENDTO" ]; then
        (MIMEBOUNDARY="NextPart$$"
         echo "Mime-Version: 1.0"
         echo "Content-Type: Multipart/Mixed; Boundary=\"$MIMEBOUNDARY\""
         echo "Content-Transfer-Encoding: 7bit"
         echo "To: $SENDTO"
         echo "From: The HylaFAX Receive Agent <fax>"
         if [ "$MSG" ]; then
             echo "Subject: (Partial) Facsimile received from $SENDER2";
         else
             echo "Subject: Facsimile received from $SENDER2";
         fi
         echo ""
         echo "--$MIMEBOUNDARY"
         echo "Content-Type: text/plain; charset=us-ascii"
         echo "Content-Transfer-Encoding: 7bit"
         echo ""
         if [ $WEBNOTIFY ]; then
            echo "The following fax may or may not be yours... view it to see."
            echo ""
            echo "$FILE ($WEBSITE$WEBFAXPATH/$FILENAME):"; $INFO -n $FILE
         else
             echo "$FILE (ftp://$HOSTNAME:$PORT/$FILE):"; $INFO -n $FILE
         fi                 
        
         echo "ReceivedOn: $DEVICE"
         if [ "$MSG" ]; then
            echo ""
            echo "The full document was not received because:"
            echo ""
            echo "    $MSG"
            echo ""
            echo "    ---- Transcript of session follows ----"
            echo ""
            if [ -f log/c$COMMID ]; then
                $SED -e '/-- data/d' \
                     -e '/start.*timer/d' -e '/stop.*timer/d' \
                     log/c$COMMID
            elif [ -n "$COMMID" ]; then
                echo "    No transcript available (CommID c$COMMID)."
            else
                echo "    No transcript available."
            fi
         else
            if [ $WEBNOTIFY ]; then
                #echo "$FILE ($WEBSITE$WEBFAXPATH/c$COMMID):"; $INFO -n $FILE
                echo "$FILE ($WEBSITE$WEBFAXPATH/c$COMMID):"
                echo
                echo "To manage fax logs and tifs on the web server,"
                echo "click here: ($WEBSITE/$WEBCGIFILE)";
            else
                echo "CommID:     c$COMMID (ftp://$HOSTNAME:$PORT/log/c$COMMID)"
            fi
         fi
         echo ""
         echo "--$MIMEBOUNDARY"
         echo "Content-Type: application/postscript"
         echo "Content-Description: FAX document"
         echo "Content-Transfer-Encoding: 7bit"
         echo ""
         $FAX2PS $FILE 2>/dev/null
         echo ""
         echo "--$MIMEBOUNDARY--"
        ) | 2>&1 $SENDMAIL -ffax -oi $SENDTO
    fi
else
    #
    # Generate notification mail for a failed attempt.
    #
    SENDER="`$INFO $FILE | $AWK -F: '/Sender/ { print $2 }' 2>/dev/null`"
    (echo "To: $TOADDR"
     echo "From: The HylaFAX Receive Agent <fax>"
     echo "Subject: Facsimile FAILED from $SENDER2";
     echo ""
     echo "An attempt to receive facsimile on $DEVICE failed because:"
     echo ""
     echo "    $MSG"
     echo ""
     echo ""
     echo "    ---- Transcript of session follows ----"
     echo ""
     if [ -f log/c$COMMID ]; then
        $SED -e '/-- data/d' \
             -e '/start.*timer/d' -e '/stop.*timer/d' \
            log/c$COMMID
     elif [ -n "$COMMID" ]; then
        echo "    No transcript available (CommID c$COMMID)."
     else
        echo "    No transcript available."
     fi
    ) | 2>&1 $SENDMAIL -ffax -oi $TOADDR
fi

====== SNIP ========================================================================

I'm new to the list, but I figured *someone* might appreciate and benefit from the scripting changes I have made to MY faxrcvd script.

FYI: I am running Mandrake Linux 8.0, Postfix, Apache on a Celeron 600mhz. box with 128 mb ram.  Seems like an overkill, but our two fax modems (Multitech 1932zdx w/ fax patch #54) are very busy receiving sometimes.  I found that the P133 w/64 mb tram I had been using had trouble performing the TIFF2PS conversions properly, sometimes corrupting them.  Not good.  That problem went away with this box, so I will stick with it.  The print jobs pump out real fast with it which is good.  FYI: Multitech is a GREAT company, really supports their products.  They will send out free PROM updates to their modems - they updated 10 modems I had at work at no charge for this fax fix.

The following features I scripted may not be written real efficiently, but at least they work :>

1. Better TSID ID

I saw that in some cases I got no TSID in the message - that the default SENDER variable was based upon info stored in the actual resulting TIF file and not the log. Since there is no TIF file on a failed fax, I devised an alternate SENDER2 variable which is parsed from the cxxxx log file, then I compare the two, and if one is blank the other takes priority.  I this way I can see who is having problems faxing me.

2. Display Company Name instead of Fax Number

I added some comparison testing to "Match" the TSID against a simple semicolon (;) delimited text file to a company name so the reception email displays the company name instead of the TSID.  This way I can see who the fax is from rather than the fax number usually in there.  If both variables are null I display - UNSPECIFIED -.

3. Web Fax Viewing

The default FTP pointers in the email messages didn't work for me so I wanted to set up a web-based fax retrieval system.  I as the sysadmin want to be able to review and reprint faxes that are automatically printed via CUPS to an HP laserjet here, and this was the easiest way for me to do it. For my personal server I wanted to be able to retrieve faxes from anywhere I might be, so web based fax access made sense.

I set up Apache on my Mandrake Linux 8.0 system and set up the script to copy the fax TIF and Cxxx log files to the web folder.  The script emails me a fax reception message that includes web links to cgi scripts which simply display the fax or log, respectively, or delete the copies in that folder.

Hope I have been of help!

Mark Tilles ____________________ HylaFAX(tm) Users Mailing List _______________________ To unsub: mail -s unsubscribe hylafax-users-request@hylafax.org < /dev/null


Project hosted by iFAX Solutions