Fax2mail: Difference between revisions
From KlavoWiki
Jump to navigationJump to search
Line 20: | Line 20: | ||
<pre> | <pre> | ||
perl -MCPAN -e "install Bundle::LWP" | perl -MCPAN -e "install Bundle::LWP" | ||
</pre> | </pre> | ||
Revision as of 22:52, 29 April 2012
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.
CPAN Prerequisite
For fax2mail to be able to send emails mime-construct requires to be installed.
yum -y install perl cpan libyaml perl-YAML wget http://search.cpan.org/CPAN/authors/id/R/RO/ROSCH/mime-construct-1.11.tar.gz tar xzvf mime-construct-1.11.tar.gz cd mime-construct-1.11 perl Makefile.PL make install
Patch
Install LWP. For a list of CPAN mirrors
perl -MCPAN -e "install Bundle::LWP"
For mime-construct to be configured correctly on a CentOS installation a patch must be run.
perl -MCPAN -e "install Proc::WaitStat" perl -MCPAN -e "install MIME::Types"
NOTE: When the patch is run you will need to press enter a few hundred times.
Testing
mime-construct
You should see:
mime-construct: no recipients specified
Simple email sending
mime-construct --to "your@mail.com" --subject 'hi there' --string "test"
Email with attachment
/usr/bin/mime-construct --header 'Sender: MOR_FAX@TEST.COM' --header 'From: MOR_FAX@TEST.COM' --to your@mail.com --subject 'Email test' --file-attach /var/spool/asterisk/faxes/fax_test.pdf
fax extensions
[prifax] exten => s,1,GotoIf($["${CALLERID(name)}"="${CALLERID(number)}"]?:3) same => 2,Set(CALLERID(name)=) same => 3,AGI(cid-lookup-v4.agi) same => 4,Set(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID}) same => 5,Answer() same => 6,Wait(2) same => 7,ReceiveFAX(${FAXFILE}.tif) exten => h,1,System(/usr/sbin/fax2mail -f ${FAXFILE} --cid-name "${CALLERID(name)}" --cid-number ${CALLERID(num)})
fax2mail v2.3 script
Slight formatting edits to the logfile.
#!/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="AsterFAX <do-not-reply@mypbx.com>" DEFAULTTO="myaddress@somewhere.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 echo "" >>$LOGFILE # Correct for missing info if [ "$CID_NUMBER" = "" ] ; then CID_NUMBER="<hidden 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 echo "" >>$LOGFILE 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 "" >$INFOFILE echo "Dear $DEST_NAME," >>$INFOFILE echo "" >>$INFOFILE echo "You have just received a $COUNT page fax:" >>$INFOFILE echo "" >>$INFOFILE echo " From : $CID_NAME <$CID_NUMBER>" >>$INFOFILE echo " To : $DEST_EXTEN" >>$INFOFILE echo " Date : $DATETIME" >>$INFOFILE echo "" >>$INFOFILE echo "The original fax document is attached in $FORMAT format." >>$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 source and destination file echo " Removing destination file $DESTFILE">>$LOGFILE rm -f $DESTFILE echo " Removing source file $SOURCEFILE">>$LOGFILE rm -f $SOURCEFILE # 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