Skip to main content

Curiosus.SMS.Smsc

NuGet Downloads Coverage

ISmsSender implementation for SMSC. Use it to send SMS via an smsc.ru account, directly or through Curiosus.Notifications.SMS.

Installation​

dotnet add package Curiosus.SMS.Smsc

Usage​

SmscOptions requires SmscLogin and SmscPassword; SmscSender (sender name) is optional. For example, bound from configuration:

Smsc:
SmscLogin: my-login
SmscPassword: my-password
SmscSender: MyCompany
var smscOptions = configuration.GetSection("Smsc").Get<SmscOptions>()!;

// registers ISmscSender and, by default, ISmsSender
services.AddSmscSmsSender(smscOptions);
var result = await smsSender.SendSmsAsync("+71234567890", "Hello!", cancellationToken);
if (result.IsSuccess)
{
var cost = result.Body.Cost;
var count = result.Body.SmsCount;
}

// per-message credentials or sender name
await smsSender.SendSmsAsync("+71234567890", "Hello!", new SmscExtraParams("other-login", "other-password", null));

Pass useAsDefaultSender: false to register only ISmscSender (e.g. when another provider is the default ISmsSender).

Notes:

  • SMSC error codes are mapped to SmsError (Auth, NoMoney, RateLimit, DeliveryError, Unknown); the raw SMSC response is available in SmsSentResult.ResponseJson.
  • If SMSC rejects a message because of the sender name (error 6), the sender retries once without the sender name.

HTTP requests go through the HttpClient named SmscSender.HttpClientName from IHttpClientFactory, which AddSmscSmsSender registers. Configure it for timeouts, a proxy or resilience handlers:

services.AddHttpClient(SmscSender.HttpClientName, client => client.Timeout = TimeSpan.FromSeconds(30));

See also​