Отправка SMS на C# (.NET): API библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Отправка SMS на C# (.NET): Обзор библиотек и API

В современной разработке на C# (.NET) часто возникает необходимость интеграции SMS-уведомлений: подтверждение регистрации, двухфакторная аутентификация, оповещения о статусе заказа или просто массовая рассылка. В этой статье мы разберем три популярных подхода к отправке SMS из приложений на C#: использование облачных сервисов Twilio, Vonage (бывший Nexmo) и российского сервиса SMSC.ru. Все примеры кода написаны для .NET 6/8 и используют современные асинхронные методы.

1. Отправка SMS через Twilio (глобальный провайдер)

Twilio — один из самых популярных сервисов для отправки SMS, голосовых сообщений и других коммуникаций. У него отличная документация и официальный NuGet-пакет.

Установка библиотеки

Добавьте пакет через NuGet Package Manager или выполните команду:

dotnet add package Twilio

Пример отправки SMS на C#

using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

public class SmsService
{
    // Укажите Account SID и Auth Token из консоли Twilio
    private readonly string _accountSid = "ВАШ_ACCOUNT_SID";
    private readonly string _authToken = "ВАШ_AUTH_TOKEN";
    private readonly string _fromPhone = "+1234567890"; // Номер, купленный в Twilio

    public async Task<bool> SendSmsAsync(string toPhone, string message)
    {
        TwilioClient.Init(_accountSid, _authToken);

        try
        {
            var msg = await MessageResource.CreateAsync(
                body: message,
                from: new PhoneNumber(_fromPhone),
                to: new PhoneNumber(toPhone)
            );
            
            Console.WriteLine($"SMS отправлено! SID: {msg.Sid}");
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Ошибка: {ex.Message}");
            return false;
        }
    }
}

Важно: Номер отправителя должен быть подтвержден в аккаунте Twilio. Для тестовых аккаунтов SMS отправляются только на верифицированные номера.

2. Отправка SMS через Vonage (бывший Nexmo)

Vonage — еще один мощный облачный провайдер. Его API прост, а пакет легко устанавливается через NuGet.

Установка библиотеки

dotnet add package Vonage

Пример отправки SMS

using Vonage;
using Vonage.Request;
using Vonage.Messaging;

public class VonageSmsService
{
    private readonly string _apiKey = "ВАШ_API_KEY";
    private readonly string _apiSecret = "ВАШ_API_SECRET";
    private readonly string _from = "YourApp"; // Имя отправителя

    public async Task<bool> SendSmsAsync(string toPhone, string message)
    {
        var credentials = Credentials.FromApiKeyAndSecret(_apiKey, _apiSecret);
        var client = new VonageClient(credentials);

        var request = new SendSmsRequest
        {
            To = toPhone,
            From = _from,
            Text = message
        };

        var response = await client.SmsClient.SendAnSmsAsync(request);

        if (response.Messages[0].Status == "0")
        {
            Console.WriteLine($"SMS отправлено! ID: {response.Messages[0].MessageId}");
            return true;
        }
        else
        {
            Console.WriteLine($"Ошибка: {response.Messages[0].ErrorText}");
            return false;
        }
    }
}

Примечание: Для отправки на российские номера может потребоваться дополнительная настройка альфа-имени.

3. Отправка SMS через SMSC.ru (российский сервис)

Если ваша аудитория находится преимущественно в России и СНГ, SMSC.ru может быть более удобным и дешевым вариантом. Библиотека не требуется — достаточно HTTP-запроса.

Пример отправки через HttpClient

using System.Net.Http;
using System.Text;
using System.Text.Json;

public class SmscService
{
    private readonly HttpClient _httpClient;
    private readonly string _login = "ВАШ_ЛОГИН";
    private readonly string _password = "ВАШ_ПАРОЛЬ";

    public SmscService(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    public async Task<bool> SendSmsAsync(string toPhone, string message)
    {
        var parameters = new Dictionary<string, string>
        {
            { "login", _login },
            { "psw", _password },
            { "phones", toPhone },
            { "mes", message },
            { "fmt", "3" } // Формат ответа: 3 — JSON
        };

        var content = new FormUrlEncodedContent(parameters);
        var response = await _httpClient.PostAsync("https://smsc.ru/sys/send.php", content);
        
        if (response.IsSuccessStatusCode)
        {
            var json = await response.Content.ReadAsStringAsync();
            // Парсим JSON-ответ
            var result = JsonSerializer.Deserialize<SmscResponse>(json                    

Рекомендаций