Строка 188: | Строка 188: | ||
==Скрипт пересылки письма на факс== |
==Скрипт пересылки письма на факс== |
||
nano /home/efax/mailtofax |
nano /home/efax/mailtofax |
||
+ | <source lang="bash"> |
||
⚫ | |||
+ | #!/bin/bash |
||
⚫ | |||
⚫ | |||
⚫ | |||
preffil=`echo $namefile|awk -F "_" '{print $1}'` |
preffil=`echo $namefile|awk -F "_" '{print $1}'` |
||
id=`echo $namefile|awk -F "_" '{print $2}'` |
id=`echo $namefile|awk -F "_" '{print $2}'` |
||
numbertel=`echo $namefile|awk -F "_" '{print $3}'` |
numbertel=`echo $namefile|awk -F "_" '{print $3}'` |
||
− | + | # Перемещаем файл в обработку |
|
− | + | mv /home/efax/IN/$namefile /home/efax/PROC/$namefile |
|
− | + | # Генерим уникальный ключ сессии |
|
− | + | datetime=`date +"%Y/%m/%d %T"` |
|
uniqid=`echo $RANDOM$datetime|openssl md5 -r|awk '{print $1}'` |
uniqid=`echo $RANDOM$datetime|openssl md5 -r|awk '{print $1}'` |
||
− | + | # Отправляем файл на доставку |
|
− | + | istr=`sendfax -n -d $numbertel-$uniqid /home/efax/PROC/$namefile` |
|
jobnumber=`echo $istr|grep -Po "request id is \d+"|awk '{print $4}'` |
jobnumber=`echo $istr|grep -Po "request id is \d+"|awk '{print $4}'` |
||
− | + | echo "$uniqid;$datetime;$preffil;$id;$numbertel;$namefile;$jobnumber" >> /var/log/mailfax.log |
|
Делаем его исполняемым |
Делаем его исполняемым |
||
chmod +x /home/efax/mailtofax |
chmod +x /home/efax/mailtofax |
||
+ | </source> |
Версия от 01:24, 10 июня 2012
Исходные данные:
Имеется внешний почтовый ящик pop3 (email, логин, пароль);
Внешний voip сервер имеющий выход на ТФОП;
Файл письма отвечающего требования формата названия файла
Логика работы:
Fetchmail забирает письма с внешнего почтового ящика по протоколу pop3 и передает их обработчику почтовых сообщений Procmail;
Первый шаг Procmail передает тело письма программе ripmime;
Ripmime извлекает из письма прикрепленные файлы;
Второй шаг Procmail запускает скрипт обработки файлов;
Задача скрипта: проверить формат названия файла, извлечь из него телефонный номер получателя, передать файл на отправку Hylafax, записать в лог присвоенный номер задания по отправке факса и имя передаваемого файла;
Hylafax получив задание подключается к iaxmodem, набирает номер получателя факса;
Asterisk выполняет подключение к voip серверу имеющему выход в ТФОП; Дозвонившись Asterisk проговаривает голосовое приветствие;
Asterisk соединяет iaxmodem с факсовым аппаратом получателя; Информацию об удачном прохождении или об ошибке Hylafax сохраняет в системный файл.
apt-get update apt-get install asterisk iaxmodem hylafax-server procmail fetchmail
Настраивается пакет libvpb0 7
Postfix Configuration Без настройки
Нужно заранее подготовить почтовый ящик с доступом по pop3 на внешнем почтовом сервере
Настройка Asterisk
Необходимо создать учетную запись IAX а так-же транк для подключения к провайдеру IP телефонии по SIP протоколу для совершения исходящих вызовов.
копируем оригинальный файл
cp /etc/asterisk/iax.conf /etc/asterisk/iax.conf.orig
очищаем оригинальный файл
echo ""> /etc/asterisk/iax.conf
открываем файл
nano /etc/asterisk/iax.conf
и прописываем следующий конфиг
[general] allow=alaw [iaxprovider] type=peer host=ip username=user fromuser=user secret=1233 qualify=yes
[910] host=dynamic type=friend secret=faxfax123 requirecalltoken=no context=from-internal
копируем оригинальный файл
cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.orig
очищаем оригинальный файл
echo ""> /etc/asterisk/extensions.conf
открываем файл
nano /etc/asterisk/extensions.conf
и прописываем следующий конфиг
[from-internal] exten => _.,1,Dial(iax2/iaxprovider/${EXTEN})
Перезапускаем Asterisk
/etc/init.d/asterisk restart
Настройка IAXMODEM
Создаем конфигурацию виртуального модема
nano /etc/iaxmodem/iaxmodem-cfg.ttyIAX1
device /dev/ttyIAX1 owner uucp:uucp mode 660 port 4570 refresh 300 server 127.0.0.1 peername 910 secret faxfax123 codec alaw
Запускаем виртуальный модем
/etc/init.d/iaxmodem start
Проверяем лог запуска
cat /var/log/iaxmodem/iaxmodem
Настройка hylafax Server
Запускаем мастер настройки
faxsetup
Отвечаем на все вопросы по умолчанию пока не появится вопрос:
Serial port that modem is connected to [ttyS0]?
Пишем имя порта ttyIAX1 и продолжаем отвечать на вопросы мастера, пока не появится запрос о добавлении второго модема Do you want to run faxaddmodem to configure another modem [yes]? . На него отвечаем No Перезапускаем hylafax
/etc/init.d/hylafax restart
Настройка сбора почты
Настройка окружения
Добавим пользователя
adduser efax
указываем любой пароль по вкусу Добавим папки для факсов
cd /home/efax mkdir IN PROC ERR OK
ripmime
Соберем пакет ripmime для извлечения атачментов из писем.
cd /tmp wget http://www.pldaniels.com/ripmime/ripmime-1.4.0.10.tar.gz cd /usr/src tar zxvf /tmp/ripmime-* cd ripmime-* make make install
fetchmail
копируем оригинальный файл
cp /etc/default/fetchmail /etc/default/fetchmail.orig
очищаем оригинальный файл
echo ""> /etc/default/fetchmail
открываем файл
nano /etc/default/fetchmail
и прописываем следующий конфиг
START_DAEMON=yes
nano /etc/fetchmailrc
set daemon 10 set no bouncemail defaults: antispam -1 batchlimit 100 sslproto "" poll mail.local proto pop3 user user pass 123 is efax here mda 'procmail -d %T'
procmail
nano /etc/procmailrc
DEFAULT=/home/efax/ :0 * ^From:.* { :0 fbw | ripmime -i - --no-nameless -d /home/efax/IN/ :0 Afhw | /home/efax/mailtofax } # Все остальные письма отправить в /dev/null :0 * ^From:.* /dev/null
Скрипт пересылки письма на факс
nano /home/efax/mailtofax
#!/bin/bash
# Ищем самый свежий файл соответствующий шаблону имени и разбираем на переменные
namefile=`ls -tr /home/efax/IN| grep -P ".+_.+_.+\.pdf"|tail -n1`
preffil=`echo $namefile|awk -F "_" '{print $1}'`
id=`echo $namefile|awk -F "_" '{print $2}'`
numbertel=`echo $namefile|awk -F "_" '{print $3}'`
# Перемещаем файл в обработку
mv /home/efax/IN/$namefile /home/efax/PROC/$namefile
# Генерим уникальный ключ сессии
datetime=`date +"%Y/%m/%d %T"`
uniqid=`echo $RANDOM$datetime|openssl md5 -r|awk '{print $1}'`
# Отправляем файл на доставку
istr=`sendfax -n -d $numbertel-$uniqid /home/efax/PROC/$namefile`
jobnumber=`echo $istr|grep -Po "request id is \d+"|awk '{print $4}'`
echo "$uniqid;$datetime;$preffil;$id;$numbertel;$namefile;$jobnumber" >> /var/log/mailfax.log
Делаем его исполняемым
chmod +x /home/efax/mailtofax