How do I set up a fax modem to receive
faxes then convert them into email?
Rant and Essay: (skip if you just want
an answer to the question )
On the face of it, this seems like a
silly question. Why not just get the originator to send you the
content as an email in the first place. In many cases this is quite
possible, however not every industry has actually modernized. Keep in
mind, there are a lot of people out there still using DOS (not denial
of service, but rather Disk Operating System) My wife works with some
people who are still in this technological dark age.
Previously she had a Cannon Multipass
C3500. This is a simple ink jet fax/scan/copier that lasted several
years. One really nice feature that this (the C3500) had is that it
can be configured to receive incoming faxes into the attached
computer. There are several reasons you might want to do this:
-
ink jet ink is much more expensive
than laserjet ink, so it is cheaper to print on a different printer.
-
If you get on a junkmail fax list,
it's nearly impossible to get off of the list (trust me I've tried) so
why should you waste expensive ink jet ink on junkmail faxes. (much
better to just delete them in the computer.)
-
If you have the fax in digital
format, you can save it digitally or forward it to someone via email,
moving to a more modern technology.
We decided to replace the C3500, and
went shopping. We settled on the HP Office Jet 5510 all-in-one
(HP
5510)
But it is missing this critical
feature. We checked the web pages and even contacted tech support.
And they told us that the entire HP fax line does NOT have a "do
not print incoming faxes" option. It will save faxes to memory so
you can save and forward them digitally but, you still have to waist
ink on them.
I am CONVINCED that this choice is
deliberate. All the ink jet manufactures clearly make money on the
ink. Ink jet printers are frequently "free with rebate" or "free
with computer" and the reason they are willing to do that is that
they make lots of money selling 4ml of ink for $40. It really is a
scam.
I checked around, looked on the Brother
and Lexmark sites. I could be wrong, but near as I can tell, the
similar products from the other manufactures have the same
limitation.
End of Rant.
So what do I do about it ?
It turns out that its actually quite
simple to receive faxes with linux and send them out as email. But
frustratingly there exists no simple How-To start to finish on how to
do it.
I started out with an old linux box,
currently running Redhat 9.0 (yes it's obsolete, but it is behind a
firewall and all I use it for is a home-lan fileserver, and now
fax-to-email. )(update 11/06: I migrated the fax 2 email function to a new box running fedora 6, using these notes. No problems encountered, except that my old ISA modem was useless, so I switched to an external faxmodem connected to /dev/ttyS0 ) and in this machine I have an old fax modem. Might
even be a 33.6 modem instead of 56k. It's been a long time since I've
used it as a modem, but the critical thing here is that it is an old
modem that linux can use. Most modern modems are "WinModems"
which do not have linux drivers. If you need to buy a modem, you have
to get one that supports linux. It will cost more, and to make
matters worse, not all the "product specifications" pages even
mention linux. A friend pointed out one at Circuit City by BestData
that does not mention linux on the box, and says it requires windows,
but apparently the website says it is supported under linux. Bottom
line: research first, then buy.
The next part is easy. It turns out
that efax is included in
the Red Hat 9
distro. (it's probably in newer versions, and even if it isn't you
can download and install it from the efax page )
Now the efax
documentation is a little sketchy.
But it told me how to add efax as a
service that will answer calls. I just added the line:
## line for efax
s1:45:respawn:/bin/sh /usr/bin/fax
answer
to the end of /etc/inittab. (to make chenges take effect, use telinit q , as root and init will re-read /etc/inittab )
which works fine. When the machine
boots, it starts the fax process and when the fax line rings it
answers the phone and receives the faxes to /var/spool/fax (efax assumes that the faxmodem is /dev/modem if it isn't, a symlink will fix it (ln -s /dev/ttyS0 /dev/modem does it for me )
that part works great. But the problem
is the "send as email" part. The efax docs mention that the efax
can be configured to do this, but don't go on to say how. In fact,
the docs mention the /etc/efax.rc configuration file, but no sample
of the file is given. So I had no idea what even is supposed to go
into the file.
I found a efax.rc file here,
but it too was missing some pieces of the puzzle.
That one contained the lines :
# The user to be
sent mail when a fax is received.
FAXMGR=$USER
# The sendmail
executable including full path if necessary. Only
# required if
forwarding received faxes by e-mail in $NOTIFY.
SENDMAIL=/usr/sbin/sendmail
# The command to
execute when a fax is received. Normally this
# sends FAXMGR
e-mail or prints the received fax. The variable
# $f will be the
name of the log file, $FILES will contain the
# names of the
received files, and $REMID will have the remote ID
# string or '?' if
none. The faxmail function will e-mail the fax
# as MIME
image/tiff attachments. Comment this out to do
# nothing. Protect
with single quotes.
NOTIFY='faxmail
"$REMID" "$f" $FILES | $SENDMAIL $FAXMGR
# NOTIFY='mail -s
"fax/message from $REMID: $FILES" $FAXMGR <$f'
# NOTIFY='lpr $f ;
$FAX print $OPT $FILES'
with these three "notify" options.
The "faxmail" comand looks like what we want, but sadly, I
couldn't figure where the "faxmail" command was supposed to be.
It wasn't installed as part of efax.
I changed the "NOTIFY" line to this:
NOTIFY='uuencode $FILES fax.tif |mail
-s "fax/message from $REMID: $FILES" $FAXMGR '
(uuencode is part of sharutils, which is
included in most
distros, but not necessarily part of the default install. )
and that almost works, but it has a few
problems: 1)this only works one page faxes. 2) the attached tif file
is not auto viewed by our mail client ( mozilla ) so you have to
double click on it to view it in a new window. 3) because the image
is actually a fax encoded tif the aspect ratio is wrong.
So I resorted to a simple perl script
and that solved the problem.
My NOTIFY line:
NOTIFY='/root/fax2mail.pl $REMID
$FILES'
( actually this is the only line in my
/etc/efax.rc that isn't a comment )
my simple perl script : (/root/fax2mail
)
#!/usr/bin/perl
$SENDTO="XXXXX\@YYYY.com"
$faxfrom="$ARGV[0] $ARGV[1]
$ARGV[2] $ARGV[3] $ARGV[4] $ARGV[5] $ARGV[6] $ARGV[7] $ARGV[8]
$ARGV[9] $ARGV[10]";
$faxfrom=~s/ / /g; ## remove extra
blanks
$faxfrom=~s/ / /g;
$faxfrom=~s/ / /g;
$faxfrom=~s/ / /g;
$faxfrom=~s/ / /g;
$n=1;
$isopen=0; ## don't bother sending mail
if no fax pages
do {
$filename=$ARGV[$n];
if (-e $filename){
if ($isopen==0){
open (OUT,"|mail -s 'fax
from
$faxfrom' $SENDTO");
$isopen++;
};
$x=`convert $filename /tmp/fax.png`;
$outfile="$filename".".png";
open (IN,"uuencode /tmp/fax.png
$outfile |");
do{$line=<IN>;print (OUT
$line); }until (eof(IN));
close (IN);
};
$n++;
}until ($n>=(@ARGV));
close (OUT);
-----------
change $SENDTO="XXXXX\@YYYY.com" to
where you want the faxes sent. Don't forget to use \@ ( I lost some
time to this pitfall )
It's not the most elegant, but it
works. It calls "convert" to convert the tiffg3 format to a png.
(convert is included in imagemagick
which is included in most distros ) . The script doesn't open the
mail command until it knows it has an attachment to send. This script
gets called even when no fax is received. ( non fax wrong number, or
fax fails to make connection ) I saw no reason to send an empty
email.
The result works quite well. Incoming
faxes are converted to email attachments that are visible within
mozilla when the email is opened. The subject contains the phone
number the fax came from ( the $REMID variable on the NOTIFTY line,
this is the number the sending fax machine sends, it's not based on
callerid, so it could be incorrect )
Possible problems:
-
I never clean up /var/spool/fax, so
that could possibly fill up disk space,but at 40k per fax page and only
10/15 pages per day it will take a while. But a cron job should be add
to discard old fax files.
-
A feature present in the cannon fax
receipt program would let you rotate faxes sent upside down or
sideways. I have no idea how to achieve this when the fax is sent as a
mail attachment.
-
Because the $REMID is passed though
a shell, it's might be possible that someone could issue a command (as
root) though creative setting of the sender's fax machine's phone
number identifier. I don't know what character limitation that field
has nor how long it can be. This is more of a amusing thought exercise
than a real security problem.
Possible additions:
A version of the fax2email script in bash [warning, It's in German, but the code is easy to read regardless of language]
Replys:
|