On 20/06/2013 2:03 AM, Daniel - Asterisk wrote:
Hello everyone,
I'm trying to send a received fax with mutt, when I try it from the
Linux shel it works, but when trying with Asterisk's System command it
doesn't.
Successful Linux command:
echo | mutt -s "New fax" earohua...@gmail.com
<mailto:earohua...@gmail.com> -a /tmp/faxes/201306191111.tif
Unsuccessful Asterisk Command:
same => n,System(mutt -s "New fax" elder.arohua...@gmail.com
<mailto:elder.arohua...@gmail.com> -a ${FAXDEST}/${tempfax}.tif)
I'm using Asterisk 1.8.19.0 on Debian 6.0.6, Asterisk was installed by root.
Any hint will be appreciated.
Elder D. Arohuanca
Lima - Peru


--

Reading the responses to this thread I suspect the issue is that the Muttrc file cannot be found, I am assuming the user:group Asterisk is running as does not have a shell associated with it nor a home directory.

I am using OpenBSD and the above is true for my environment.

I have in my Asterisk Spool directory the folder structure /var/spool/asterisk/fax/received. This folder is read-write for the account Asterisk runs as.

On my system I set it up to use macros, one to receive the fax and another to send the e-mail if one was received. The calling of the macro to send the e-mail is performed in the Hangup extension.

I use extensions.ael on my system so here are the macros I set up;

macro fax-receive( fax-number, header-info, sender, recipient ) {
/*
        ${ARG1} is Receiving Station Fax Number
        ${ARG2} is Fax Header Information
        ${ARG3} is Fax Sender E-mail Address
        ${ARG4} is Fax Recipient E-mail Address
*/
        NoOp(**** FAX RECEIVE ****);
        Set(FAXOPT(localstationid)=${LOCAL(fax-number)});
        Set(FAXOPT(headerinfo)=${LOCAL(header-info)});
        Set(FROMADDR=${LOCAL(sender)});
        Set(TOADDR=${LOCAL(recipient)});
        NoOp(**** SETTING FAXOPT ****);
        NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)});
        NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)});
        NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)});
        Set(RXSTART=${EPOCH});
        Set(FAXRXPATH=/var/spool/asterisk/fax/received);
        Set(FAXRXFILE=fax-${CALLERID(number)}-${UNIQUEID});
        NoOp(**** RECEIVING FAX : ${FAXRXFILE} ****);
        ReceiveFAX(${FAXRXPATH}/${FAXRXFILE}.tif,fd);
        NoOp(**** Subroutine Return ****);
        return;
        };

macro email_rxfax() {
        Set(CALLDURATION=$[(${EPOCH}-${RXSTART})]);
System(FAXRXFILE=${FAXRXFILE} FAXRXPATH=${FAXRXPATH} FAXRXSTATUS="${FAXOPT(status)}" FAXERROR="${FAXOPT(statusstr)}" FROMADDR="${FROMADDR}" TOADDR="${TOADDR}" LOCALSTATIONID="${FAXOPT(localstationid)}" REMOTESTATIONID="${REMOTESTATIONID}" FAX PAGES=${FAXOPT(pages)} FAXBITRATE=${FAXOPT(rate)} FAXRESOLUTION=${FAXOPT(resolution)} CIDNUMBER="${CALLERID(number)}" CIDNAME ="${CALLERID(name)}" CALLDURATION=${CALLDURATION} /usr/local/sbin/afax2email);
        NoOp(**** STATUS : ${SYSTEMSTATUS} ****);
        NoOp(**** Subroutine Return ****);
        return;
        };

Note, the System() line in email_rxfax() is one long line before the NoOp().

Here is an example entry in extensions.ael;


context fax-pstn1 {

        fax => {
                NoOp(Fax Received ${STRFTIME(,,%F %T %z)});
&fax-receive(+61 8 9XXXXXXX,Your Business Name,FaxMaster@<your.domain.name>,lmoore@<your.domain.name>);
        };

        h => {
                if ( "X${FAXRXFILE}" != "X" )
                {
                        &email_rxfax();
                }
                NoOp(Call/Fax Ended ${STRFTIME(,,%F %T %z)});
        };

};

Here is a sample extensions.ael entry for an incioming fax.

context fax-pstn1 {

        fax => {
                NoOp(Fax Received ${STRFTIME(,,%F %T %z)});
&fax-receive(+61 8 9XXXXXXX,Your Business Name,FaxMaster@<your.domain.name>,lmoore@<your.domain.name>);
        };

        h => {
                if ( "X${FAXRXFILE}" != "X" )
                {
                        &email_rxfax();
                }
                NoOp(Call/Fax Ended ${STRFTIME(,,%F %T %z)});
        };

};


I created a Muttrc file in /etc/asterisk, I use msmtp for the mail progam, sendmail works but I didn't like the Envelope-From information sendmail would add hence using msmtp, because the user asterisk runs as does not have a home directory nor a shell I _had_ to use an RC file for mutt. Here is my Muttrc file.

