Transmitly 0.4.2

dotnet add package Transmitly --version 0.4.2
                    
NuGet\Install-Package Transmitly -Version 0.4.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Transmitly" Version="0.4.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Transmitly" Version="0.4.2" />
                    
Directory.Packages.props
<PackageReference Include="Transmitly" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Transmitly --version 0.4.2
                    
#r "nuget: Transmitly, 0.4.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Transmitly@0.4.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Transmitly&version=0.4.2
                    
Install as a Cake Addin
#tool nuget:?package=Transmitly&version=0.4.2
                    
Install as a Cake Tool

Let your .NET application express it's intent to communicate without doing the work in your business logic.

NuGet NuGet Downloads License

Transmitly is an extensible transactional communications library for .NET. It keeps email, SMS, push, voice, message composition, provider configuration, and delivery handling out of your domain and application logic.

Your application expresses an intent:

var result = await _communicationsClient.DispatchAsync(
    "WelcomeKit",
    newAccount.EmailAddress,
    new { firstName = newAccount.FirstName });

Elsewhere, Transmitly defines what WelcomeKit means: which channels are involved, how content is composed, which providers can deliver it, and how delivery events are handled.

Application
    |
    | Dispatch("WelcomeKit")
    v
Pipeline: WelcomeKit
    |
    +-- Email ----> SMTP / SendGrid / Mailgun / Infobip
    +-- SMS ------> Twilio / Infobip
    +-- Push -----> Firebase
    +-- Voice ----> Twilio / Infobip

That separation is the point of Transmitly.

When should I use it?

Transmitly is a good fit when:

  • transactional communication is becoming infrastructure rather than a single SendEmail(...) call
  • provider SDKs, templates, channel decisions, or webhook behavior are leaking into application code
  • you have, or expect, multiple message types, channels, or providers
  • you want composition and delivery behavior managed in one place
  • you want provider or channel changes without rewriting the application workflow that requested the communication

When shouldn't I use it?

If your application sends one kind of email through one provider and that is unlikely to change, a small IEmailSender-style abstraction may be enough.

Three concepts to get started

  • Pipeline — a domain-oriented communication intent such as WelcomeKit, PasswordReset, or OrderProcessing
  • Channel — how the recipient can receive it: Email, SMS, Voice, or Push Notification
  • Channel Provider — the infrastructure that delivers the channel, such as SMTP, SendGrid, Twilio, Infobip, Mailgun, or Firebase

The pipeline is the stable boundary your application talks to. Channels, providers, templates, and delivery behavior can evolve behind it.

Try Transmitly without a provider account

The core package includes simulation support, so your first dispatch does not require an SMTP server, API key, or third-party account.

dotnet add package Transmitly
using Transmitly;

var communicationsClient = new CommunicationsClientBuilder()
    .AddSimulationSupport()
    .AddPipeline("WelcomeKit", pipeline =>
    {
        pipeline.AddEmail(
            "welcome@my.app".AsIdentityAddress("Welcome"),
            email =>
            {
                email.Subject.AddStringTemplate("Thanks for signing up!");
                email.TextBody.AddStringTemplate("Welcome to the app.");
            });
    })
    .BuildClient();

var result = await communicationsClient.DispatchAsync(
    "WelcomeKit",
    "developer@example.com",
    new { });

Console.WriteLine(result.IsSuccessful);

AddSimulationSupport() uses Transmitly's built-in simulation provider. By default, it returns a successful simulated dispatch result so you can exercise the same pipeline model without sending a real communication.

Send through a real provider

When you're ready for real delivery, install only the provider your application uses. For SMTP:

dotnet add package Transmitly.ChannelProvider.Smtp
var communicationsClient = new CommunicationsClientBuilder()
    .AddSmtpSupport(options =>
    {
        options.Host = "smtp.example.com";
        options.Port = 587;
        options.UserName = "MySMTPUsername";
        options.Password = "MyPassword";
    })
    .AddPipeline("WelcomeKit", pipeline =>
    {
        pipeline.AddEmail(
            "welcome@my.app".AsIdentityAddress("Welcome"),
            email => email.Subject.AddStringTemplate("Thanks for signing up!"));
    })
    .BuildClient();

Your application still dispatches WelcomeKit. It does not become SMTP-specific.

