ApricotFramework.Mailer.DependencyInjection
0.1.0
Prefix Reserved
dotnet add package ApricotFramework.Mailer.DependencyInjection --version 0.1.0
NuGet\Install-Package ApricotFramework.Mailer.DependencyInjection -Version 0.1.0
<PackageReference Include="ApricotFramework.Mailer.DependencyInjection" Version="0.1.0" />
<PackageVersion Include="ApricotFramework.Mailer.DependencyInjection" Version="0.1.0" />
<PackageReference Include="ApricotFramework.Mailer.DependencyInjection" />
paket add ApricotFramework.Mailer.DependencyInjection --version 0.1.0
#r "nuget: ApricotFramework.Mailer.DependencyInjection, 0.1.0"
#:package ApricotFramework.Mailer.DependencyInjection@0.1.0
#addin nuget:?package=ApricotFramework.Mailer.DependencyInjection&version=0.1.0
#tool nuget:?package=ApricotFramework.Mailer.DependencyInjection&version=0.1.0
ApricotFramework.Mailer
Sending mail from .NET, configured the way a connection string is: named accounts in one settings section, each naming the transport that carries it. SMTP is here today and a transport is a package, so adding a vendor changes nothing about the accounts you already have.
ApricotFramework.Mailer is the zero-dependency core, and nothing here needs ASP.NET Core — the
integration package depends only on Microsoft.Extensions.*, so a worker host can use it too.
Install
dotnet add package ApricotFramework.Mailer
dotnet add package ApricotFramework.Mailer.Smtp
dotnet add package ApricotFramework.Mailer.DependencyInjection
Usage
builder.Services.AddMailer(builder.Configuration);
builder.Services.AddSmtpMailTransport();
"Mailer": {
"DefaultAccount": "default",
"Accounts": {
"default": {
"Transport": "smtp",
"DefaultFrom": "Example <no-reply@example.com>",
"Settings": {
"Host": "smtp.example.com",
"Port": 587,
"Security": "StartTls",
"Username": "apikey"
// Password comes from the environment:
// Mailer__Accounts__default__Settings__Password
}
}
}
}
var result = await mailer.SendAsync(new EmailMessage
{
Subject = "Welcome",
Body = EmailBody.FromHtml("<b>Hello</b>"),
To = [EmailAddress.Parse("someone@example.com")],
});
if (!result.Succeeded && result.IsTransient())
{
// a connection problem, a timeout or a rate limit: worth trying again
}
A refused or undeliverable message is a result, not an exception — only cancellation throws. The one exception to "everything is a result" is startup: an account naming a transport you did not register fails the host, rather than waiting for the first mail to find out.
Full documentation: https://projectapricot.dev/docs/mailer
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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. |
-
net10.0
- ApricotFramework.Mailer (>= 0.1.0)
- Microsoft.Extensions.Caching.Memory (>= 10.0.11)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.11)
- Microsoft.Extensions.Logging (>= 10.0.11)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.11)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 156 | 8/28/2026 |