Comment envoyer un SMS depuis C#.Net

Pour envoyer un SMS depuis C#.Net, vous avez plusieurs options. Vous pouvez utiliser la bibliothèque API SMS C# d'Ozeki, ou vous pouvez utiliser des requêtes HTTP. Pour envoyer un message texte en C#.Net, la meilleure option dépend du type de projet C# que vous utilisez. Si vous écrivez du code pour servir des requêtes web, comme du C# sur une page ASP, vous devriez opter pour les requêtes HTTP. Si vous créez une application desktop, un service Windows ou une application mobile pour Android ou iPhone, il est préférable d'utiliser la bibliothèque API SMS C#. Ce guide (Figure 1) se concentre uniquement sur l'envoi de SMS. Si vous avez besoin à la fois d'envoyer et de recevoir, vous pouvez commencer par lire le guide La meilleure API SMS C# en 2025 en premier.

Comment envoyer un SMS depuis C#.Net
Figure 1 - Comment envoyer un SMS depuis C#.Net

Télécharger la bibliothèque API SMS C# (code source gratuit)

Un exemple fonctionnel complet de l'API SMS C# peut être téléchargé à partir de l'URL suivante. Ce code est fourni gratuitement et peut être librement modifié et redistribué par vous.

Téléchargement : OzekiConsole.zip (51 Kb)

Comment envoyer un SMS depuis une application desktop C#

Envoyer un message texte depuis une application desktop (ou une application console ou un service Windows) a des exigences différentes de l'envoi d'un SMS depuis un site web. Une application desktop s'exécute pendant une durée significative (plusieurs minutes, jours ou même semaines). Dans ce cas, il est avantageux de maintenir une connexion permanente à la passerelle SMS. Utiliser des requêtes web ponctuelles "fire and forget" n'est pas un bon choix pour ces applications. Le plus grand avantage de maintenir une connexion permanente est que vous obtenez des informations sur les événements de livraison des messages, tels que les rapports de soumission, les rapports de livraison et les échecs de livraison des SMS.

Pour envoyer un SMS depuis une application desktop C#, utilisez d'abord l'exemple fourni (comme vous pouvez le voir sur la Figure 2) :

  1. Connectez-vous à la passerelle SMS Ozeki en utilisant le nom d'utilisateur et le mot de passe ozx que vous avez créés dans l'interface utilisateur de la passerelle SMS. Pour vous connecter, utilisez la commande "connect hostname:port username password".
  2. Envoyez votre message texte. Cela peut être fait en tapant "send numéro_de_téléphone texte_du_message" si vous utilisez l'application console exemple pour l'envoi.
  3. Attendez les rapports de soumission et de livraison des SMS. Vous remarquerez peut-être que ces rapports sont affichés à l'écran et qu'ils contiennent le même ID de message qui a été retourné lorsque vous avez envoyé le SMS.

Exemple d'application console écrite en C#.Net. Le code source de cette application console est disponible sur la page API SMS C# avec code source.

exemples d'api sms csharp
Figure 2 - Comment envoyer un SMS depuis l'API SMS C#

L'exemple ci-dessus vous montre les étapes nécessaires. Vous pouvez voir que d'abord une connexion permanente est établie avec la passerelle SMS, et après cela, le message est envoyé. Enfin, vous voyez le rapport d'acceptation du message et les rapports de soumission des messages.

Pour envoyer un SMS depuis C#, utilisez le code source suivant :

  • Client = new OzxClient();
  • Client.AutoReconnect = true;
  • Client.Connect("127.0.0.1", 9518, "testuser", "testpassword");
  • Client.Connect("127.0.0.1", 9518, "testuser", "testpassword");
  • Client.Send(new OzxMessage() {ToAddress="+36111111",Text="Ceci est le texte à envoyer depuis C#"});

Lorsque vous définissez la propriété Client.Autoconnect sur true, cela garantit que le client se reconnectera à la passerelle SMS même si la connexion réseau est temporairement perdue ou si la passerelle SMS est redémarrée.

Pour recevoir des rapports de livraison de SMS en C#, vous devez vous abonner aux événements :

  • Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
  • Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
  • Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
  • Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
  • Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
  • Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;

Ces événements seront déclenchés lorsque la passerelle SMS enverra les rapports appropriés via la connexion permanente que nous avons créée en utilisant connect. C'est le plus grand avantage d'utiliser une connexion permanente. Vous obtenez des notifications instantanées sur ces événements liés à la livraison des SMS. De telles notifications sont difficiles à obtenir si vous utilisez une API SMS HTTP. D'un autre côté, ces informations sont cruciales pour toute entreprise, et vous devez les traiter pour construire un bon logiciel SMS.

