メールを送信することでFaxを送信できるようにする。
なるべくポート開きたくないので、Fetchmailを使用してGmailの専用アドレスにあるメールをPOP3で受信してFaxで送信。
送信のセキュリティはGmailのフィルタ機能で設定しておく。
この記事はRaspberry Pi (Raspbian)でFAX送受信環境を構築するの続きです。
2017/11/07 追記 ミスが複数あり正しく動作しなかったため修正しました。
目次
環境
- Raspberry Pi(Raspbian)にHylafaxが導入されて正常にFaxの送受信ができること。[構築方法(前記事)]
前記事に書かれている中身はすべて行われているものとしてこの記事は書かれています。
設定方法
Fetchmail、nkfをインストール
sudo apt-get install fetchmail nkf
Fetchmail設定
Fax用ユーザーアカウントで
Fetchmailの設定ファイルを作成する。
vim ~/.fetchmailrc
set postmaster root
set no bouncemail #エラーをrootにメール送信する
poll pop.gmail.com
protocol pop3
port 995
user '[ユーザー名]@gmail.com'
pass '[パスワード]'
ssl
mda '/home/faxuser/sendfax.sh'
パスワードが書かれているので他ユーザーが開けないようにする。
chmod 600 ~/.fetchmailrc
シェルスクリプトを作成する。
vim ~/sendfax.sh
#!/bin/sh
err_mail() #エラー発生時にsendmailでメール送信。
{
{
echo "From: [Fax用メールアドレス]"
echo "To: "$1
echo "Subject: HylaFax MailFax"
echo
echo "FaxNo: "$2
echo $3
}|/usr/sbin/sendmail -i -t
exit 0
}
dest=/home/faxuser/sendfax/tmp #一時保存先
tmp="$dest/$$"
nkf -w > $tmp-mail #メールをMIMEデコードして保存
faxno=`grep -i "^Subject:" $tmp-mail | sed -e "s/subject: //i"` #タイトル取得
mailadr=`grep -i "^Return-Path:" $tmp-mail | sed -e "s/Return-Path: /i" -e"s/>//"` #メールアドレス取得
#添付ファイル取得処理
grep -i '^Content-Type:' "$tmp-mail" |
grep "multipart/mixed" |
head -n 1 |
sed 's/..*boundary=//' |
tr -d '"' > $tmp-boundary
awk -v b="^--$(cat $tmp-boundary)" -v f="$tmp-F" \
'{if($0~b){a++};print > f a}' "$tmp-mail"
grep -i 'filename=' $tmp-F* |
sed 's/^\([^:][^:]*\):..*filename=\(..*\)/\1 \2/' |
tr -d '"' |
while read a b ; do
sed -n '/^$/,$p' "$a" |
base64 -d > "$a-${b}"
#base64 -d > "$dest/$(basename $1)_${b}"
done
#添付ファイルここまで
find $dest -name "* *" | rename 's/ /_/g' #ファイル名のスペースをアンダーバーに置換
#PDFファイルのリストを作成。PDFファイルがない場合はエラーメールを送信。
file $tmp-* |grep -i 'PDF' |sed -e "s/:.*//" > ${tmp}filelist
if [ ! -s ${tmp}filelist ];then
err_mail $mailadr $faxno "No PDF File"
fi
#GhostscriptでPDFファイルを処理。全ファイルをA4縦に変換して連結。処理失敗時はエラーメールを送信。
gs -dNOPAUSE -dFIXEDMEDIA -dPDFFitPage -sPAPERSIZE=a4 -dBATCH -sDEVICE=pdfwrite -dAutoRotatePages=/None -o ${tmp}faxdata.pdf -f `cat ${tmp}filelist`
if [ $? = 1 ];then
err_mail $mailadr $faxno "Ghostscript Error"
fi
echo ${tmp}faxdata.pdf
#FAX送信 エラー時はメール送信。
sendfax -n -d $faxno ${tmp}faxdata.pdf
if [ $? = 1 ];then
err_mail $mailadr $faxno "SENDFAX ERROR"
fi
#一時ファイルを削除して終了。
rm $tmp*
exit 0
特にこの部分は参考URLのコードをほぼそのまま使わせていただきました。
実行権限を与えて、必要なディレクトリを作成する
chmod +x ~/sendfax.sh
mkdir ~/sendfax
mkdir ~/sendfax/tmp
自動受信の設定
crontab -e
以下のコードを末尾に追加する。(3分おきにGmailにアクセスして新着メールを取得する。)
*/3 * * * * /usr/bin/fetchmail
これで設定したメールアドレスに件名を宛先電話番号にしてPDFを添付したメールを送ればFaxが送信されるはず。
ただ、Apple MailがPDFファイルを単純な添付ファイルとして扱ってくれないので、Apple Mailから送信すると正しくFax送信できない。
いろいろ試したけれども、私にはうまくシェルスクリプトを編集して改善させることはできなかったので、Automatorでプリントプラグインを書いて各アプリの印刷画面から送信できるようにした。こっちの方が便利そうだし…