def METHOD_NAME(self, phone, message):
    """
    send a message to a phone via a smpp protocol to smsc
    :param phone: the phone number
    :param message: the message to submit to the phone
    :return:
    """
    if not self.smsgateway:
        # this should not happen. We now always use sms gateway definitions.
        log.warning("Missing smsgateway definition!")
        raise SMSError(-1, "Missing smsgateway definition!")
    phone = self._mangle_phone(phone, self.smsgateway.option_dict)
    log.debug("submitting message {0!r} to {1!s}".format(message, phone))
    smsc_host = self.smsgateway.option_dict.get("SMSC_HOST")
    smsc_port = self.smsgateway.option_dict.get("SMSC_PORT")
    sys_id = self.smsgateway.option_dict.get("SYSTEM_ID")
    passwd = self.smsgateway.option_dict.get("PASSWORD")
    s_addr_ton = parse_int(self.smsgateway.option_dict.get("S_ADDR_TON"))
    s_addr_npi = parse_int(self.smsgateway.option_dict.get("S_ADDR_NPI"))
    s_addr = self.smsgateway.option_dict.get("S_ADDR")
    d_addr_ton = parse_int(self.smsgateway.option_dict.get("D_ADDR_TON"))
    d_addr_npi = parse_int(self.smsgateway.option_dict.get("D_ADDR_NPI"))
    if not smsc_host:
        log.warning("Can not submit message. SMSC_HOST is missing.")
        raise SMSError(-1, "No SMSC_HOST specified in the provider config.")
    if not smsc_port:
        log.warning("Can not submit message. SMSC_PORT is missing.")
        raise SMSError(-1, "No SMSC_PORT specified in the provider config.")
    # Initialize the SMPP Client
    client = None
    error_message = None 
    try:
        msg_parts, encoding_flag, msg_type_flag = smpplib.gsm.make_parts(message)
        client = smpplib.client.Client(smsc_host,
                                       smsc_port)
        client.connect()
        r = client.bind_transmitter(system_id=sys_id,
                                    password=passwd)
        log.debug("bind_transmitter returns {0!r}".format(r.get_status_desc()))
        for part in msg_parts:
            r = client.send_message(source_addr_ton=s_addr_ton,
                                    source_addr_npi=s_addr_npi,
                                    source_addr=s_addr,
                                    dest_addr_ton=d_addr_ton,
                                    dest_addr_npi=d_addr_npi,
                                    destination_addr=phone,
                                    short_message=part,
                                    data_coding=encoding_flag,
                                    esm_class=msg_type_flag)
            log.debug("send_message returns {0!r}".format(r.get_status_desc()))
    except Exception as err:
        error_message = "{0!r}".format(err)
        log.warning("Failed to send message: {0!r}".format(error_message))
        log.debug("{0!s}".format(traceback.format_exc()))
    finally:
        if client:
            client.disconnect()
    if error_message:
        raise SMSError(error_message, "SMS could not be "
                                      "sent: {0!r}".format(error_message))
    return True