Skip to content

SMPP Client and Server Tools for Testing

Open-source SMPP client libraries, servers and simulators for testing, and a step-by-step method to test an SMPP connection.

Updated 20 October 2026

To test an SMPP connection you need an SMPP client (to bind to a provider and submit messages) and, for development, an SMPP server or simulator (to accept binds without sending real SMS). Well-known open-source options include Jasmin and Kannel as full gateways, and libraries such as jSMPP, Cloudhopper SMPP, python-smpplib, node-smpp and gosmpp for scripts and custom tools.

What is an SMPP client?

An SMPP client (the ESME in SMPP terms) opens a TCP connection to an SMPP server, binds with a system ID and password, submits messages with submit_sm and receives delivery receipts as deliver_sm. Your SMS platform is a client toward each upstream route. A test client is the same thing in a small, controllable form: you use it to check credentials, bind types, TPS limits, encoding and receipts before connecting production traffic. Background: what is SMPP.

What is an SMPP server simulator?

An SMPP server simulator accepts binds like an SMSC, acknowledges submitted messages and can return fake delivery receipts, but delivers nothing to real phones. It lets developers test their client, retry logic and DLR handling without spending money or touching live networks. Never confuse simulator receipts with real ones: only the live route can show real delivery. See fake DLR for why that matters in production.

Open-source SMPP tools

These projects are verified to exist and are actively used (check each project's licence and maintenance status before relying on it):

ToolLanguageClientServerGood for
JasminPythonYesYesFull open-source SMS gateway with SMPP and HTTP, routing and a Docker image. Useful as a local SMPP server for tests.
KannelCYesVia add-onLong-standing open-source SMS and WAP gateway that connects to SMSCs over SMPP and other protocols.
jSMPPJavaYesYesLibrary supporting SMPP 3.3, 3.4 and 5.0; also used by the Apache Camel SMPP component.
Cloudhopper SMPPJavaYesYesLibrary for clients and servers; the main repository has not been updated for several years.
python-smpplibPythonYesNoQuick test scripts: bind, submit, read receipts.
node-smppNode.jsYesYesSmall test servers and clients in JavaScript.
gosmppGoYesNoSMPP 3.4 client library for Go services.

For capturing traffic, Wireshark decodes SMPP PDUs, which helps when you need to see exactly what was sent in a bind or submit_sm. Commercial desktop clients and hosted SMSC simulators also exist; evaluate them the same way.

How do I test an SMPP connection?

Test in this order: network, bind, submit, receipt, throughput. Most failed setups stop at the first two steps because of IP whitelisting, wrong port or a wrong bind type.

  1. Network. Confirm your IP is whitelisted and the host and port are reachable (a plain TCP connection test is enough).
  2. Bind. Bind with the system ID, password, system type (often empty) and the bind type the provider gave you (TX, RX or TRX). A bind failure returns an error such as invalid password or invalid system ID.
  3. Submit. Send one message to your own handset with the agreed sender ID, TON/NPI and data_coding, with registered_delivery set to request a receipt.
  4. Receipt. Check that the delivery receipt arrives with the same message ID and a final status. Compare with the phone.
  5. Keep-alive. Leave the bind idle and confirm enquire_link keeps it up.
  6. Throughput. Send at your contracted TPS and watch for throttling errors.

Error meanings are in SMPP error codes; bind and TPS limits in SMPP binds and TPS.

Free SMPP server for testing: what are the options?

The simplest free option is to run an open-source gateway such as Jasmin locally (it ships as a Docker image) and point your client at it, or to write a tiny server with node-smpp or jSMPP that accepts binds and returns receipts. This covers protocol testing. For delivery testing, there is no substitute for a real route and real handsets on each operator: see how to test an SMS route.

Choosing between SMPP and HTTP for your integration

If your volume is small, an HTTP API may be easier than maintaining SMPP binds. If you resell or send high volume, SMPP is the norm. Compare in SMPP vs HTTP SMS and what is an SMS gateway.

Getting a live SMPP route

Once your client works against a simulator, you need a real upstream. VoIPMatcher sources A2P SMS routes over SMPP from its carriers and manages them. Request an SMPP route for testing and production.

Frequently asked questions

Is there an online SMPP client I can use?

Some vendors offer web-based SMPP test clients and hosted SMSC simulators. Be careful entering production credentials into third-party sites, since anyone holding them can send traffic billed to you. For real binds, a local client built with an open-source library, or your own gateway, keeps credentials under your control.

Can I run an SMPP server in Docker?

Yes. Jasmin, an open-source SMS gateway with an SMPP server, publishes a Docker image, and small test servers built with libraries such as node-smpp or jSMPP are easy to containerise. This is useful for development and automated tests, but such a server does not deliver to real phones unless connected to live routes.

Why does my SMPP bind fail?

Common causes are an IP address not whitelisted by the provider, the wrong host or port, an incorrect system ID or password, the wrong bind type, or too many binds already open on the account. The bind response error code points to the cause. Check network reachability first, then credentials and bind limits.

What is enquire_link in SMPP?

Enquire_link is the keep-alive PDU of SMPP. Either side sends it periodically, often every 30 to 60 seconds, and the other side must reply. It keeps idle connections open through firewalls and lets each side detect a dead link quickly so it can reconnect instead of losing messages.

How do I test SMPP throughput?

After a successful bind and single-message test, send a controlled burst at your contracted messages per second to a test range agreed with the provider, and watch for throttling errors and growing response times. Increase gradually. Test across all your binds together, since limits may apply per account as well as per bind.

Need a route?

Send the destination, route type and target rate. We reply with what we can deliver.

More guides

All guides
A2P SMS Direct SMS Routes: What They Are and How to Verify What a direct SMS route is, why it delivers better than indirect or grey routes, when OTP traffic needs one and how to verify a supplier's direct claim. A2P SMS MCC MNC List: Mobile Country and Network Codes What MCC and MNC codes are, examples from the MCC MNC list, how they identify mobile networks and how SMS providers use them for pricing and routing. A2P SMS Phone Number Validation API: HLR, MNP and Line Type What a phone number validation API returns: format checks, line type, MNP and HLR lookups, how they differ and how to choose a provider. A2P SMS What Is SMPP? The SMPP Protocol Explained What the SMPP protocol is, how SMPP binds and PDUs work, what an SMPP server is, and when to use SMPP instead of an HTTP SMS API. A2P SMS RCS vs SMS for Business Messaging RCS vs SMS for business: features, reach on Android and iPhone as of 2026, pricing models, MMS comparison and when to keep SMS as fallback. A2P SMS SMS Delivery Rate: Benchmarks, Latency and Monitoring How to calculate SMS delivery rate and latency, what a normal SMS delivery rate looks like, common causes of poor results and how to monitor routes. A2P SMS Flash Call Verification: How It Works vs SMS How flash call verification works, how it compares with SMS OTP, and the operator, fraud and platform risks to weigh before using it. A2P SMS HLR Lookup: What It Is and How It Works What an HLR lookup returns, how it differs from MNP lookup, whether it shows location, and how SMS senders use it for routing, list cleaning and fraud.