Transactional communciations that scale with your app.
Design communications once, deliver across Email / SMS / Voice / Push with pipelines, 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 & 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
Bring in Transmitly (and the SMTP provider to start). - Wire a provider
Add your host, credentials, and defaults. - Declare a pipeline
Define channels and templates for your intent. - Dispatch
Send and observe with delivery reports.
dotnet CLI
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();
builder.Services.AddSingleton(communicationsClient);
// Later in your app: dispatch by pipeline name and recipient address
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 the ideas flowing
Kitchen Sink (ASP.NET Core API)
All channels (Email/SMS/Voice/Push) with SMTP, SendGrid, Twilio, Infobip, Firebase, delivery reports, channel-provider restrictions, and Fluid templates.
View sampleMicroservices
Extend the communications client with remote/embedded templates, persona filters, multi-tenant “from” resolution, and delivery reports across services.
View sampleLogger provider
A minimal provider that logs all channels—great for local testing and debugging dispatch behavior.
View sampleProduct 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.
Open Source
Start dispatching today
Drop Transmitly into your stack and keep building your app.