Отправка 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 Также в библиотеке
Работа с датами в Swift: Foundation, SwiftDate, DateTools (iOS/macOS)
ORM для Rust: сравнение Diesel, SeaORM, SQLx и примеры кода
Elasticsearch клиент для Node.js: @elastic/elasticsearch
Мониторинг приложений PHP: инструменты и библиотеки для отслеживания производительности