Fax2mail
From KlavoWiki
What is fax2mail
A bash script to accept inbound faxes and forward them (in PDF/EPS/TIFF format) to the desired email addresses. This script links to Asterisk PBX.
The latest version of the fax2mail script can be downloaded from here.
fax extensions
[prifax] exten => _X.,1,Set(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID}) exten => _X.,n,GotoIf($[${LEN(${CALLERID(number)})}=0]?5:3) exten => _X.,n,Set(CALLERID(name)=${DB(names/${CALLERID(number)})}) exten => _X.,n,GotoIf($[${LEN(${CALLERID(name)})}=0]?6:7) exten => _X.,n,Set(CALLERID(num)=Hidden Number) exten => _X.,n,Set(CALLERID(name)=Unknown) exten => _X.,n,Answer exten => _X.,n,rxfax(${FAXFILE}.tif) exten => _X.,n,Hangup exten => h,1,System(/usr/sbin/fax2mail -f ${FAXFILE})
fax2mail v2.3 script
#!/bin/bash #=========================================================================| # | # File: fax2mail | # Type: BASH script | # Summary: fax to E-Mail helper application for asterisk PBX | # Description: fax2mail is a helper application which sits between | # asterisk and a MTA. Is is designed to be called by asterisk upon the | # receipt of a new fax. It will forward the received fax to the email | # address of choice, and will convert the file the one of several | # formats. | # | #=========================================================================| # | # Usage: | # fax2mail allows these parameters from asterisk as follows: | # -p = To attach in pdf format (default) | # -e = To attach in eps format | # -t = To attach in tif format | # -f = absolute path to file w/out .tif extension | # --cid-name <CID Name> = Set CID Name of caller to <CID Name> | # --cid-number <CID Number> = Set CID Number of caller to <CID Number>| # --dest-exten <Exten Called> = Used to look up destination info | # from voicemail.conf. | # --dest-email <Destination Email> = Used to send teh email to. | # optional if --dest-exten is provided so that the email address | # can be looked up in voicemail.conf | # | #=========================================================================| # | # Examples: | # fax2mail -f /absolute/path/file | # file.tif in /absolute/path/ would be coverted to a pdf and sent to | # the email address specified in the "DEFAULTTO" global variable | # fax2mail -f /absolute/path/file --dest-exten 100 | # file.tif in /absolute/path/ would be converted to a pdf and sent to | # the email address associated with the exten 100 in voicemail.conf | # fax2mail -t -f /absolute/path/file --dest-email user@domain.tld | # file.tif in /absolute/path/ would be emailed in tif format to | # user@domain.tld | # | #=========================================================================| # | # Astrerisk config: | # [default] | # ...Unimportant stuff removed for this... | # ;Detected fax call | # exten => fax,1,Goto(fax,s,1) | # | # [fax] | # exten => s,1,Macro(recvfax) | # exten => h,1,System('/usr/bin/fax2mail --cid-number "${CALLERIDNUM}" | # --cid-name "${CALLERIDNAME}" --dest-exten "${INIT_EXTEN}" | # -f "${FAXFILE}"') | # NOTE: INIT_EXTEN has to be set with something similar to... | # exten => s,n,Set(INIT_EXTEN=${EXTEN}) | # | # [macro-recvfax] | # ; | # ; Receive incoming fax macro: | # ; | # exten => s,1,Set(FAXFILE=/var/spool/asterisk/fax/${STRFTIME(${EPOCH} | # ,,%Y%m%M%S)}-${CALLERIDNUM}-${INIT_EXTEN}) | # exten => s,2,rxfax(${FAXFILE}.tif) | # | #=========================================================================| # | # Dependencies: | # This application requires asterisk, ast_fax, app_rxfax, tifflib | # mime-construct | # | #=========================================================================| # | # Author: | # Designed and written by Michelle Dupuis on October 7, 2005 | # Michelle can be reached at support@ocgca | # This script and other related tools are available for download | # at www.generationd.com | # | #=========================================================================| # | # DATE VER AUTHOR DESCRIPTION | # Oct 7 2005 1.0 M Dupuis Original coding | # Oct 9 2005 1.8 M Dupuis Better parameter & email checking | # Oct 23 2005 1.9 M Dupuis Syntax error fixes, hand ! in ID name | # Oct 25 2005 2.0 M Dupuis Improved page count mechanism | # Nov 23 2006 2.1 J Puckett Generalized the script & pulled vars | # from voicemail.conf | # Nov 29 2006 2.2 J Puckett Made grep use regex to find exten and | # modified documentation | # May 1 2008 2.3 Asif Iqbal Fix comment error, fix double redirect | # | #=========================================================================| VERSION="fax2mail v2.3" LOGFILE="/var/log/asterisk/faxlog" #Set to /dev/null to disable logging DATETIME=$(date +"%A, %B %d %Y, at %I:%M %p") FROMEMAIL="Asterisk PBX <asterisk@spinen.com>" DEFAULTTO="info@spinen.com" echo >>$LOGFILE echo $VERSION >>$LOGFILE echo " Triggered on $DATETIME">>$LOGFILE echo " Called with $*">>$LOGFILE if [ ${#} -le 1 ]; then echo "Usage: $CMD_SCRIPT [-p | -e | -t] -f File [--cid-name <CID Name>] [--cid-number <CID Number>] [--dest-exten <Extension Called>] [--dest-name <Destination Name>] [--dest-email <Destination Email>]" echo " No parameters were given.">>$LOGFILE exit 1; fi CID_NAME="" CID_NUMBER="" DEST_NAME="" DEST_EMAIL="" DEST_EXTEN="" FILE="" FORMAT="pdf" while [ ${#} -gt 0 ]; do case "${1}" in "--cid-name" ) CID_NAME=${2} shift ;; "--cid-number" ) CID_NUMBER=${2} shift ;; "--dest-name" ) DEST_NAME=${2} shift ;; "--dest-email" ) DEST_EMAIL=${2} shift ;; "--dest-exten" ) DEST_EXTEN=${2} shift ;; "--file" | "-f" ) FILE=${2} shift ;; "-e" ) FORMAT="eps" ;; "-t" ) FORMAT="tif" ;; "-p" ) FORMAT="pdf" ;; esac shift done if [ "$FILE" = "" ]; then echo "Error: A file is required" echo " No file was given.">>$LOGFILE exit 1; fi echo " CallerID number of fax sender = $CID_NUMBER">>$LOGFILE echo " CallerID name of fax sender = $CID_NAME">>$LOGFILE echo " Fax number called = $DEST_EXTEN">>$LOGFILE echo " Destination name = $DEST_NAME">>$LOGFILE echo " Destination email address = $DEST_EMAIL">>$LOGFILE echo " Fax file name (without .tif extension) = $FILE">>$LOGFILE echo " Attachment format conversion = $FORMAT">>$LOGFILE # Correct for missing info if [ "$CID_NUMBER" = "" ] ; then CID_NUMBER="<unknown number>" echo " Set CallerID number of fax sender to $CID_NUMBER">>$LOGFILE fi # Must surround in quotes in case name is preceded by a ! if [ "$CID_NAME" = "" ] ; then CID_NAME="<unknown name>" echo " Set CallerID name of fax sender to $CID_NAME">>$LOGFILE fi if [ "$DEST_EXTEN" = "" ] ; then DEST_EXTEN="<unknown number>" echo " Set Fax number called to $DEST_EXTEN">>$LOGFILE fi # Get destination name if empty if [ "$DEST_NAME" = "" ] ; then DEST_NAME=`egrep "^$DEST_EXTEN\s*=>\s*" /etc/asterisk/voicemail.conf | cut -d, -f2` echo " Set Destination name to $DEST_NAME">>$LOGFILE fi # Get destination email if empty if [ "$DEST_EMAIL" = "" ] ; then DEST_EMAIL=`grep "^$DEST_EXTEN\s*=>\s*" /etc/asterisk/voicemail.conf | cut -d, -f3-` if [ "$DEST_EMAIL" = "" ] ; then DEST_EMAIL=$DEFAULTTO fi echo " Set Destination email address to $DEST_EMAIL">>$LOGFILE fi SOURCEFILE=$FILE.tif DESTFILE=$FILE.$FORMAT INFOFILE=$FILE.txt if [ -e $SOURCEFILE ] then echo " Fax file $SOURCEFILE found.">>$LOGFILE # Read data from TIFF file PAGES=$(tiffinfo $SOURCEFILE | grep "Page" | cut -d " " -f 1) DT=$(tiffinfo $SOURCEFILE | grep "Date") DTFAX=${DT#*:} COUNT=${PAGES#*-} if [ -z $COUNT ] then # If didn't find a page count, use the number of occurrences of "spandsp" COUNT=$(grep -c "spandsp" $SOURCEFILE) if [ -z $COUNT ] then COUNT="<unknown>" fi fi # Do any conversions requested case "$FORMAT" in # Check if PDF conversion required "pdf" ) tiff2pdf -f -p letter $SOURCEFILE > $DESTFILE #I like to keep around for a few days & use tmpwatch to clean up # rm -f $SOURCEFILE echo " Converted $SOURCEFILE to $DESTFILE.">>$LOGFILE ;; # Check if EPS conversion required "eps" ) tiff2ps -2eaz -w 8.3 -h 11.7 $SOURCEFILE > $DESTFILE # rm -f $SOURCEFILE echo " Converted $SOURCEFILE to $DESTFILE.">>$LOGFILE ;; # Default to leave as tif *) echo " No conversion of $SOURCEFILE required.">>$LOGFILE ;; esac echo -n >$INFOFILE echo "Dear $DEST_NAME,">>$INFOFILE echo >>$INFOFILE echo "You have just received a $COUNT page fax from $CID_NAME <$CID_NUMBER>, at phone number $DEST_EXTEN, on $DATETIME. The original fax document is attached in $FORMAT format.">>$INFOFILE echo >>$INFOFILE echo >>$INFOFILE echo >>$INFOFILE cat $DESTFILE | mime-construct --subpart --attachment fax.$FORMAT --type application/$FORMAT --file - >$FILE.part1 cat $INFOFILE | mime-construct --header "From: $FROMEMAIL" --to $DEST_EMAIL --subject "[PBX]: New fax from $CID_NAME <$CID_NUMBER>" --subpart-file $FILE.part1 --file - echo " E-mailed file to $DEST_EMAIL">>$LOGFILE # Delete the destination file echo " Removing destination file $DESTFILE">>$LOGFILE rm -f $DESTFILE # Exit with OK status code RETVAL=0 # Else tif file is missing else echo " Fax file $SOURCEFILE not found.">>$LOGFILE echo -n > $INFOFILE echo "Dear $DEST_NAME,">>$INFOFILE echo >>$INFOFILE echo "You have just received a fax attempt from $CID_NAME <$CID_NUMBER>, at phone number $DEST_EXTEN, on $DATETIME. There was a problem receiving the fax.">>$INFOFILE echo >>$INFOFILE echo >>$INFOFILE cat $INFOFILE | mime-construct --header "From: $FROMEMAIL" --to $DEST_EMAIL --subject "[PBX]: Failed fax attempt from $CID_NAME <$CID_NUMBER>" --file - echo " "E-mailed warning to $DEST_EMAIL >>$LOGFILE RETVAL=1 fi # Delete the temporary message file rm -f $FILE.part1 rm -f $INFOFILE echo >>$LOGFILE # exit with failure code exit $RETVAL