Skip to content

Transactional communications for .NET, organized around intent rather than channels and providers.

Transmitly lets your application describe what it needs to communicate while keeping how that communication is composed and delivered in one place.

Instead of spreading SMTP, SendGrid, Twilio, Firebase, templates, delivery callbacks, and channel-specific behavior throughout your application, your business code can stay focused on domain actions such as:

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

The WelcomeKit pipeline decides what that means.

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

Change providers, templates, channels, or delivery handling without pushing those decisions back into your domain code.

Why Transmitly?

Transactional communication tends to start small and grow sideways:

  • one email becomes many message types
  • one provider becomes several providers or channels
  • templates and credentials spread across services
  • webhook and delivery-report handling becomes provider-specific
  • application services accumulate IEmailClient, ISmsClient, push clients, and provider SDKs

Transmitly gives those concerns a common model:

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

A good fit when

  • communication behavior is becoming infrastructure rather than a single SendEmail(...) call
  • you want business logic to express intent instead of provider mechanics
  • you have, or expect, multiple channels or providers
  • composition, templates, delivery reporting, or provider webhooks need a consistent home
  • you want the freedom to change delivery infrastructure without rewriting application workflows

Probably more abstraction than you need when

If your application sends one kind of email through one provider and that is unlikely to change, a small email abstraction may be all you need.

Transmitly becomes useful when the abstraction you need is no longer "send an email", but "perform this communication intent."

Extensibility built-in

Transmitly is intentionally extensible, so providers and integrations live in focused packages and repositories. You won't need to know the details unless you want to extend the library.

Start with the core library, then add only the integrations your application actually uses.

                         +----------------------+
                         |      Transmitly      |
                         |        Core          |
                         |----------------------|
                         | Pipelines            |
                         | Channels             |
                         | Dispatch             |
                         | Delivery reports     |
                         | Extension points     |
                         | Simulation support   |
                         +----------+-----------+
                                    |
            +-----------------------+-----------------------+
            |                       |                       |
            v                       v                       v
   Channel Providers         Template Engines        Host Integrations
   -----------------         ----------------        -----------------
   SMTP                      Fluid                   Microsoft DI
   SendGrid                  Scriban                 ASP.NET Core MVC
   Mailgun                                           ASP.NET MVC
   Twilio
   Infobip
   Firebase

Start here

Add a channel provider when you need real delivery

Add application integrations

Try the core library without a provider account

The core package includes simulation support, so you can understand the model and exercise a pipeline before configuring SMTP or creating an account with a third-party provider.

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);

No SMTP server, SendGrid account, Twilio account, or API key is required for this simulated dispatch.

When you're ready to send real communications, add the provider package you want and configure it in the same composition root.

Project status

Transmitly 0.4.0 is production-ready and in production use.

There are additional capabilities and refinements planned before the project declares 1.0, and that work may include API evolution.

Feedback wanted

Transmitly is actively looking for feedback from developers.

If you try it and something is confusing, overly abstract, missing, or harder than it should be, please start a GitHub Discussion. Questions, API criticism, onboarding troubles and different use cases are all useful feedback.

A report that says "I stopped here because this didn't make sense" is valuable!

Learn more

Pinned Loading

  1. transmitly transmitly Public

    Model transactional email, SMS, push and voice as domain intents in .NET, then deliver through SMTP, SendGrid, Twilio, Firebase and more.

    C# 25 2

  2. transmitly-microsoft-extensions-dependencyinjection transmitly-microsoft-extensions-dependencyinjection Public

    Simplifies Transmitly configuration with Microsoft dependency injection framework

    C# 1

  3. transmitly-channel-provider-smtp transmitly-channel-provider-smtp Public

    Extends Transmitly to enable sending email communications with with any SMTP server

    C#

  4. transmitly-channel-provider-sendgrid transmitly-channel-provider-sendgrid Public

    Extends Transmitly to enable sending email communications with https://www.sendgrid.com

    C# 1

  5. transmitly-channel-provider-twilio transmitly-channel-provider-twilio Public

    Extends Transmitly to enable sending sms and voice communications with https://www.twilio.com

    C#

  6. transmitly-template-engine-fluid transmitly-template-engine-fluid Public

    Integrates Fluid, a lightweight .NET Liquid templating engine, into Transmitly. It enables dynamic message templating for emails, SMS, and other communication channels, allowing for flexible and ef…

    C# 1

Repositories

Showing 10 of 27 repositories

Top languages

Loading…

Most used topics

Loading…