こんにちは。ドラマーのひろです。
皆さんはFAXを使っているでしょうか。(もはやFAXを知らない世代の方もいるかもしれませんが。。)
私は久しくFAXを使っていませんでしたが、とある会社の発注システムでFAX送信が要件になったのでPythonからFAX送信を検討する機会がありました。
どうやら、発注はまだまだFAXを使用する場合があるようです。
というのも、送信側がやり方を変えたいと思っても受注側がFAXで対応することを求めている場合がありなかなか送信側の会社の思いだけではFAXを無くせない現状があります。
そこで今回はInterFAXというインターネットFAXサービスを利用してPCでFAXを送信する方法をお伝えします。
ソースコード自体はシンプルなので、InterFAXで何ができるのか、制約などあるのかあわせてお伝えします。
InterFAXとは
InterFAXは株式会社ドゥイットが提供するインターネットFAXサービスです。
インターネットサービスとはインターネットを介してFAX送信できる仕組みです。
通常のFAXは電話回線を使うためにPCやプログラムとの親和性が低いですが、インターネットでやり取りできれば、プログラムとの親和性が向上します。
インターネットFAXでは、API経由のFAX送受信やSDKが提供されています。
InterFAXでもAPIが提供されているほか、pythonライブラリなどのSDKも提供されています。(InterFAXデベロッパーガイド)
InterFAXでFAX送信する方法
InterFAXでPython経由でFAX送信する方法は以下の2つでした。
- osaライブラリを使用する
- interfaxライブラリを使用する
それぞれ試してみたので、ソースコードと送信可否についてお伝えします。
osaライブラリを使用する
まずはosaライブラリをインストールします。
こちらのリンクから以下の「Download」ボタンを押下し、Modified_OSA.zipをダウンロードします。
Modified_OSA.zipを解凍し、中にある「setup.py」を実行してインストールします。
送信用のソースは以下となります。これは公式のソースを簡略化して記述したものです。
## install: Modified_OSA(python setup.py install)
## Comment: 10 minutes to send
import osa
import base64
from os.path import basename, splitext
# Difinition
USER_ID = "XXXXXX"
PASSWORD = "XXXXXXXX"
SEND_TO = "9999-99-9999" #FAX番号
FILE = "./XXXXXX.pdf"
client = osa.Client("https://ws.interfax.net/dfs.asmx?WSDL")
file_type = splitext(FILE)[1].strip(".").upper()
with open(FILE, "rb") as f:
try:
result = client.service.Sendfax(Username=USER_ID, Password=PASSWORD, FaxNumber=SEND_TO,
FileData= base64.b64encode(f.read()),
FileType= file_type)
print(' Fax was sent with result code: {0}'.format(result))
except Exception as err:
print(err)
送信する際にはどうやらbase64にエンコードする必要があるようです。
実はこのソース、うまく送信できませんでした。
サポートにも問い合わせたのですが、解決せずお蔵入りのコードです。
interfaxライブラリを使用する
あらかじめお伝えすると、こちらはFAX送信に成功しています。
まず、pipからinterfaxライブラリをインストールします。interfaxの依存ライブラリとしてpython_magic_binもインストールが必要でした。
$ pip install interfax
$ pip install python_magic_bin
送信用ソースは以下となります。
## pip-install: pip install interfax
## pip-install: pip install python_magic_bin
## Comment: Success file type(pdf), Failed file type(pptx)
import interfax
INTERFAX_USER="XXXX"
INTERFAX_PASSWORD="XXXX"
fax = interfax.client.InterFAX(INTERFAX_USER, INTERFAX_PASSWORD)
fax.deliver(
fax_number='9999-99-9999',
files=["./XXXX.pdf"]
)
ソースコードはかなりシンプルです。
こちらは動作を試したところ、正常に送信できました。
ただし、こちらの関数ではpowerpointの送信は成功しませんでした。
サポートされるファイル形式にはpptxが乗っているのですが、解析エラーとなり送れません。(サポートされるファイル形式)
テストではpdfとpptxの送信を試しましたが、pdfのみ成功という結果でした。
その他のFAX送信方法
そのほかのFAX送信方法としてはJavaやPHPのSDKもあるようですが、
お手軽なのは「メールによるFAX送信」と「コンソール画面からのFAX送信」です。
メールによるFAX送信
以下のメールでFAXを送信することができます。
- 宛先:【FAX番号】@fax.tc
(例)0311111111@fax.tc - タイトル:送信タイトル
- 本文:<空>
- 添付:FAX送信したいファイル
非常にシンプルで使いやすいです。
メールによるFAX送信ではpdfとpptxの送信を試し、どちらも成功しました。
タイトルの内容は以下のように送信履歴に表示されるので何を送ったのか書いておくとよいと思います。
また、タイトルに「 /d yyyy-mm-dd time」をつけることで最大30日の送信予約もできるようです。(例:タイトル /d 2021-04-04 10:00)
タイトルに「/B」または「/b」を入れることで、本文もFAX送信できるみたいです。
コンソール画面からのFAX送信
こちらのページの以下からコンソール画面にログインし、FAXを送ることもできました。
以下のようにシンプルな画面からFAX送信できました。
こちらもpdfとpowerpointの送信を試し、どちらも成功しました。
InterFAXでできること/InterFAXの制約
そのほか、できることや制約について、ポイントをお伝えします。
FAX送信には3~5分程度かかる
FAX送信が成功ステータスとなるまで3~5分程度かかっていました。
FAX送信成否をメールで通知できる
コンソール画面の送信履歴からでも成否を確認できますが、メールで通知させることができます。
メールの内容は以下のような感じでした。
送受信したファイルの保存期間
送受信したファイルはどちらもコンソール画面の履歴から確認できます。
保存日数はそれぞれ以下の通りでした。
- 送信したファイル:14日間
- 受信したファイル:1年間
FAX送信でエラーとなった場合、リトライできる
設定画面からリトライの設定ができます。初期設定では1回目の送信を含めて4回、リトライ間隔3分で設定されていました。
添付ファイルの最大容量は20Mbまで
添付ファイルは20Mbまでのようです。
FAX受信ができる
InterFAXから付与される番号でFAXの受信もできました。
FAXを受信すると、メールにFAXイメージが添付されて送られてきます。
また、コンソール画面の履歴から内容を確認できました。
受信FAXを自動的に他のFAX番号へ配信する機能もあるようなので、すでに契約しているFAX番号で受信したい場合も対応できそうです。
おわりに
今回はInterFAXを試してみたので試した内容を記事としてまとめました。
Pythonのリファレンスが英語だけだったり、サイトに載っているソースが動かなかったりしたのでPython利用ではストレスがあるかもしれません。
しかし、メールやコンソール画面の仕組みはシンプルで使いやすく感じました。
インターネットFAXを検討されている方、InterFAXを試してみようと思っている方の参考になればうれしく思います。