Quels types de rapports de livraison SMS sont fournis par l'API SMS C# ?

L'API SMS C# renvoie cinq types de rapports de livraison SMS. Ceux-ci sont présentés sous forme d'événements C#. Il s'agit de l'événement SMS accepté, l'événement SMS non accepté, l'événement soumission SMS réussie, l'événement soumission SMS échouée, l'événement livraison SMS réussie, et l'événement livraison SMS échouée.

Événement SMS accepté : L'événement SMS accepté est déclenché lorsque la passerelle SMS Ozeki accepte le SMS pour livraison et le place dans la boîte d'envoi du compte utilisateur.

Événement SMS non accepté : L'événement SMS non accepté est déclenché si la passerelle SMS Ozeki n'accepte pas le SMS pour livraison. Cela peut arriver par exemple si l'utilisateur n'a plus de crédits SMS, ou si le disque est plein ou si une autre erreur survient dans la passerelle SMS.

Événement soumission SMS réussie : L'événement soumission SMS réussie est déclenché lorsque le SMS est livré avec succès au réseau mobile. Le réseau mobile renvoie un rapport de soumission SMS, et ce rapport est transmis au client de l'API SMS C# via la connexion établie. L'événement soumission SMS réussie est déclenché par exemple lorsque le SMS est soumis par le client SMPP qui connecte le système au réseau mobile via Internet. Si vous envoyez des SMS via une passerelle SMS Android, cet événement se produit lorsque le SMS est soumis par le modem SMS intégré au téléphone Android. Si vous envoyez des SMS via un pool de modems GSM connecté à votre serveur avec un câble de données, l'événement est déclenché lorsque le modem renvoie le code de référence de soumission réussie (1 octet) à la commande modem AT+CMGS.

Événement soumission SMS échouée : L'événement soumission SMS échouée se produit si le SMS n'a pas pu être soumis pour une raison quelconque au réseau mobile par la passerelle SMS Ozeki. Par exemple, si la liaison Internet utilisée par la connexion réseau mobile du client SMPP est hors ligne ou si le serveur SMPP renvoie un message d'erreur SMPP lors de l'envoi du SMS. Si vous envoyez vos SMS via la passerelle SMS Android, et que le forfait du téléphone mobile Android est à court de crédits, ou que le téléphone n'est pas enregistré sur le réseau mobile, vous recevez également cet événement. Il est également possible que la table de routage SMS ne soit pas configurée correctement. Une erreur de soumission SMS peut également survenir si vous utilisez un modem GSM pour la livraison SMS et que le câble de données entre le modem et le PC est déconnecté ou endommagé. Dans tous ces cas, vous aurez un message d'erreur dans les Event Args attachés à cet événement pour vous donner une idée de la raison de l'échec de la soumission du SMS.

Événement livraison SMS réussie : L'événement livraison SMS réussie est appelé lorsque le SMS est livré avec succès au téléphone du destinataire. Dans ce cas, un rapport de livraison SMS est renvoyé par le réseau mobile à la passerelle SMS. Le rapport de livraison SMS contient le timestamp de la livraison et le code de statut de livraison réussie. La passerelle SMS transmet ces informations à l'API SMS C#. Lorsque vous recevez un événement de rapport de livraison SMS en C#, vous pouvez être sûr que votre SMS a été reçu par le destinataire.

Événement livraison SMS échouée : Le rapport de livraison SMS en C# peut être géré avec l'événement livraison SMS échouée si le rapport de livraison contient un code de statut de livraison non réussie. Cela peut arriver par exemple si le téléphone mobile auquel le SMS a été envoyé n'est jamais allumé. Cet événement est rare, car la plupart des réseaux mobiles ne renvoient pas de rapports de livraison négatifs.

Envoyer des SMS depuis l'API SMS C# (code source gratuit à utiliser)

Pour envoyer des SMS depuis C#, utilisez le code source suivant. Ce code source peut être librement modifié et redistribué. Notez que vous pouvez également modifier et redistribuer librement le code source de la bibliothèque API SMS C# dans le projet Ozeki.Libs.Ozx.

using System;
using OZX;

namespace OzekiConsoleClient
{
    class Program
    {
        static OzxClient Client;

        static void Main(string[] args)
        {
         	Client = new OzxClient();
            Client.AutoReconnect = true;

            Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
            Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
            Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
            Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
            Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
            Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;
            Client.OnMessageViewed += Client_OnMessageViewed;
            Client.OnConnected += Client_OnConnected;
            Client.OnDisconnected += Client_OnDisconnected;
        
            Client.Connect("127.0.0.1",9580,"testuser","testpass");
        }

