forked from Github-Mirrors/canaille
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
![]() |
from flask import current_app
|
||
|
|
||
|
|
||
|
def send_sms(recipient, sender, text):
|
||
|
try:
|
||
|
import smpplib.client
|
||
|
import smpplib.consts
|
||
|
import smpplib.gsm
|
||
|
except ImportError as exc:
|
||
|
raise RuntimeError(
|
||
|
"You are trying to send a sms but the 'sms' extra is not installed."
|
||
|
) from exc
|
||
|
|
||
|
port = current_app.config["CANAILLE"]["SMPP"]["PORT"]
|
||
|
host = current_app.config["CANAILLE"]["SMPP"]["HOST"]
|
||
|
login = current_app.config["CANAILLE"]["SMPP"]["LOGIN"]
|
||
|
password = current_app.config["CANAILLE"]["SMPP"]["PASSWORD"]
|
||
|
|
||
|
try:
|
||
|
client = smpplib.client.Client(host, port, allow_unknown_opt_params=True)
|
||
|
client.connect()
|
||
|
try:
|
||
|
client.bind_transmitter(system_id=login, password=password)
|
||
|
pdu = client.send_message(
|
||
|
source_addr_ton=smpplib.consts.SMPP_TON_INTL,
|
||
|
source_addr=sender,
|
||
|
dest_addr_ton=smpplib.consts.SMPP_TON_INTL,
|
||
|
destination_addr=recipient,
|
||
|
short_message=bytes(text, "utf-8"),
|
||
|
)
|
||
|
current_app.logger.debug(pdu.generate())
|
||
|
finally:
|
||
|
if client.state in [
|
||
|
smpplib.consts.SMPP_CLIENT_STATE_BOUND_TX
|
||
|
]: # pragma: no cover
|
||
|
# if bound to transmitter
|
||
|
try:
|
||
|
client.unbind()
|
||
|
except smpplib.exceptions.UnknownCommandError:
|
||
|
try:
|
||
|
client.unbind()
|
||
|
except smpplib.exceptions.PDUError:
|
||
|
pass
|
||
|
except Exception as exc:
|
||
|
current_app.logger.warning(f"Could not send sms: {exc}")
|
||
|
return False
|
||
|
finally:
|
||
|
if client: # pragma: no branch
|
||
|
client.disconnect()
|
||
|
|
||
|
return True
|