Transactional communications that scale with your app.
Design communications once, deliver across multiple channels and channel providers with templates, and delivery reports built in.
Delivery playbook
Pipeline → Provider → Delivery
- Define the pipeline Compose channel + template once per intent.
- Pick the provider Start with SMTP; swap SendGrid, Twilio, Infobip, Firebase in a central location.
- Dispatch and observe Send from your app and collect delivery reports with ease.
Why teams pick Transmitly
Strategy first
Pipeline-driven delivery
Centralize how each communication is composed and dispatched across channels.
Adapter friendly
No provider lock-in
Switch from SMTP to SendGrid, Twilio or Infobip without touching your business logic.
Visibility
Track every delivery
Capture delivery reports from providers and route them into your logs, alerts, or dashboards.
Get started in minutes
- Install Add Transmitly and one provider package (SMTP is the easiest start).
- Configure Set host, credentials, and defaults in one place.
- Define pipeline Map intent to channels/templates once.
- Dispatch Send by pipeline name and capture delivery reports.
Install Packages
dotnet add package Transmitly
dotnet add package Transmitly.ChannelProvider.SmtpConfigure & dispatch
using Transmitly;
ICommunicationsClient 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 Committee"), email =>
{
email.Subject.AddStringTemplate("Thanks for creating an account!");
email.HtmlBody.AddStringTemplate("Check out the <a href=\"https://my.app/getting-started\">Getting Started</a> section to see all the cool things you can do!");
email.TextBody.AddStringTemplate("Check out the Getting Started (https://my.app/getting-started) section to see all the cool things you can do!");
});
})
.BuildClient();
// Optional (ASP.NET Core DI):
// var builder = WebApplication.CreateBuilder(args);
// builder.Services.AddSingleton<ICommunicationsClient>(communicationsClient);
var result = await communicationsClient.DispatchAsync("WelcomeKit", "newuser@example.com", new { });Swap providers or adjust templates in one place—your app code stays clean. Learn how to change providers.
Samples to get ideas flowing
Full walkthrough
Kitchen Sink (ASP.NET Core API)
- All channels + multiple providers
- Delivery reports and restrictions
- Fluid template examples
Distributed systems
Microservices
- Remote + embedded templates
- Persona filters and multi-tenant from-address logic
- Cross-service delivery reporting
Local dev
Logger provider
- No external provider required
- Inspect payloads and routing behavior
- Ideal for local debugging
Product checklist
Operational confidence
Ship with pipelines, delivery reports, and templates defined in one place.
Friendly for builders
Readable APIs, clear defaults, and examples to unblock your team fast.
Community powered
Open source roadmap, issues, and discussions in GitHub to shape what ships next.
Quick answers
Is Transmitly vendor-agnostic?
Yes. You can start with SMTP and switch to SendGrid, Twilio, Infobip, or Firebase without changing app-level dispatch code.
Which channels are supported?
Email, SMS, Voice, and Push are supported out of the box, and you can extend with custom channels/providers.
Can I use my own templates?
Yes. Use Fluid, Scriban, or your own template sources (embedded, remote, or custom).
Is the project open source?
Yep! Transmitly is distributed under the Apache 2.0 license. This permissive license is great for you because it allows for free use in commercial projects and doesn't force you to open-source your own proprietary code (no copyleft strings attached).
Drop Transmitly into your stack and keep building your app.
Open source .NET messaging with practical defaults and room to grow.