import json import logging import random import sys import smpplib.consts import smpplib.gsm import ssl with open("config.json", "r") as config_file: data = json.load(config_file) smppserverhostname = data["SMPPServer"]["Hostname"] smppserverport = data["SMPPServer"]["Port"] smppserverusername = data["SMPPServer"]["Username"] smppserverpassword = data["SMPPServer"]["Password"] usessl = data["SMPPServer"]["SSL"] smssendsource = data["SMSSend"]["Source"] smssenddest = data["SMSSend"]["Destination"] smssendcont = data["SMSSend"]["Content"] numberofmsgtosend = data["SMSSend"]["Count"] validityperiod = data["SMSSend"]["ValidityPeriod"] othersettingsloglevel = data["OtherSettings"]["LogLevel"] logging.basicConfig(level=othersettingsloglevel) if usessl == "1": ssl_context = ssl.create_default_context() ssl_context.check_hostname = False ssl_context.verify_mode = ssl.CERT_NONE ssl_context.options = ssl.OP_NO_SSLv2 client = smpplib.client.Client(smppserverhostname, smppserverport, allow_unknown_opt_params=True, ssl_context=ssl_context) else: client = smpplib.client.Client(smppserverhostname, smppserverport, allow_unknown_opt_params=True) client.set_message_sent_handler( lambda pdu: sys.stdout.write('Sent msg with sequence ID {}, got ID back {}\n'.format(pdu.sequence, pdu.message_id))) client.set_message_received_handler( lambda pdu: sys.stdout.write('Delivered msg with ID {}, and state {}\n'.format(pdu.receipted_message_id, pdu.message_state))) try: print("Connecting to SMPP Server", smppserverhostname, "on port", smppserverport) client.connect() client.bind_transceiver(system_id=smppserverusername, password=smppserverpassword) print("Connected to SMPP Server", smppserverhostname, "on port", smppserverport) print("Sending", numberofmsgtosend, "messages towards server", smppserverhostname) except: print("Error connecting to SMPP Server", smppserverhostname, "on port", smppserverport, "Will exit with return code 1.") client.disconnect() exit(1) for i in range(numberofmsgtosend): parts, encoding_flag, msg_type_flag = smpplib.gsm.make_parts(smssendcont + str(random.randint(1, 10000))) for part in parts: pdu = client.send_message( # source_addr_ton=smpplib.consts.SMPP_TON_INTL, source_addr_ton=smpplib.consts.SMPP_TON_ALNUM, # source_addr_npi=smpplib.consts.SMPP_NPI_ISDN, # Make sure it is a byte string, not unicode: source_addr=smssendsource, dest_addr_ton=smpplib.consts.SMPP_TON_INTL, # dest_addr_npi=smpplib.consts.SMPP_NPI_ISDN, # Make sure these two params are byte strings, not unicode: destination_addr=smssenddest, short_message=part, data_coding=encoding_flag, esm_class=msg_type_flag, # validity_period=validityperiod, registered_delivery=True, ) # Enters a loop, waiting for incoming PDUs print('Starting thread to listen for incoming delivery reports. Ctrl+C to exit.') while True: try: client.listen() except KeyboardInterrupt: break