Wie man SMS von C#.Net sendet
Um SMS von C#.Net zu senden, haben Sie mehrere Möglichkeiten. Sie können die C# SMS API Bibliothek von Ozeki verwenden oder HTTP-Anfragen nutzen. Die beste Option zum Senden einer Textnachricht in C#.Net hängt von der Art des C#-Projekts ab, das Sie verwenden. Wenn Sie Code für Webanfragen schreiben, wie z.B. C# auf einer ASP-Webseite, sollten Sie HTTP-Anfragen verwenden. Wenn Sie eine Desktop-Anwendung, einen Windows-Dienst oder eine mobile Anwendung für Android oder iPhone erstellen, ist es am besten, die C# SMS API-Bibliothek zu verwenden. Diese Anleitung (Abbildung 1) konzentriert sich nur auf das Senden von SMS. Wenn Sie sowohl Senden als auch Empfangen benötigen, können Sie mit dem Lesen der Anleitung Die beste C# SMS API im Jahr 2025 beginnen.
Laden Sie die C# SMS API-Bibliothek herunter (kostenloser Quellcode)
Ein voll funktionsfähiges Beispiel der C# SMS API kann von der folgenden URL heruntergeladen werden. Dieser
Code wird kostenlos zur Verfügung gestellt und kann von Ihnen frei modifiziert und weiterverteilt werden.
Download: OzekiConsole.zip (51 Kb)
Wie sende ich SMS von einer C# Desktop-App
Das Senden einer Textnachricht von einer Desktop-App (oder einer Konsolen-App oder einem Windows-Dienst) hat andere Anforderungen als das Senden einer SMS von einer Website. Eine Desktop-App läuft für eine signifikante Zeit (viele Minuten, Tage oder sogar Wochen). In diesem Fall ist es vorteilhaft, eine permanente Verbindung zum SMS-Gateway aufrechtzuerhalten. Die Verwendung von einmaligen "Fire-and-Forget"-Webanfragen ist für diese Apps keine gute Wahl. Der größte Vorteil einer permanenten Verbindung ist, dass Sie Informationen über Nachrichtenlieferereignisse erhalten, wie z.B. Übermittlungsberichte, Zustellberichte und SMS-Zustellungsfehler.
Um SMS von einer C# Desktop-App zu senden, verwenden Sie zuerst das bereitgestellte Beispiel (wie Sie in Abbildung 2 sehen können):
- Verbinden Sie sich mit dem Ozeki SMS-Gateway, indem Sie den ozx Benutzernamen und das Passwort verwenden, die Sie in der SMS-Gateway-Benutzeroberfläche erstellt haben. Verwenden Sie den Befehl "connect hostname:port username password".
- Senden Sie Ihre Textnachricht. Dies kann durch Eingabe von "send Telefonnummer Nachrichtentext" erfolgen, wenn Sie die Beispiel-Konsolenanwendung zum Senden verwenden.
- Warten Sie auf SMS-Übermittlungsberichte und SMS-Zustellberichte. Sie werden feststellen, dass diese Berichte auf dem Bildschirm ausgegeben werden und dieselbe Nachrichten-ID enthalten, die beim Senden der SMS zurückgegeben wurde.
Beispiel-Konsolenanwendung in C#.Net. Der Quellcode dieser Konsolenanwendung ist auf der Seite C# SMS API mit Quellcode verfügbar.
Das obige Beispiel zeigt Ihnen die erforderlichen Schritte. Sie können sehen, dass zunächst eine permanente Verbindung zum SMS-Gateway hergestellt wird und danach die Nachricht gesendet wird. Schließlich sehen Sie den Nachrichtenannahmebericht und die Nachrichtenübermittlungsberichte.
Um SMS von C# zu senden, verwenden Sie den folgenden Quellcode:
- 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="Dies ist der Text, der von C# gesendet werden soll"});
Wenn Sie die Eigenschaft Client.Autoconnect auf true setzen, wird sichergestellt, dass der Client sich auch dann wieder mit dem SMS-Gateway verbindet, wenn die Netzwerkverbindung vorübergehend unterbrochen wird oder das SMS-Gateway neu gestartet wird.
Um SMS-Zustellberichte in C# zu empfangen, müssen Sie sich für die Ereignisse anmelden:
- Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
- Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
- Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
- Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
- Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
- Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;
Diese Ereignisse werden ausgelöst, wenn das SMS-Gateway die entsprechenden Berichte über die permanente Verbindung sendet, die wir mit connect erstellt haben. Dies ist der größte Vorteil der Verwendung einer permanenten Verbindung. Sie erhalten sofortige Benachrichtigungen über diese SMS-Zustellungsbezogenen Ereignisse. Solche Benachrichtigungen sind schwer zu erhalten, wenn Sie eine HTTP SMS API verwenden. Andererseits sind diese Informationen für jedes Unternehmen entscheidend, und Sie müssen sie verarbeiten, um eine gute SMS-Software zu erstellen.
Welche Arten von SMS-Zustellberichten bietet die C# SMS API?Die C# SMS API liefert fünf Arten von SMS-Zustellberichten. Diese werden als C#-Ereignisse dargestellt. Es handelt sich um das SMS-Akzeptanz-Ereignis, das SMS-Nicht-Akzeptanz-Ereignis, das SMS-Übermittlungs-Erfolgs-Ereignis, das SMS-Übermittlungs-Fehlschlags-Ereignis, das SMS-Zustellungs- Erfolgs-Ereignis und das SMS-Zustellungs-Fehlschlags-Ereignis.
SMS-Akzeptanz-Ereignis: Das SMS-Akzeptanz-Ereignis wird ausgelöst, wenn die Ozeki SMS-Gateway die SMS zur Zustellung akzeptiert und in den Postausgang des Benutzerkontos legt.
SMS-Nicht-Akzeptanz-Ereignis: Das SMS-Nicht-Akzeptanz-Ereignis wird ausgelöst, wenn die Ozeki SMS-Gateway die SMS nicht zur Zustellung akzeptiert. Dies kann beispielsweise passieren, wenn der Benutzer keine SMS-Guthaben mehr hat, die Festplatte voll ist oder ein anderer Fehler in der SMS-Gateway auftritt.
SMS-Übermittlungs-Erfolgs-Ereignis: Das SMS-Übermittlungs-Erfolgs-Ereignis wird ausgelöst, wenn die SMS erfolgreich an das Mobilfunknetz übermittelt wurde. Das Mobilfunknetz sendet einen SMS-Übermittlungsbericht, und dieser Bericht wird über die bestehende Verbindung an den C# SMS API-Client weitergeleitet. Das SMS-Übermittlungs-Erfolgs-Ereignis wird beispielsweise ausgelöst, wenn die SMS durch den SMPP-Client übermittelt wird, der das System über das Internet mit dem Mobilfunknetz verbindet. Wenn Sie SMS-Nachrichten über ein Android-SMS-Gateway senden, tritt dieses Ereignis auf, wenn die SMS durch das in das Android-Handy eingebaute SMS-Modem übermittelt wird. Wenn Sie SMS über ein Standard- GSM-Modem-Pool senden, der mit Ihrem Server über ein Datenkabel verbunden ist, wird das Ereignis ausgelöst, wenn das Modem den 1-Byte-Übermittlungs-Erfolgs- Referenzcode auf den AT+CMGS-Modem-Befehl zurückgibt.
SMS-Übermittlungs-Fehlschlags-Ereignis: Das SMS-Übermittlungs-Fehlschlags-Ereignis tritt auf, wenn die SMS aus irgendeinem Grund nicht an das Mobilfunknetz übermittelt werden konnte. Zum Beispiel, wenn die Internetverbindung des SMPP-Client-Mobilfunknetzverbindung offline ist oder wenn der SMPP-Server eine SMPP-Fehlermeldung zurückgibt, wenn die SMS gesendet wird. Wenn Sie Ihre SMS-Nachrichten über das Android-SMS-Gateway senden und das Guthaben des Android-Handys aufgebraucht ist oder das Handy nicht im Mobilfunknetz registriert ist, erhalten Sie ebenfalls dieses Ereignis. Es könnte auch sein, dass die SMS-Routing-Tabelle nicht korrekt konfiguriert ist. Ein SMS-Übermittlungsfehler kann auch auftreten, wenn Sie ein GSM-Modem für die SMS-Zustellung verwenden und das Datenkabel zwischen dem Modem und dem PC getrennt oder defekt ist. In all diesen Fällen erhalten Sie eine Fehlermeldung in den Ereignisargumenten, die diesem Ereignis beigefügt sind, um Ihnen eine Idee zu geben, was der Grund für den SMS-Übermittlungsfehler sein könnte.
SMS-Zustellungs-Erfolgs-Ereignis: Das SMS-Zustellungs-Erfolgs-Ereignis wird aufgerufen, wenn die SMS erfolgreich an das Empfänger-Handy zugestellt wurde. In diesem Fall wird ein SMS-Zustellbericht vom Mobilfunknetz an die SMS-Gateway zurückgesendet. Der SMS-Zustellbericht enthält den Zeitstempel der Zustellung und den erfolgreichen Statuscode der Zustellung. Die SMS-Gateway leitet diese Informationen an die C# SMS API weiter. Wenn Sie ein SMS-Zustellberichts-Ereignis in C# erhalten, können Sie sicher sein, dass Ihre SMS vom Empfänger empfangen wurde.
SMS-Zustellungs-Fehlschlags-Ereignis: Der SMS-Zustellbericht in C# kann mit dem SMS-Zustellungs-Fehlschlags-Ereignis behandelt werden, wenn der Zustellbericht einen erfolglosen Zustellstatuscode enthält. Dies kann beispielsweise passieren, wenn das Mobiltelefon, an das die SMS gesendet wurde, nie eingeschaltet wird. Dieses Ereignis tritt selten auf, da die meisten Mobilfunknetze keine negativen Zustellberichte zurücksenden.
Um SMS von C# aus zu senden, verwenden Sie den folgenden Quellcode. Dieser Quellcode kann frei modifiziert und weiterverteilt werden. Beachten Sie, dass Sie auch den Quellcode der C# SMS API-Bibliothek im Ozeki.Libs.Ozx-Projekt frei modifizieren und weiterverteilen können.
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("Erfolgreich verbunden."); var msg = new OzxMessage(); msg.ToAddress = recipient; msg.Text = message; Console.WriteLine("Nachricht wird gesendet. ID: "+msg.ID); Client.Send(msg); } static void Client_OnDisconnected(object sender, OzxArgs< string > e) { Console.WriteLine("Verbindung geschlossen. Grund: " + e.Item.ToString()); } static void Client_OnMessageAcceptedForDelivery(object sender, OzxArgs< string > e) { Console.WriteLine("Nachricht zur Zustellung angenommen. ID: " + e.Item.ToString()); } static void Client_OnMessageNotAcceptedForDelivery(object sender, OzxArgs< string, string > e) { Console.WriteLine("Nachricht abgelehnt. ID: " + e.Item1.ToString()+" Grund: "+e.Item2); } static void Client_OnMessageSubmitSuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Nachricht übermittelt. ID: "+e.Item1+" Datum: "+e.Item2); } static void Client_OnMessageSubmitFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Nachrichtenübermittlung fehlgeschlagen. ID: " + e.Item1 + " Datum: " + e.Item2+" Grund: "+e.Item3); } static void Client_OnMessageDeliverySuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Nachricht zugestellt. ID: " + e.Item1 + " Datum: " + e.Item2); } static void Client_OnMessageDeliveryFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Nachrichtenzustellung fehlgeschlagen. ID: " + e.Item1 + " Datum: " + e.Item2 + " Grund: " + e.Item3); } static void Client_OnMessageViewed(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Nachricht gelesen. ID: " + e.Item1 + " Datum: " + e.Item2); } } }
Wie man das SMS-Versenden mit C# testet
Um das SMS-Versenden in der C# SMS API zu testen, haben Sie zwei Möglichkeiten: Sie können die integrierte SMS-Tester-Verbindung verwenden oder Sie können zwei SMS-Gateways einrichten, um eine realistischere Testumgebung zu haben. Wenn Sie zwei SMS-Gateways einrichten, müssen Sie zunächst das erste SMS-Gateway als SMPP-Simulator konfigurieren. Dieses SMS-Gateway wird dem zweiten SMS-Gateway einen SMPP-Serverdienst bereitstellen. Es wird genauso funktionieren wie der SMSC eines Mobilfunknetzbetreibers. Das zweite SMS-Gateway wird sich über eine SMPP-Client-Verbindung mit dem ersten verbinden und Ihrer C# SMS-Anwendung einen C# SMS API-Dienst bereitstellen.
FAQs
Wird der Zustellbericht (onMessageDeliveryFailed) bei jedem fehlgeschlagenen Versuch abgerufen oder nur, wenn die maximale Anzahl von Versuchen erreicht ist?
Die Nachricht bleibt in einem ausstehenden Zustand, bis die maximale Anzahl von Zustellversuchen erschöpft ist.
Ist es möglich, eingehende SMS-Zustellberichte in SQL zu speichern?
Um Zustellberichte für Ihre SMS-Nachrichten zu erhalten, navigieren Sie zum Menü "Bearbeiten" und wählen Sie "Server-Einstellungen". Innerhalb des "Erweitert"-Tabs finden Sie das Kontrollkästchen mit der Bezeichnung "Zustellberichte für Benutzer kopieren" und stellen Sie sicher, dass es aktiviert ist. Wenn Sie ein SQL-zu-SMS-Gateway konfiguriert haben, werden eingehende Zustellberichte automatisch in der Datenbank als standardmäßige eingehende Nachrichten gespeichert. Hier ist wie Zustellstatusaktualisierungen widergespiegelt werden:
- ozekimessageout-Tabelle und Statusaktualisierungen: Vorausgesetzt, Sie senden Nachrichten aus der "ozekimessageout"-Tabelle, verfolgt das Feld "status" automatisch den Zustellstatus jeder Nachricht. Dieses Feld aktualisiert sich dynamisch um die folgenden Ergebnisse widerzuspiegeln:
- deliveredtonetwork: Nachricht erfolgreich an das Netzwerk übermittelt.
- deliveredtohandset: Nachricht an das Empfängerhandy zugestellt.
- deliveryerror: Ein Fehler ist während der Zustellung aufgetreten.
More information
- Wie man SMS aus C# sendet
- SMS in C# empfangen
- C# SMS API - Verbindung zum SMS-Versand herstellen
- C# SMS API - Von SMS-Gateway trennen
- C# SMS API - SMS-Verbindung aufrechterhalten
- C# SMS API - Textnachricht senden
- C# SMS API - SMS zur Zustellung akzeptiert
- C# SMS API - SMS nicht zur Zustellung akzeptiert
- C# SMS API - Übermittelt
- C# SMS API - Übermittlung fehlgeschlagen
- C# SMS API - Zustellungsbericht erfolgreich
- C# SMS API - Zustellungsfehlerbericht
- C# SMS API - Alphanumerische Absenderkennung
- C# SMS API - Verwendung einer Kurzwahl als Absenderkennung
- C# SMS API - Textnachrichtenklasse