set sendmail="/usr/local/bin/msmtp"
set use_from=yes
set realname="Asterisk Fax Agent"
set from=FaxMaster
set record=""
#set envelope_from=yes


This is the afax2email script I use, note that mutt is called with "-F /etc/asterisk/Muttrc".


#! /bin/ksh
#
# Script to e-mail a received fax from Asterisk
#

#
# Environment variables imported from Asterisk
#

EMAIL="Asterisk Fax Agent <$FROMADDR>"

export EMAIL SUBJECT TOADDR FROMADDR

TIFF2PDF="/usr/local/bin/tiff2pdf"
TIFFINFO="/usr/local/bin/tiffinfo"
MAILER="/usr/local/bin/mutt"
MAILERARGS="-F /etc/asterisk/Muttrc"
FILEPATH="$FAXRXPATH/$FAXRXFILE"
FAXIMAGE="$FILEPATH.tif"
PDFFILE="$FILEPATH.pdf"
MSGFILE="$FILEPATH.msg"

DURATION=`printf "%.2d" "$CALLDURATION"`

if [[ "$CALLDURATION" -ge "60"  && "$CALLDURATION" -lt "3600" ]]; then
        S=$CALLDURATION
        ((mins=S/60))
        ((secs=S%60))
        DURATION=`printf "%.2d:%.2d\n" "$mins" "$secs"`
fi
if [ "$CALLDURATION" -ge "3600" ]; then
        S=$CALLDURATION
        ((hours=S/3600))
        ((mins=S%3600/60))
        ((secs=S%60))
        DURATION=`printf "%d:%.2d:%.2d\n" "$hours" "$mins" "$secs"`
fi


if [[ -d "${FAXRXPATH}" && -w "${FAXRXPATH}" ]]; then

        if [ X"${FAXRXSTATUS}" = X"SUCCESS" ]; then
                SUBJECT="Facsimile received from \"$REMOTESTATIONID\""
echo "A facsimile has been received on `printf "%s" "$LOCALSTATIONID"`." > "$MSGFILE"
        fi

        if [ X"${FAXRXSTATUS}" = X"FAILED" ]; then
                if [ "$FAXPAGES" -ne "0" ]; then
SUBJECT="Facsimile reception failed from \"$REMOTESTATIONID\""
                else
SUBJECT="Facsimile reception failed from telephone number \"$CIDNUMBER\""
                fi
echo "Problems encountered receiving facsimile on `printf "%s" "$LOCALSTATIONID"`." > "$MSGFILE"
        else
if [[ X"${FAXRXSTATUS}" != X"SUCCESS" && X"${FAXRXSTATUS}" != X"FAILED" ]]; then

SUBJECT="Facsimile reception failed from telephone number \"$CIDNUMBER\"" echo "An unknown error was encountered receiving a facsimile on `printf "%s" "$LOCALSTATIONID"`." > "
$MSGFILE"
                fi
        fi

        echo >> "$MSGFILE"
printf "%18s" "Sender: " >> "$MSGFILE"; printf "%-20s\n" "${REMOTESTATIONID}" >> "$MSGFILE" printf "%18s" "Pages: " >> "$MSGFILE"; printf "%-20s\n" "${FAXPAGES}" >> "$MSGFILE" printf "%18s" "Signal Rate: " >> "$MSGFILE"; printf "%-20s\n" "${FAXBITRATE} bit/s" >> "$MSGFILE" printf "%18s" "CallerID Number: " >> "$MSGFILE"; printf "%-20s\n" "${CIDNUMBER}" >> "$MSGFILE" printf "%18s" "CallerID Name: " >> "$MSGFILE"; printf "%-20s\n" "${CIDNAME}" >> "$MSGFILE" printf "%18s" "Call Duration: " >> "$MSGFILE"; printf "%-20s\n" "${DURATION}" >> "$MSGFILE" printf "%18s" "Status: " >> "$MSGFILE"; printf "%-20s\n" "${FAXERROR}" >> "$MSGFILE"

        if [ -e "${FAXIMAGE}" ]; then
                if (`$TIFF2PDF -o "$PDFFILE" "$FAXIMAGE"`) ; then
$MAILER $MAILERARGS -s "$SUBJECT" -a "$PDFFILE" -- "$TOADDR" < "$MSGFILE"
                else
$MAILER $MAILERARGS -s "$SUBJECT" -a "$FAXIMAGE" -- "$TOADDR" < "$MSGFILE"
                fi
                rm -f "$PDFFILE" "$MSGFILE"
        else
                $MAILER $MAILERARGS -s "$SUBJECT" "$TOADDR" < "$MSGFILE"
                rm -f "$MSGFILE"
        fi

else
        echo "Unable to access \"${FAXRXPATH}\""
fi

exit


--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
              http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to