        static void Client_OnConnected(object sender, EventArgs e)
        {
            Console.WriteLine("Connexion réussie.");
            
            var msg = new OzxMessage();
            msg.ToAddress = recipient;
            msg.Text = message;

            Console.WriteLine("Envoi du message. ID: "+msg.ID);
            Client.Send(msg);
        }

        static void Client_OnDisconnected(object sender, OzxArgs< string > e)
        {
            Console.WriteLine("Connexion fermée. Raison: " + e.Item.ToString());
        }

        static void Client_OnMessageAcceptedForDelivery(object sender, OzxArgs< string > e)
        {
            Console.WriteLine("Message accepté pour livraison. ID: " + e.Item.ToString());
        }

        static void Client_OnMessageNotAcceptedForDelivery(object sender, OzxArgs< string, string > e)
        {
            Console.WriteLine("Message rejeté. ID: " + e.Item1.ToString()+" Raison: "+e.Item2);
        }

        static void Client_OnMessageSubmitSuccess(object sender, OzxArgs< string, DateTime > e)
        {
            Console.WriteLine("Message soumis. ID: "+e.Item1+" Date: "+e.Item2);
        }

        static void Client_OnMessageSubmitFailed(object sender, OzxArgs< string, DateTime, string > e)
        {
            Console.WriteLine("Échec de la soumission du message. ID: " + e.Item1 + " Date: " + e.Item2+" Raison: "+e.Item3);
        }

        static void Client_OnMessageDeliverySuccess(object sender, OzxArgs< string, DateTime > e)
        {
            Console.WriteLine("Message livré. ID: " + e.Item1 + " Date: " + e.Item2);
        }

        static void Client_OnMessageDeliveryFailed(object sender, OzxArgs< string, DateTime, string > e)
        {
            Console.WriteLine("Échec de la livraison du message. ID: " + e.Item1 + " Date: " + e.Item2 + " Raison: " + e.Item3);
        }

        static void Client_OnMessageViewed(object sender, OzxArgs< string, DateTime > e)
        {
            Console.WriteLine("Message consulté. ID: " + e.Item1 + " Date: " + e.Item2);
        }
    }
}

Comment tester l'envoi de SMS avec C#

Pour tester l'envoi de SMS dans l'API SMS C#, vous avez deux options : Vous pouvez utiliser la connexion de test SMS intégrée ou configurer deux passerelles SMS pour un environnement de test plus réaliste. Si vous configurez deux passerelles SMS, vous devez d'abord configurer la première passerelle SMS comme un simulateur SMPP. Cette passerelle SMS fournira un service de serveur SMPP à la seconde passerelle SMS. Elle fonctionnera de la même manière qu'un SMSC d'un opérateur mobile. La seconde passerelle SMS se connectera à la première en utilisant une connexion client SMPP, et elle fournira un service d'API SMS C# à votre application SMS C#.

FAQ

Le rapport de livraison (onMessageDeliveryFailed) est-il récupéré pour chaque tentative échouée ou uniquement lorsque le nombre maximum de tentatives est atteint ?

Le message reste dans un état en attente jusqu'à ce que le nombre maximum de tentatives de livraison soit épuisé.

Est-il possible de stocker les rapports de livraison des SMS entrants dans SQL ?

Pour recevoir des rapports de livraison pour vos messages SMS, accédez au menu "Modifier" et sélectionnez "Préférences du serveur". Dans l'onglet "Avancé", localisez la case à cocher intitulée "Copier les rapports de livraison pour les utilisateurs" et assurez-vous qu'elle est cochée. Si vous avez configuré une passerelle SQL vers SMS, les rapports de livraison entrants seront automatiquement stockés dans la base de données comme des messages entrants standard. Voici comment les mises à jour de statut de livraison sont reflétées :

  • Table ozekimessageout et mises à jour de statut : Si vous envoyez des messages depuis la table "ozekimessageout", le champ "status" suit automatiquement l'état de livraison de chaque message. Ce champ se met à jour dynamiquement pour refléter les résultats suivants :
  • deliveredtonetwork : Message soumis avec succès au réseau.
  • deliveredtohandset : Message livré au téléphone du destinataire.
  • deliveryerror : Une erreur est survenue lors de la livraison.
Cette fonctionnalité offre un moyen pratique de surveiller l'état de livraison dans la base de données elle-même.

More information