LinuxからSMSメッセージを送信 (SIMカード使用)

LinuxからSMSメッセージを送信 (SIMカード使用)

SMSを送信するための有料APIサービスは存在しますが、今回は自分で用意した携帯電話用SIMカードを使用してLinuxでSMSを送信する方法を紹介します。

GSM Modem USBドングルの用意

まずは、USBタイプの3G Modemを用意します。各携帯キャリアは使用している周波数(Mhz)が違うので、互換性のある3Gモデムを使用する必要があります。今回の例は、アンロックしたHUAWEI E3131を使用しています。

環境構築

今回使用したOSはDebian 9.5です。SMSメッセージを送信するコマンド gsmsendsmsが使用できるように、gsm-utilsをインストールします。パッケージの名前はgsmですが、モデムにATコマンドを送信しているだけなのでCDMAでもPDCでもモデムが周波数に対応していれば問題無いでしょう。

user@computer:$ apt-get install gsm-utils usb-modeswitch usb-modeswitch-data

gsmsendsmsが存在する事を確認

user@computer:$ which gsmsendsms
/usr/bin/gsmsendsms

Huawei E3131 USBドングルが認識されていることを確認。

user@computer:$ root@puppet-client:~# lsusb
Bus 001 Device 003: ID 12d1:140c Huawei Technologies Co., Ltd. E3131
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

/dev/ttyUSB0で認識されている

user@computer:$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Feb 15 09:13 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 Feb 15 09:13 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 Feb 15 09:13 /dev/ttyUSB2

SMS送信してみよう

gsmsendsmsコマンドで以下のようにSMS送信できます。エラーが無い限りコマンドの戻り値はありません。

user@computer:$ gsmsendsms -d /dev/ttyUSB0 -b 19200 09012345678 "This is test message from Linux."

WEBからSMS送信できるようにしよう

応用編ですが、上記のコマンドをPHPで呼び出して、WEBからSMS送信できるようにしてみます。
sudo設定をしておきましょう。 www-dataユーザーがパスワード無でgsmsendsmsコマンドを使用できるようにします。

user@computer:$ visudo
www-data ALL=(ALL:ALL) NOPASSWD: /usr/bin/gsmsendsms, /bin/echo

gsmgw.phpを以下のように作成し、WEBでアクセス出来るディレクトリに配置します。

ブラウザーでアクセスして、SMSが送信できるか確認します。
http://Server_IP/XX/gsmgw.php?msg=This is Test from WEB.&phone=09012345678
これは、試験ですので、シンプルなコードですが、実際の運用にはセキュリティ対策をして十分注意しましょう。