Jak wysłać SMS z C#.Net
Aby wysłać SMS z C#.Net masz kilka opcji. Możesz użyć biblioteki C# SMS API Ozeki lub możesz użyć żądań HTTP. Aby wysłać wiadomość tekstową w C#.Net najlepsza opcja zależy od typu projektu C#, którego używasz. Jeśli piszesz kod do obsługi żądań internetowych, takich jak C# na stronie ASP, powinieneś wybrać żądania HTTP. Jeśli tworzysz aplikację desktopową, usługę systemu Windows lub mobilną aplikację na Androida lub iPhone'a, najlepiej użyć biblioteki C# SMS API. Ten przewodnik (Rysunek 1) koncentruje się tylko na wysyłaniu SMS-ów. Jeśli potrzebujesz zarówno wysyłać, jak i odbierać, możesz zacząć od przeczytania przewodnika Najlepsze C# SMS API w 2025.
Pobierz bibliotekę C# sms api (darmowy kod źródłowy)
W pełni działający przykład C# sms api można pobrać z następującego URL. Ten
kod jest dostarczany bezpłatnie i może być swobodnie modyfikowany i rozpowszechniany przez Ciebie.
Pobierz: OzekiConsole.zip (51 Kb)
Jak wysłać SMS z aplikacji desktopowej w C#
Wysłanie wiadomości tekstowej z aplikacji desktopowej (lub aplikacji konsolowej lub usługi Windows) ma inne wymagania niż wysłanie SMS-a ze strony internetowej. Aplikacja desktopowa działa przez znaczną ilość czasu (wiele minut, dni, a nawet tygodni). W tym przypadku korzystne jest utrzymanie stałego połączenia z bramką SMS. Używanie jednorazowych żądań internetowych nie jest dobrym wyborem dla tych aplikacji. Największą korzyścią z utrzymania stałego połączenia jest otrzymywanie informacji o zdarzeniach związanych z dostarczeniem wiadomości, takich jak raporty wysłania, raporty dostarczenia i niepowodzenia dostarczenia SMS.
Aby wysłać SMS z aplikacji desktopowej w C#, najpierw użyj dostarczonego przykładu (jak widać na Rysunku 2):
- Połącz się z bramką SMS Ozeki, używając nazwy użytkownika i hasła ozx, które utworzyłeś w interfejsie użytkownika bramki SMS. Aby się połączyć, użyj polecenia "connect hostname:port username password".
- Wyślij swoją wiadomość tekstową. Można to zrobić, wpisując "send numertelefonu tekst wiadomości", jeśli używasz przykładowej aplikacji konsolowej do wysyłania.
- Czekaj na raporty wysłania SMS i raporty dostarczenia SMS. Możesz zauważyć, że te raporty są wyświetlane na ekranie i zawierają ten sam identyfikator wiadomości, który został zwrócony podczas wysyłania SMS.
Przykładowa aplikacja konsolowa napisana w C#.Net. Kod źródłowy tej aplikacji konsolowej jest dostępny na stronie C# SMS API z kodem źródłowym.
Powyższy przykład pokazuje wymagane kroki. Możesz zobaczyć, że najpierw nawiązywane jest stałe połączenie z bramką SMS, a następnie wiadomość jest wysyłana. Na koniec widzisz raport akceptacji wiadomości i raport wysłania wiadomości.
Aby wysłać SMS z C#, użyj następującego kodu źródłowego:
- 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="To jest tekst do wysłania z C#"});
Kiedy ustawisz właściwość Client.Autoconnect na true, zapewniasz, że klient ponownie połączy się z bramką SMS, nawet jeśli połączenie sieciowe zostanie tymczasowo utracone lub bramka SMS zostanie zrestartowana.
Aby odbierać raporty dostarczenia SMS w C#, musisz zapisać się na zdarzenia:
- Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
- Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
- Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
- Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
- Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
- Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;
Te zdarzenia będą wywoływane, gdy bramka SMS wyśle odpowiednie raporty przez stałe połączenie, które utworzyliśmy za pomocą connect. To jest największa korzyść z używania stałego połączenia. Otrzymujesz natychmiastowe powiadomienia o tych zdarzeniach związanych z dostarczeniem SMS. Takie powiadomienia są trudne do uzyskania, jeśli używasz HTTP SMS api. Z drugiej strony, te informacje są kluczowe dla każdego biznesu, i musisz je przetwarzać, aby zbudować dobre oprogramowanie SMS.
Jakie rodzaje raportów dostarczenia SMS są dostarczane przez C# SMS API?
C# SMS API zwraca pięć rodzajów raportów dostarczenia SMS. Są one prezentowane jako zdarzenia w C#. Są to: zdarzenie zaakceptowania SMS, zdarzenie niezaakceptowania SMS, zdarzenie pomyślnego wysłania SMS, zdarzenie nieudanego wysłania SMS, zdarzenie pomyślnego dostarczenia SMS, zdarzenie nieudanego dostarczenia SMS.
Zdarzenie zaakceptowania SMS: Zdarzenie zaakceptowania SMS jest wywoływane, gdy brama SMS Ozeki akceptuje SMS do dostarczenia i umieszcza go w skrzynce nadawczej konta użytkownika.
Zdarzenie niezaakceptowania SMS: Zdarzenie niezaakceptowania SMS jest wywoływane, jeśli brama SMS Ozeki nie akceptuje SMS do dostarczenia. Może to się zdarzyć na przykład, jeśli użytkownik wyczerpie limit SMS, dysk będzie pełny lub wystąpi inny błąd w bramie SMS.
Zdarzenie pomyślnego wysłania SMS: Zdarzenie pomyślnego wysłania SMS jest wywoływane, gdy SMS zostanie pomyślnie dostarczony do sieci komórkowej. Sieć komórkowa zwraca raport wysłania SMS, a ten raport jest przekazywany do klienta C# SMS API przez ustalone połączenie. Zdarzenie pomyślnego wysłania SMS jest wywoływane na przykład, gdy SMS zostanie wysłany przez klienta SMPP, który łączy system z siecią komórkową przez Internet. Jeśli wysyłasz SMS-y przez androidową bramę SMS, to zdarzenie występuje, gdy SMS zostanie wysłany przez modem SMS wbudowany w telefonie z Androidem. Jeśli wysyłasz SMS przez standardowy pulę modemów GSM podłączonych do serwera kablem danych, zdarzenie jest wywoływane, gdy modem zwróci 1-bajtowy kod potwierdzający pomyślne wysłanie w odpowiedzi na komendę AT+CMGS.
Zdarzenie nieudanego wysłania SMS: Zdarzenie nieudanego wysłania SMS występuje, jeśli SMS nie mógł zostać wysłany z jakiegokolwiek powodu do sieci komórkowej przez bramę SMS Ozeki. Na przykład, jeśli połączenie internetowe używane przez klienta SMPP do połączenia z siecią komórkową jest offline lub jeśli serwer SMPP zwróci komunikat błędu SMPP podczas wysyłania SMS. Jeśli wysyłasz SMS-y przez androidową bramę SMS, a telefon z Androidem nie ma środków na koncie lub nie jest zarejestrowany w sieci komórkowej, również otrzymasz to zdarzenie. Może się również zdarzyć, że tabela routingu SMS nie jest prawidłowo skonfigurowana. Błąd wysłania SMS może również wystąpić, jeśli używasz modemu GSM do dostarczania SMS, a kabel danych między modemem a komputerem jest odłączony lub uszkodzony. We wszystkich tych przypadkach otrzymasz komunikat o błędzie w Event Args dołączonym do tego zdarzenia, aby dać ci pojęcie, co może być przyczyną niepowodzenia wysłania SMS.
Zdarzenie pomyślnego dostarczenia SMS: Zdarzenie pomyślnego dostarczenia SMS jest wywoływane, gdy SMS zostanie pomyślnie dostarczony do odbiorcy. W tym przypadku sieć komórkowa zwraca raport dostarczenia SMS do bramy SMS. Raport dostarczenia SMS zawiera znacznik czasu dostarczenia i kod statusu pomyślnego dostarczenia. Brama SMS przekazuje te informacje do C# SMS API. Gdy otrzymasz zdarzenie raportu dostarczenia SMS w C#, możesz być pewien, że twój SMS został odebrany przez odbiorcę.
Zdarzenie nieudanego dostarczenia SMS: Raport dostarczenia SMS w C# może być obsłużony za pomocą zdarzenia nieudanego dostarczenia SMS, jeśli raport dostarczenia zawiera kod statusu nieudanego dostarczenia. Może to się zdarzyć na przykład, jeśli telefon komórkowy, na który wysłano SMS, nigdy nie zostanie włączony. To zdarzenie zdarza się rzadko, ponieważ większość sieci komórkowych nie zwraca negatywnych raportów dostarczenia.
Wyślij SMS z C# SMS API (darmowy kod źródłowy)
Aby wysłać SMS z C#, użyj poniższego kodu źródłowego. Ten kod źródłowy można swobodnie modyfikować i rozpowszechniać. Pamiętaj, że możesz również swobodnie modyfikować i rozpowszechniać kod źródłowy biblioteki C# SMS API w projekcie 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("Pomyślnie połączono."); var msg = new OzxMessage(); msg.ToAddress = recipient; msg.Text = message; Console.WriteLine("Wysyłanie wiadomości. ID: "+msg.ID); Client.Send(msg); } static void Client_OnDisconnected(object sender, OzxArgs< string > e) { Console.WriteLine("Połączenie zamknięte. Powód: " + e.Item.ToString()); } static void Client_OnMessageAcceptedForDelivery(object sender, OzxArgs< string > e) { Console.WriteLine("Wiadomość zaakceptowana do dostarczenia. ID: " + e.Item.ToString()); } static void Client_OnMessageNotAcceptedForDelivery(object sender, OzxArgs< string, string > e) { Console.WriteLine("Wiadomość odrzucona. ID: " + e.Item1.ToString()+" Powód: "+e.Item2); } static void Client_OnMessageSubmitSuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Wiadomość wysłana. ID: "+e.Item1+" Data: "+e.Item2); } static void Client_OnMessageSubmitFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Wysłanie wiadomości nie powiodło się. ID: " + e.Item1 + " Data: " + e.Item2+" Powód: "+e.Item3); } static void Client_OnMessageDeliverySuccess(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Wiadomość dostarczona. ID: " + e.Item1 + " Data: " + e.Item2); } static void Client_OnMessageDeliveryFailed(object sender, OzxArgs< string, DateTime, string > e) { Console.WriteLine("Dostarczenie wiadomości nie powiodło się. ID: " + e.Item1 + " Data: " + e.Item2 + " Powód: " + e.Item3); } static void Client_OnMessageViewed(object sender, OzxArgs< string, DateTime > e) { Console.WriteLine("Wiadomość wyświetlona. ID: " + e.Item1 + " Data: " + e.Item2); } } }
Jak przetestować wysyłanie SMS w C#
Aby przetestować wysyłanie SMS w C# SMS API, masz dwie opcje: możesz użyć wbudowanego połączenia testera SMS lub możesz skonfigurować dwie bramki SMS, aby mieć bardziej realistyczne środowisko testowe. Jeśli skonfigurujesz dwie bramki SMS, najpierw musisz skonfigurować pierwszą bramkę SMS jako symulator SMPP. Ta bramka SMS będzie dostarczać usługę serwera SMPP dla drugiej bramki SMS. Będzie działać w taki sam sposób, jak działałby SMSC operatora sieci komórkowej. Druga bramka SMS połączy się z pierwszą za pomocą połączenia klienta SMPP i będzie dostarczać usługę C# SMS API dla Twojej aplikacji SMS w C#.
FAQ
Czy raport dostawy (onMessageDeliveryFailed) jest pobierany dla każdej nieudanej próby, czy tylko gdy osiągnięta zostanie maksymalna liczba prób?
Wiadomość pozostaje w stanie oczekiwania, aż wyczerpie się maksymalna liczba prób dostarczenia.
Czy możliwe jest przechowywanie przychodzących raportów dostawy SMS w SQL?
Aby otrzymywać raporty dostawy dla swoich wiadomości SMS, przejdź do menu "Edycja" i wybierz "Preferencje serwera". W zakładce "Zaawansowane" znajdź pole wyboru o nazwie "Kopiuj raporty dostawy dla użytkowników" i upewnij się, że jest zaznaczone. Jeśli skonfigurowałeś SQL do bramki SMS, przychodzące raporty dostawy będą automatycznie przechowywane w bazie danych jako standardowe przychodzące wiadomości. Oto jak aktualizacje statusu dostawy są odzwierciedlane:
- Tabela ozekimessageout i aktualizacje statusu: Jeśli wysyłasz wiadomości z tabeli "ozekimessageout", pole "status" automatycznie śledzi stan dostarczenia każdej wiadomości. To pole dynamicznie aktualizuje się, aby odzwierciedlić następujące wyniki:
- deliveredtonetwork: Wiadomość pomyślnie przesłana do sieci.
- deliveredtohandset: Wiadomość dostarczona na telefon odbiorcy.
- deliveryerror: Wystąpił błąd podczas dostarczania.
More information
- Jak wysyłać SMS-y z C#
- Odbieranie SMS w C#
- C# SMS API - połączenie do wysyłania SMS
- C# SMS API - rozłączenie z bramką SMS
- C# SMS API - utrzymanie połączenia SMS
- C# SMS API - wysyłanie wiadomości tekstowej
- C# SMS API - SMS zaakceptowany do dostarczenia
- C# SMS API - SMS niezaakceptowany do dostarczenia
- C# SMS API - wysłane
- C# SMS API - błąd wysyłania
- C# SMS API - raport dostarczenia pomyślny
- C# SMS API - raport błędu dostarczenia
- C# SMS API - alfanumeryczny identyfikator nadawcy
- C# SMS API - jak użyć krótkiego kodu jako identyfikatora nadawcy
- C# SMS API - klasa wiadomości tekstowej