Change providers without changing application intent

Moving email delivery from SMTP to SendGrid is a provider configuration change:

- .AddSmtpSupport(options =>
- {
-     options.Host = "smtp.example.com";
-     options.Port = 587;
- })
+ .AddSendGridSupport(options =>
+ {
+     options.ApiKey = "MySendGridApi";
+ })

After installing Transmitly.ChannelProvider.SendGrid, the pipeline and calling application can remain unchanged.

The ecosystem is modular by design

Most applications need the Transmitly core package, one or more provider integrations, and optionally a template integration.

Channel providers

Channel(s) Integration Package
Email SMTP Transmitly.ChannelProvider.Smtp NuGet Version
Email SendGrid Transmitly.ChannelProvider.SendGrid NuGet Version
Email Mailgun Transmitly.ChannelProvider.Mailgun NuGet Version
Email, SMS, Voice Infobip Transmitly.ChannelProvider.Infobip NuGet Version
SMS, Voice Twilio Transmitly.ChannelProvider.Twilio NuGet Version
Push Notifications Firebase Transmitly.ChannelProvider.Firebase NuGet Version

Optional integrations

Literal/string message content can be configured directly in core. Dynamic template rendering is deliberately pluggable so you can choose the engine that fits your application.

Delivery reports

Transmitly provides a consistent delivery-report model so application-level handling does not have to become provider-specific. Third-party providers commonly send later status updates through webhooks; the optional MVC integrations can route those provider-specific payloads into Transmitly's delivery-report handling.

Compatibility

The core project currently targets:

  • .NET 10
  • .NET 9
  • .NET 8
  • .NET 6
  • .NET Standard 2.0
  • .NET Framework 4.8 and 4.7.2

Project status

Transmitly 0.4.0 is production-ready and in production use.

There are additions and refinements planned before 1.0, and the project still reserves room for API evolution while that work lands.

Samples and documentation

Feedback wanted

If you try the quick start and something is confusing, overly abstract, missing, or simply not worth the ceremony, please tell us in GitHub Discussions. API criticism, onboarding friction, unsupported workflows, and "I stopped here because this didn't make sense" are all useful feedback.

For larger proposed changes, starting with a Discussion is the best way to align before implementation.

License

Licensed under the Apache License, Version 2.0.


Copyright (c) Code Impressions, LLC

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 is compatible.  net48 is compatible.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETFramework 4.7.2

    • No dependencies.
  • .NETFramework 4.8

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.
  • net10.0

    • No dependencies.
  • net6.0

    • No dependencies.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages (22)

Showing the top 5 NuGet packages that depend on Transmitly:

Package Downloads
Transmitly.ChannelProvider.Infobip

An Infobip channel provider for the Transmitly library.

Transmitly.Microsoft.Extensions.DependencyInjection

A Microsoft dependency injection extension for the Transmitly library.

Transmitly.ChannelProvider.Twilio

A channel provider for the Transmitly communications library.

Transmitly.ChannelProvider.SendGrid

A channel provider for the Transmitly communications library.

Transmitly.ChannelProvider.Infobip.Configuration

An Infobip channel provider configuration for the Transmitly library.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.2 83 10/3/2026
0.4.1 84 10/2/2026
0.4.1-9.ff30448 53 10/2/2026
0.4.0 1,299 7/26/2026
0.3.1-6.7ea7a14 134 4/18/2026
0.3.1-4.3eb4386 106 4/15/2026
0.3.1-3.7de1696 143 4/15/2026
0.3.0 1,519 3/25/2026
0.2.3-10.164330b 90 3/24/2026
0.2.3-6.30853e7 135 3/4/2026
0.2.3-5.aafd9cd 246 3/2/2026
0.2.3-4.d1db4d3 89 3/1/2026
0.2.2 167 2/21/2026
0.2.2-45.6d185e8 128 2/20/2026
0.2.2-43.80c3e4e 100 2/17/2026
0.2.2-39.19f2783 440 1/17/2026
0.2.2-25.0c842ba 211 12/14/2025
0.2.2-21.ee87b44 136 11/30/2025
0.2.2-17.481be94 214 8/17/2025
0.2.2-15.f253ede 172 8/17/2025
Loading failed