From a7b10ab42288018eafec2a3365b1451978a68d1b Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 10 Jul 2024 08:30:53 -0500 Subject: [PATCH 01/22] Initial bits --- .../MailDev.Client/AssemblyInfo.cs | 5 ++ .../MailDev.Client/MailDev.Client.csproj | 17 ++++ .../MailDev.Client/MailDevClient.cs | 85 +++++++++++++++++++ ...ailDevClientServiceCollectionExtensions.cs | 17 ++++ .../MailDev.Client/MailDevClientSettings.cs | 31 +++++++ .../MailDevResource/MailDevResource.sln | 13 ++- 6 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs create mode 100644 docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj create mode 100644 docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs create mode 100644 docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs create mode 100644 docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientSettings.cs diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs new file mode 100644 index 0000000000..2dab40f7c5 --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using MailDev.Client; + +[assembly: ConfigurationSchema("Aspire:MailDev:Client", typeof(MailDevClientSettings))] + +[assembly: LoggingCategories("MailDev-Client")] diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj new file mode 100644 index 0000000000..3744974645 --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs new file mode 100644 index 0000000000..d4cdba0990 --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs @@ -0,0 +1,85 @@ +using System.Net.Mail; +using Microsoft.Extensions.Configuration; + +namespace MailDev.Client; + +/// +/// A representation of a MailDev client. +/// +public sealed class MailDevClient : IDisposable +{ + private readonly string _from; + private readonly SmtpClient _smtpClient; + + /// + /// Initializes a new instance of with the + /// given and . + /// + /// + /// The configuration containing the named () connection string for the SMTP server. + /// + /// + /// The name used to resolve the connection string + /// + public MailDevClient(IConfiguration configuration, string name) + { + ArgumentNullException.ThrowIfNull(configuration); + + _from = configuration["MailDev:NewsletterEmail"] + ?? "newsletter@yourcompany.com"; + + var connectionString = configuration.GetConnectionString(name); + if (string.IsNullOrWhiteSpace(connectionString)) + { + throw new ArgumentException( + $"A connection string is required for {name}"); + } + + if (Uri.TryCreate(connectionString, UriKind.Absolute, out var smtpUri) is false) + { + throw new ArgumentException( + $"The configured connection string for {name} isn't a valid URI: {connectionString}"); + } + + _smtpClient = new SmtpClient(smtpUri.Host, smtpUri.Port); + } + + /// + /// Subscribes the given to the newsletter. + /// + /// The email address that's subscribing. + /// + /// An asynchronous operation representing the subscribe functionality. + /// + public async Task SubscribeToNewsletterAsync(string email) + { + using var message = new MailMessage(_from, email) + { + Subject = "Welcome to our newsletter!", + Body = "Thank you for subscribing to our newsletter!" + }; + + await _smtpClient.SendMailAsync(message); + } + + /// + /// Unsubscribes the given to the newsletter. + /// + /// The email address that's unsubscribing. + /// + /// An asynchronous operation representing the unsubscribe functionality. + /// + public async Task UnsubscribeToNewsletterAsync(string email) + { + using var message = new MailMessage(_from, email) + { + Subject = "You are unsubscribed from our newsletter!", + Body = "Sorry to see you go. We hope you will come back soon!" + }; + + await _smtpClient.SendMailAsync(message); + } + + /// + public void Dispose() => _smtpClient.Dispose(); +} diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs new file mode 100644 index 0000000000..f3e7717448 --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs @@ -0,0 +1,17 @@ + +using Microsoft.Extensions.Hosting; + +namespace MailDev.Client; + +public static class MailDevClientServiceCollectionExtensions +{ + public static IHostApplicationBuilder AddMailDevClient( + this IHostApplicationBuilder builder, + string connectionName, + Action? configure) + { + + + return builder; + } +} diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientSettings.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientSettings.cs new file mode 100644 index 0000000000..75fdb95c8c --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientSettings.cs @@ -0,0 +1,31 @@ +namespace MailDev.Client; + +/// +/// Provides the client configuration settings for connecting to a MailDev SMTP server. +/// +public sealed class MailDevClientSettings +{ + /// + /// Gets or sets a boolean value that indicates whether the database health check is disabled or not. + /// + /// + /// The default value is . + /// + public bool DisableHealthChecks { get; set; } + + /// + /// Gets or sets a boolean value that indicates whether the OpenTelemetry tracing is disabled or not. + /// + /// + /// The default value is . + /// + public bool DisableTracing { get; set; } + + /// + /// Gets or sets a boolean value that indicates whether the OpenTelemetry metrics are disabled or not. + /// + /// + /// The default value is . + /// + public bool DisableMetrics { get; set; } +} diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.sln b/docs/extensibility/snippets/MailDevResource/MailDevResource.sln index 9583a750e5..b9451af507 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.sln +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.sln @@ -1,4 +1,5 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 + +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.8.0.0 MinimumVisualStudioVersion = 17.8.0.0 @@ -6,9 +7,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MailDevResource.AppHost", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MailDevResource.ServiceDefaults", "MailDevResource.ServiceDefaults\MailDevResource.ServiceDefaults.csproj", "{9AE7DA9D-B8AD-4BA6-A358-6F352C2D7255}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MailDev.Hosting", "MailDev.Hosting\MailDev.Hosting.csproj", "{896B2FA6-E580-4AFC-ACC5-383D052F9EEB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MailDev.Hosting", "MailDev.Hosting\MailDev.Hosting.csproj", "{896B2FA6-E580-4AFC-ACC5-383D052F9EEB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MailDevResource.NewsletterService", "MailDevResource.NewsletterService\MailDevResource.NewsletterService.csproj", "{3C023F9E-2B5D-4C48-818F-A640EDAE9E4C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MailDevResource.NewsletterService", "MailDevResource.NewsletterService\MailDevResource.NewsletterService.csproj", "{3C023F9E-2B5D-4C48-818F-A640EDAE9E4C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MailDev.Client", "MailDev.Client\MailDev.Client.csproj", "{C9A58484-13CC-4391-9D93-88FDFA7B0DDF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -32,6 +35,10 @@ Global {3C023F9E-2B5D-4C48-818F-A640EDAE9E4C}.Debug|Any CPU.Build.0 = Debug|Any CPU {3C023F9E-2B5D-4C48-818F-A640EDAE9E4C}.Release|Any CPU.ActiveCfg = Release|Any CPU {3C023F9E-2B5D-4C48-818F-A640EDAE9E4C}.Release|Any CPU.Build.0 = Release|Any CPU + {C9A58484-13CC-4391-9D93-88FDFA7B0DDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9A58484-13CC-4391-9D93-88FDFA7B0DDF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9A58484-13CC-4391-9D93-88FDFA7B0DDF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9A58484-13CC-4391-9D93-88FDFA7B0DDF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 6223c14a78e45bf9f97d5fd57966cf209c60c776 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 12 Jul 2024 08:16:05 -0500 Subject: [PATCH 02/22] More updates to the WIP --- .../MailDev.Client/AssemblyInfo.cs | 6 +- .../MailDev.Client/MailDev.Client.csproj | 5 +- .../MailDev.Client/MailDevClient.cs | 85 ++++++++----------- ...ailDevClientServiceCollectionExtensions.cs | 54 +++++++++++- .../MailDev.Client/MailDevHealthCheck.cs | 24 ++++++ .../MailDevResource.NewsletterService.csproj | 1 + .../Program.cs | 54 ++---------- 7 files changed, 125 insertions(+), 104 deletions(-) create mode 100644 docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs index 2dab40f7c5..8e9743bb20 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs @@ -1,5 +1,5 @@ -using MailDev.Client; +//using MailDev.Client; -[assembly: ConfigurationSchema("Aspire:MailDev:Client", typeof(MailDevClientSettings))] +//[assembly: ConfigurationSchema("Aspire:MailDev:Client", typeof(MailDevClientSettings))] -[assembly: LoggingCategories("MailDev-Client")] +//[assembly: LoggingCategories("MailDev-Client")] diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj index 3744974645..4a4a7031c9 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj @@ -7,10 +7,11 @@ - + + - + diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs index d4cdba0990..8e0c1f62b3 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs @@ -1,48 +1,21 @@ -using System.Net.Mail; -using Microsoft.Extensions.Configuration; +using MailKit.Net.Smtp; +using MimeKit; namespace MailDev.Client; /// /// A representation of a MailDev client. /// -public sealed class MailDevClient : IDisposable +/// +/// Initializes a new instance of with the +/// given . +/// +/// +/// The for the SMTP server. +/// +public sealed class MailDevClient(Uri smtpUri) { - private readonly string _from; - private readonly SmtpClient _smtpClient; - - /// - /// Initializes a new instance of with the - /// given and . - /// - /// - /// The configuration containing the named () connection string for the SMTP server. - /// - /// - /// The name used to resolve the connection string - /// - public MailDevClient(IConfiguration configuration, string name) - { - ArgumentNullException.ThrowIfNull(configuration); - - _from = configuration["MailDev:NewsletterEmail"] - ?? "newsletter@yourcompany.com"; - - var connectionString = configuration.GetConnectionString(name); - if (string.IsNullOrWhiteSpace(connectionString)) - { - throw new ArgumentException( - $"A connection string is required for {name}"); - } - - if (Uri.TryCreate(connectionString, UriKind.Absolute, out var smtpUri) is false) - { - throw new ArgumentException( - $"The configured connection string for {name} isn't a valid URI: {connectionString}"); - } - - _smtpClient = new SmtpClient(smtpUri.Host, smtpUri.Port); - } + private readonly string _from = "newsletter@yourcompany.com"; /// /// Subscribes the given to the newsletter. @@ -51,15 +24,20 @@ public MailDevClient(IConfiguration configuration, string name) /// /// An asynchronous operation representing the subscribe functionality. /// - public async Task SubscribeToNewsletterAsync(string email) + public Task SubscribeToNewsletterAsync(string email) { - using var message = new MailMessage(_from, email) + var message = new MimeMessage { Subject = "Welcome to our newsletter!", - Body = "Thank you for subscribing to our newsletter!" + Body = new TextPart("plain") + { + Text = "Thank you for subscribing to our newsletter!" + }, + From = { new MailboxAddress("Dev Newsletter", _from) }, + To = { new MailboxAddress("Recipient Name", email) } }; - await _smtpClient.SendMailAsync(message); + return SendMessageAsync(message); } /// @@ -69,17 +47,28 @@ public async Task SubscribeToNewsletterAsync(string email) /// /// An asynchronous operation representing the unsubscribe functionality. /// - public async Task UnsubscribeToNewsletterAsync(string email) + public Task UnsubscribeToNewsletterAsync(string email) { - using var message = new MailMessage(_from, email) + var message = new MimeMessage { Subject = "You are unsubscribed from our newsletter!", - Body = "Sorry to see you go. We hope you will come back soon!" + Body = new TextPart("plain") + { + Text = "Sorry to see you go. We hope you will come back soon!" + }, + From = { new MailboxAddress("Dev Newsletter", _from) }, + To = { new MailboxAddress("Recipient Name", email) } }; - await _smtpClient.SendMailAsync(message); + return SendMessageAsync(message); } - /// - public void Dispose() => _smtpClient.Dispose(); + private async Task SendMessageAsync(MimeMessage message) + { + using var client = new SmtpClient(); + + await client.ConnectAsync(smtpUri.Host, smtpUri.Port); + await client.SendAsync(message); + await client.DisconnectAsync(true); + } } diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs index f3e7717448..54ddc41859 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs @@ -1,4 +1,6 @@ - +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Hosting; namespace MailDev.Client; @@ -8,10 +10,56 @@ public static class MailDevClientServiceCollectionExtensions public static IHostApplicationBuilder AddMailDevClient( this IHostApplicationBuilder builder, string connectionName, - Action? configure) + Action? configureSettings = default) { + ArgumentNullException.ThrowIfNull(builder); + var settings = new MailDevClientSettings(); - return builder; + builder.Configuration + .GetSection("Aspire:MailDev") + .Bind(settings); + + configureSettings?.Invoke(settings); + + var smtpUri = TryGetSmtpUri(builder.Configuration, connectionName); + + builder.Services.AddScoped(_ => + { + return new MailDevClient(smtpUri); + }); + + if (settings.DisableHealthChecks is false) + { + builder.Services.AddHealthChecks() + .Add(new HealthCheckRegistration( + "Aspire.HealthChecks.MailDev", + _ => new MailDevHealthCheck(smtpUri), + failureStatus: default, + tags: default)); + } + + return builder; + } + + private static Uri TryGetSmtpUri(IConfigurationManager config, string name) + { + ArgumentNullException.ThrowIfNull(config); + ArgumentException.ThrowIfNullOrWhiteSpace(name); + + if (config.GetConnectionString(name) is not { } connectionString) + { + throw new ArgumentException( + $"Missing connection string for {name}", nameof(name)); + } + + if (Uri.TryCreate(connectionString, UriKind.RelativeOrAbsolute, out var smtpUri) || + smtpUri is null) + { + throw new ArgumentException( + $"Connection string isn't a URI for {name}", nameof(name)); + } + + return smtpUri; } } diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs new file mode 100644 index 0000000000..2eb1b00abc --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs @@ -0,0 +1,24 @@ +using MailKit.Net.Smtp; +using Microsoft.Extensions.Diagnostics.HealthChecks; + +namespace MailDev.Client; + +internal sealed class MailDevHealthCheck(Uri smtpUri) : IHealthCheck +{ + public async Task CheckHealthAsync( + HealthCheckContext context, CancellationToken cancellationToken = default) + { + try + { + var client = new SmtpClient(); + + await client.ConnectAsync(smtpUri, cancellationToken); + + return HealthCheckResult.Healthy(); + } + catch + { + return HealthCheckResult.Unhealthy(); + } + } +} diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj index fe1a129336..541c96d542 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj @@ -1,6 +1,7 @@ + diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index c10e16c5c0..e1c63368ed 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -1,4 +1,4 @@ -using System.Net.Mail; +using MailDev.Client; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(args); @@ -7,14 +7,7 @@ // Add services to the container. // -builder.Services.AddSingleton(sp => -{ - var smtpUri = new Uri(builder.Configuration.GetConnectionString("maildev")!); - - var smtpClient = new SmtpClient(smtpUri.Host, smtpUri.Port); - - return smtpClient; -}); +builder.AddMailDevClient("maildev"); // var app = builder.Build(); @@ -25,51 +18,16 @@ app.UseHttpsRedirection(); -var summaries = new[] -{ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; - -app.MapGet("/weatherforecast", () => -{ - var forecast = Enumerable.Range(1, 5).Select(index => - new WeatherForecast - ( - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] - )) - .ToArray(); - return forecast; -}); - // -app.MapPost("/subscribe", async ([FromServices] SmtpClient smtpClient, string email) => +app.MapPost("/subscribe", async ([FromServices] MailDevClient client, string email) => { - using var message = new MailMessage("newsletter@yourcompany.com", email) - { - Subject = "Welcome to our newsletter!", - Body = "Thank you for subscribing to our newsletter!" - }; - - await smtpClient.SendMailAsync(message); + await client.SubscribeToNewsletterAsync(email); }); -app.MapPost("/unsubscribe", async ([FromServices] SmtpClient smtpClient, string email) => +app.MapPost("/unsubscribe", async ([FromServices] MailDevClient client, string email) => { - using var message = new MailMessage("newsletter@yourcompany.com", email) - { - Subject = "You are unsubscribed from our newsletter!", - Body = "Sorry to see you go. We hope you will come back soon!" - }; - - await smtpClient.SendMailAsync(message); + await client.UnsubscribeToNewsletterAsync(email); }); // app.Run(); - -record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) -{ - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); -} From 59b58a7a8b52b4354eaedfbb7c2becc77fdf9e58 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 12 Jul 2024 10:32:17 -0500 Subject: [PATCH 03/22] Started adding the component article --- docs/extensibility/custom-component.md | 26 +++++++ docs/extensibility/custom-resources.md | 28 ++++++-- .../MailDev.Client/MailDevClient.cs | 19 ++--- ...ailDevClientServiceCollectionExtensions.cs | 70 ++++++++++++++++--- .../MailDev.Client/MailDevHealthCheck.cs | 15 ++-- .../MailDevResource.NewsletterService.csproj | 5 ++ .../Program.cs | 7 +- .../Properties/launchSettings.json | 34 +++------ .../snippets/MailDevResource/global.json | 3 + 9 files changed, 151 insertions(+), 56 deletions(-) create mode 100644 docs/extensibility/custom-component.md create mode 100644 docs/extensibility/snippets/MailDevResource/global.json diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md new file mode 100644 index 0000000000..c783f98210 --- /dev/null +++ b/docs/extensibility/custom-component.md @@ -0,0 +1,26 @@ +--- +title: Create custom .NET Aspire component +description: Learn how to create a custom resource for an existing containerized application. +ms.date: 07/12/2024 +ms.topic: how-to +--- + +# Create custom .NET Aspire component + +This article is a continution of the [Create custom resource types for .NET Aspire](custom-resources.md) article. In this article, you create a .NET Aspire component that relies on [MailKit](https://github.com/jstedfast/MailKit) to send emails and is used as a component in the Newsletter app you built. + +## Prerequisites + +If you're following along, you should have already completed the steps in the [Create custom resource types for .NET Aspire](custom-resources.md) article. + +## Create library for component + +[.NET Aspire components](../fundamentals/components-overview.md) are delivered as NuGet packages, but in this example, it's beyond the scope of this article to publish a NuGet package. Instead, you create a class library project that contains the component and reference it as a project. + +1. Create a new class library project named `MailDev.Client` in the same solution as the `MailDevResource.NewsletterService` project. + + ```dotnetcli + dotnet new classlib -o MailDev.Client + ``` + +// TODO: Wip \ No newline at end of file diff --git a/docs/extensibility/custom-resources.md b/docs/extensibility/custom-resources.md index 60d67e694e..dbb1465a28 100644 --- a/docs/extensibility/custom-resources.md +++ b/docs/extensibility/custom-resources.md @@ -1,9 +1,8 @@ --- title: Create custom resource types for .NET Aspire description: Learn how to create a custom resource for an existing containerized application. -ms.date: 05/29/2024 +ms.date: 07/12/2024 ms.topic: how-to -ms.custom: devx-track-extended-azdevcli --- # Create custom resource types for .NET Aspire @@ -230,7 +229,7 @@ In order to test the end-to-end scenario, you need a .NET project which we can i 1. Create a new .NET project named _:::no-loc text="MailDevResource.NewsletterService":::_. ```dotnetcli - dotnet new webapi --use-minimal-apis --no-openapi -o MailDevResource.NewsletterService + dotnet new webapi --use-minimal-apis -o MailDevResource.NewsletterService ``` 1. Add a reference to the _:::no-loc text="MailDev.Hosting":::_ project. @@ -265,7 +264,19 @@ The preceding screenshot shows the environment variables for the `newsletterserv To use the SMTP connection details that were injected into the newsletter service project, you inject an instance of into the dependency injection container as a singleton. Add the following code to the _:::no-loc text="Program.cs":::_ file in the _:::no-loc text="MailDevResource.NewsletterService":::_ project to setup the singleton service. In the `Program` class, immediately following the `// Add services to the container` comment, add the following code: -:::code source="snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs" id="smtp"::: +```csharp +builder.Services.AddSingleton(sp => +{ + var smtpUri = new Uri(builder.Configuration.GetConnectionString("maildev")!); + + var smtpClient = new SmtpClient(smtpUri.Host, smtpUri.Port); + + return smtpClient; +}); +``` + +> [!TIP] +> This code snippet relies on the official `SmtpClient`, however; this type is obsolete on some platforms and not recommended on others. This is used here to demonstrate a non-componentized approach to using the MailDev resource. For a more modern approach using [MailKit](https://github.com/jstedfast/MailKit), see [Create custom .NET Aspire component](custom-component.md). To test the client, add two simple `subscribe` and `unsubscribe` GET methods to the newsletter service. Add the following code after the `MapGet` call in the _:::no-loc text="Program.cs":::_ file of the _MailDevResource.NewsletterService_ project to setup the ASP.NET Core routes: @@ -293,7 +304,7 @@ curl -H "Content-Type: application/json" --request POST https://localhost:7251/s ## [Windows](#tab/windows) ```powershell -curl -H "Content-Type: application/json" --request POST https://localhost:7251/subscribe?email=test@test.com +curl -H @{ ContentType = "application/json" } -Method POST https://localhost:7251/subscribe?email=test@test.com ``` --- @@ -317,7 +328,7 @@ curl -H "Content-Type: application/json" --request POST https://localhost:7251/u ## [Windows](#tab/windows) ```powershell -curl -H "Content-Type: application/json" --request POST https://localhost:7251/unsubscribe?email=test@test.com +curl -H @{ ContentType = "application/json" } -Method POST https://localhost:7251/unsubscribe?email=test@test.com ``` --- @@ -482,3 +493,8 @@ Careful consideration should be given as to whether the resource should be prese ## Summary In the custom resource tutorial, you learned how to create a custom .NET Aspire resource which uses an existing containerized application (MailDev). You then used that to improve the local development experience by making it easy to test e-mail capabilities that might be used within an app. These learnings can be applied to building out other custom resources that can be used in .NET Aspire-based applications. This specific example didn't include any custom components, but it's possible to build out custom components to make it easier for developers to use the resource. In this scenario you were able to rely on the existing `SmtpClient` class in the .NET platform to send e-mails. + +## Next steps + +> [!div class="nextstepaction"] +> [Create custom .NET Aspire component](custom-component.md) diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs index 8e0c1f62b3..2bba31ec93 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs @@ -3,16 +3,12 @@ namespace MailDev.Client; -/// -/// A representation of a MailDev client. -/// +/// A representation of a MailDev client. +/// The for the SMTP server. /// /// Initializes a new instance of with the /// given . /// -/// -/// The for the SMTP server. -/// public sealed class MailDevClient(Uri smtpUri) { private readonly string _from = "newsletter@yourcompany.com"; @@ -67,8 +63,13 @@ private async Task SendMessageAsync(MimeMessage message) { using var client = new SmtpClient(); - await client.ConnectAsync(smtpUri.Host, smtpUri.Port); - await client.SendAsync(message); - await client.DisconnectAsync(true); + await client.ConnectAsync(smtpUri.Host, smtpUri.Port) + .ConfigureAwait(false); + + await client.SendAsync(message) + .ConfigureAwait(false); + + await client.DisconnectAsync(true) + .ConfigureAwait(false); } } diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs index 54ddc41859..4e6a6b718a 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs @@ -5,29 +5,79 @@ namespace MailDev.Client; +/// +/// Provides extension methods for registering a as a +/// scoped-lifetime service in the services provided by the . +/// public static class MailDevClientServiceCollectionExtensions { - public static IHostApplicationBuilder AddMailDevClient( + private const string DefaultConfigSectionName = "Aspire:MailDev:Client"; + + /// + /// Registers 'Scoped' for sending emails. + /// + /// The to read config from and add services to. + /// A name used to retrieve the connection string from the ConnectionStrings configuration section. + /// An optional delegate that can be used for customizing options. It's invoked after the settings are read from the configuration. + public static void AddMailDevClient( this IHostApplicationBuilder builder, string connectionName, - Action? configureSettings = default) + Action? configureSettings = null) => + AddMailDevClient( + builder, + DefaultConfigSectionName, + configureSettings, + connectionName, + serviceKey: null); + + /// + /// Registers 'Scoped' for sending emails. + /// + /// The to read config from and add services to. + /// The name of the component, which is used as the of the service and also to retrieve the connection string from the ConnectionStrings configuration section. + /// An optional method that can be used for customizing options. It's invoked after the settings are read from the configuration. + public static void AddKeyedMailDevClient( + this IHostApplicationBuilder builder, + string name, + Action? configureSettings = null) + { + ArgumentNullException.ThrowIfNull(name); + + AddMailDevClient( + builder, + $"{DefaultConfigSectionName}:{name}", + configureSettings, + connectionName: name, + serviceKey: name); + } + + private static void AddMailDevClient( + this IHostApplicationBuilder builder, + string configurationSectionName, + Action? configureSettings, + string connectionName, + object? serviceKey) { ArgumentNullException.ThrowIfNull(builder); var settings = new MailDevClientSettings(); builder.Configuration - .GetSection("Aspire:MailDev") + .GetSection(configurationSectionName) .Bind(settings); configureSettings?.Invoke(settings); - var smtpUri = TryGetSmtpUri(builder.Configuration, connectionName); + var smtpUri = GetMailDevSmtpUri(builder.Configuration, connectionName); - builder.Services.AddScoped(_ => + if (serviceKey is null) + { + builder.Services.AddScoped(_ => new MailDevClient(smtpUri)); + } + else { - return new MailDevClient(smtpUri); - }); + builder.Services.AddKeyedScoped(serviceKey, (_, __) => new MailDevClient(smtpUri)); + } if (settings.DisableHealthChecks is false) { @@ -38,11 +88,9 @@ public static IHostApplicationBuilder AddMailDevClient( failureStatus: default, tags: default)); } - - return builder; } - private static Uri TryGetSmtpUri(IConfigurationManager config, string name) + private static Uri GetMailDevSmtpUri(IConfigurationManager config, string name) { ArgumentNullException.ThrowIfNull(config); ArgumentException.ThrowIfNullOrWhiteSpace(name); @@ -53,7 +101,7 @@ private static Uri TryGetSmtpUri(IConfigurationManager config, string name) $"Missing connection string for {name}", nameof(name)); } - if (Uri.TryCreate(connectionString, UriKind.RelativeOrAbsolute, out var smtpUri) || + if (Uri.TryCreate(connectionString, UriKind.Absolute, out var smtpUri) is false || smtpUri is null) { throw new ArgumentException( diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs index 2eb1b00abc..61d783f7d8 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs @@ -6,13 +6,15 @@ namespace MailDev.Client; internal sealed class MailDevHealthCheck(Uri smtpUri) : IHealthCheck { public async Task CheckHealthAsync( - HealthCheckContext context, CancellationToken cancellationToken = default) + HealthCheckContext context, + CancellationToken cancellationToken = default) { + SmtpClient client = new(); + try { - var client = new SmtpClient(); - - await client.ConnectAsync(smtpUri, cancellationToken); + await client.ConnectAsync(smtpUri, cancellationToken) + .ConfigureAwait(false); return HealthCheckResult.Healthy(); } @@ -20,5 +22,10 @@ public async Task CheckHealthAsync( { return HealthCheckResult.Unhealthy(); } + finally + { + await client.DisconnectAsync(true, cancellationToken) + .ConfigureAwait(false); + } } } diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj index 541c96d542..e6ec27ec38 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj @@ -1,5 +1,10 @@ + + + + + diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index e1c63368ed..a93de7755e 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -5,6 +5,9 @@ builder.AddServiceDefaults(); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + // Add services to the container. // builder.AddMailDevClient("maildev"); @@ -16,13 +19,15 @@ // Configure the HTTP request pipeline. +app.UseSwagger(); +app.UseSwaggerUI(); app.UseHttpsRedirection(); // app.MapPost("/subscribe", async ([FromServices] MailDevClient client, string email) => { await client.SubscribeToNewsletterAsync(email); -}); +}).WithOpenApi(); app.MapPost("/unsubscribe", async ([FromServices] MailDevClient client, string email) => { diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Properties/launchSettings.json b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Properties/launchSettings.json index c7eff401b7..aed106ab5c 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Properties/launchSettings.json +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Properties/launchSettings.json @@ -1,41 +1,25 @@ { "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:21371", - "sslPort": 44378 - } - }, "profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "launchUrl": "weatherforecast", + "launchUrl": "swagger", "applicationUrl": "http://localhost:5021", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "weatherforecast", - "applicationUrl": "https://localhost:7251;http://localhost:5021", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "weatherforecast", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7251;http://localhost:5021", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } } } } diff --git a/docs/extensibility/snippets/MailDevResource/global.json b/docs/extensibility/snippets/MailDevResource/global.json new file mode 100644 index 0000000000..5c07235fa8 --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/global.json @@ -0,0 +1,3 @@ +{ + "sdk": { "version": "8.0.303" } +} From c3e23e4e486382e8d69a08086c68806b9eeebd3c Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 12 Jul 2024 10:45:39 -0500 Subject: [PATCH 04/22] A bit of clean up --- docs/extensibility/custom-resources.md | 26 +++++++++++++++++-- .../MailDev.Client/MailDevHealthCheck.cs | 4 +-- .../Program.cs | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/docs/extensibility/custom-resources.md b/docs/extensibility/custom-resources.md index dbb1465a28..d8ee7c0faf 100644 --- a/docs/extensibility/custom-resources.md +++ b/docs/extensibility/custom-resources.md @@ -278,9 +278,31 @@ builder.Services.AddSingleton(sp => > [!TIP] > This code snippet relies on the official `SmtpClient`, however; this type is obsolete on some platforms and not recommended on others. This is used here to demonstrate a non-componentized approach to using the MailDev resource. For a more modern approach using [MailKit](https://github.com/jstedfast/MailKit), see [Create custom .NET Aspire component](custom-component.md). -To test the client, add two simple `subscribe` and `unsubscribe` GET methods to the newsletter service. Add the following code after the `MapGet` call in the _:::no-loc text="Program.cs":::_ file of the _MailDevResource.NewsletterService_ project to setup the ASP.NET Core routes: +To test the client, add two simple `subscribe` and `unsubscribe` GET methods to the newsletter service. Add the following code replacing the "weatherforecast" `MapGet` call in the _:::no-loc text="Program.cs":::_ file of the _MailDevResource.NewsletterService_ project to setup the ASP.NET Core routes: -:::code source="snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs" id="subs"::: +```csharp +app.MapPost("/subscribe", async ([FromServices] SmtpClient smtpClient, string email) => +{ + using var message = new MailMessage("newsletter@yourcompany.com", email) + { + Subject = "Welcome to our newsletter!", + Body = "Thank you for subscribing to our newsletter!" + }; + + await smtpClient.SendMailAsync(message); +}); + +app.MapPost("/unsubscribe", async ([FromServices] SmtpClient smtpClient, string email) => +{ + using var message = new MailMessage("newsletter@yourcompany.com", email) + { + Subject = "You are unsubscribed from our newsletter!", + Body = "Sorry to see you go. We hope you will come back soon!" + }; + + await smtpClient.SendMailAsync(message); +}); +``` > [!TIP] > Remember to reference the `System.Net.Mail` and `Microsoft.AspNetCore.Mvc` namespaces in _:::no-loc text="Program.cs":::_ if your code editor doesn't automatically add them. diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs index 61d783f7d8..7cc2568fc2 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs @@ -18,9 +18,9 @@ await client.ConnectAsync(smtpUri, cancellationToken) return HealthCheckResult.Healthy(); } - catch + catch (Exception ex) { - return HealthCheckResult.Unhealthy(); + return HealthCheckResult.Unhealthy(exception: ex); } finally { diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index a93de7755e..fd621b0c17 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -27,7 +27,7 @@ app.MapPost("/subscribe", async ([FromServices] MailDevClient client, string email) => { await client.SubscribeToNewsletterAsync(email); -}).WithOpenApi(); +}); app.MapPost("/unsubscribe", async ([FromServices] MailDevClient client, string email) => { From 0a4efe77bfb1a1618e887f1dd72be756d22eb17d Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 12 Jul 2024 14:06:54 -0500 Subject: [PATCH 05/22] Many fixes, and renames, moves, etc. --- docs/extensibility/custom-component.md | 2 +- .../MailDev.Client/MailDevClient.cs | 75 --------------- .../MailDevResource.NewsletterService.csproj | 2 +- .../Program.cs | 37 +++++++- .../MailDevResource/MailDevResource.sln | 2 +- .../AssemblyInfo.cs | 0 .../MailKit.Client.csproj} | 0 .../MailKit.Client/MailKitClientFactory.cs | 41 +++++++++ ...ilKitClientServiceCollectionExtensions.cs} | 91 ++++++++++++------- .../MailKitClientSettings.cs} | 26 +++++- .../MailKitHealthCheck.cs} | 15 +-- 11 files changed, 160 insertions(+), 131 deletions(-) delete mode 100644 docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs rename docs/extensibility/snippets/MailDevResource/{MailDev.Client => MailKit.Client}/AssemblyInfo.cs (100%) rename docs/extensibility/snippets/MailDevResource/{MailDev.Client/MailDev.Client.csproj => MailKit.Client/MailKit.Client.csproj} (100%) create mode 100644 docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs rename docs/extensibility/snippets/MailDevResource/{MailDev.Client/MailDevClientServiceCollectionExtensions.cs => MailKit.Client/MailKitClientServiceCollectionExtensions.cs} (51%) rename docs/extensibility/snippets/MailDevResource/{MailDev.Client/MailDevClientSettings.cs => MailKit.Client/MailKitClientSettings.cs} (52%) rename docs/extensibility/snippets/MailDevResource/{MailDev.Client/MailDevHealthCheck.cs => MailKit.Client/MailKitHealthCheck.cs} (53%) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index c783f98210..adf59ef29c 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -23,4 +23,4 @@ If you're following along, you should have already completed the steps in the [C dotnet new classlib -o MailDev.Client ``` -// TODO: Wip \ No newline at end of file +// TODO: Wip diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs deleted file mode 100644 index 2bba31ec93..0000000000 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClient.cs +++ /dev/null @@ -1,75 +0,0 @@ -using MailKit.Net.Smtp; -using MimeKit; - -namespace MailDev.Client; - -/// A representation of a MailDev client. -/// The for the SMTP server. -/// -/// Initializes a new instance of with the -/// given . -/// -public sealed class MailDevClient(Uri smtpUri) -{ - private readonly string _from = "newsletter@yourcompany.com"; - - /// - /// Subscribes the given to the newsletter. - /// - /// The email address that's subscribing. - /// - /// An asynchronous operation representing the subscribe functionality. - /// - public Task SubscribeToNewsletterAsync(string email) - { - var message = new MimeMessage - { - Subject = "Welcome to our newsletter!", - Body = new TextPart("plain") - { - Text = "Thank you for subscribing to our newsletter!" - }, - From = { new MailboxAddress("Dev Newsletter", _from) }, - To = { new MailboxAddress("Recipient Name", email) } - }; - - return SendMessageAsync(message); - } - - /// - /// Unsubscribes the given to the newsletter. - /// - /// The email address that's unsubscribing. - /// - /// An asynchronous operation representing the unsubscribe functionality. - /// - public Task UnsubscribeToNewsletterAsync(string email) - { - var message = new MimeMessage - { - Subject = "You are unsubscribed from our newsletter!", - Body = new TextPart("plain") - { - Text = "Sorry to see you go. We hope you will come back soon!" - }, - From = { new MailboxAddress("Dev Newsletter", _from) }, - To = { new MailboxAddress("Recipient Name", email) } - }; - - return SendMessageAsync(message); - } - - private async Task SendMessageAsync(MimeMessage message) - { - using var client = new SmtpClient(); - - await client.ConnectAsync(smtpUri.Host, smtpUri.Port) - .ConfigureAwait(false); - - await client.SendAsync(message) - .ConfigureAwait(false); - - await client.DisconnectAsync(true) - .ConfigureAwait(false); - } -} diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj index e6ec27ec38..90397906a8 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj @@ -6,7 +6,7 @@ - + diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index fd621b0c17..6ee70edbc9 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -1,5 +1,6 @@ -using MailDev.Client; +using MailKit.Client; using Microsoft.AspNetCore.Mvc; +using MimeKit; var builder = WebApplication.CreateBuilder(args); @@ -24,14 +25,40 @@ app.UseHttpsRedirection(); // -app.MapPost("/subscribe", async ([FromServices] MailDevClient client, string email) => +app.MapPost("/subscribe", async ([FromServices] MailKitClientFactory factory, string email) => { - await client.SubscribeToNewsletterAsync(email); + var client = await factory.GetSmtpClientAsync(); + + var message = new MimeMessage + { + Subject = "Welcome to our newsletter!", + Body = new TextPart("plain") + { + Text = "Thank you for subscribing to our newsletter!" + }, + From = { new MailboxAddress("Dev Newsletter", "newsletter@yourcompany.com") }, + To = { new MailboxAddress("Recipient Name", email) } + }; + + await client.SendAsync(message); }); -app.MapPost("/unsubscribe", async ([FromServices] MailDevClient client, string email) => +app.MapPost("/unsubscribe", async ([FromServices] MailKitClientFactory factory, string email) => { - await client.UnsubscribeToNewsletterAsync(email); + var client = await factory.GetSmtpClientAsync(); + + var message = new MimeMessage + { + Subject = "You are unsubscribed from our newsletter!", + Body = new TextPart("plain") + { + Text = "Sorry to see you go. We hope you will come back soon!" + }, + From = { new MailboxAddress("Dev Newsletter", "newsletter@yourcompany.com") }, + To = { new MailboxAddress("Recipient Name", email) } + }; + + await client.SendAsync(message); }); // diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.sln b/docs/extensibility/snippets/MailDevResource/MailDevResource.sln index b9451af507..88c6bd3078 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.sln +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.sln @@ -11,7 +11,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MailDev.Hosting", "MailDev. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MailDevResource.NewsletterService", "MailDevResource.NewsletterService\MailDevResource.NewsletterService.csproj", "{3C023F9E-2B5D-4C48-818F-A640EDAE9E4C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MailDev.Client", "MailDev.Client\MailDev.Client.csproj", "{C9A58484-13CC-4391-9D93-88FDFA7B0DDF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MailKit.Client", "MailKit.Client\MailKit.Client.csproj", "{C9A58484-13CC-4391-9D93-88FDFA7B0DDF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/AssemblyInfo.cs similarity index 100% rename from docs/extensibility/snippets/MailDevResource/MailDev.Client/AssemblyInfo.cs rename to docs/extensibility/snippets/MailDevResource/MailKit.Client/AssemblyInfo.cs diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKit.Client.csproj similarity index 100% rename from docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDev.Client.csproj rename to docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKit.Client.csproj diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs new file mode 100644 index 0000000000..4e948b276a --- /dev/null +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -0,0 +1,41 @@ +using System.Net; +using MailKit.Net.Smtp; + +namespace MailKit.Client; + +/// +/// A factory for creating instances +/// given a (and optional ). +/// +/// The for the SMTP server +/// The optional used to authenticate to the SMTP server +public sealed class MailKitClientFactory(Uri smtpUri, ICredentials? credentials = null) +{ + /// + /// Gets an instance in the connected state + /// (and that's been authenticated if configured). + /// + /// Used to abort client creation and connection. + /// A connected (and authenticated) instance. + /// + /// Since both the connection and authentication are considered expensive operations, + /// the returned is intended to be used for the duration of a request + /// (registered as 'Scoped') and shouldn't be disposed of and disconnect shouldn't be called. + /// + public async Task GetSmtpClientAsync( + CancellationToken cancellationToken = default) + { + SmtpClient client = new(); + + await client.ConnectAsync(smtpUri, cancellationToken) + .ConfigureAwait(false); + + if (credentials is not null) + { + await client.AuthenticateAsync(credentials, cancellationToken) + .ConfigureAwait(false); + } + + return client; + } +} diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs similarity index 51% rename from docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs rename to docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index 4e6a6b718a..283fc428aa 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -1,17 +1,18 @@ -using Microsoft.Extensions.Configuration; +using MailDev.Client; +using MailKit; +using MailKit.Client; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Diagnostics.HealthChecks; -using Microsoft.Extensions.Hosting; -namespace MailDev.Client; +namespace Microsoft.Extensions.Hosting; /// -/// Provides extension methods for registering a as a +/// Provides extension methods for registering a as a /// scoped-lifetime service in the services provided by the . /// -public static class MailDevClientServiceCollectionExtensions +public static class MailKitClientServiceCollectionExtensions { - private const string DefaultConfigSectionName = "Aspire:MailDev:Client"; + private const string DefaultConfigSectionName = "Aspire:MailKit:Client"; /// /// Registers 'Scoped' for sending emails. @@ -22,7 +23,7 @@ public static class MailDevClientServiceCollectionExtensions public static void AddMailDevClient( this IHostApplicationBuilder builder, string connectionName, - Action? configureSettings = null) => + Action? configureSettings = null) => AddMailDevClient( builder, DefaultConfigSectionName, @@ -39,7 +40,7 @@ public static void AddMailDevClient( public static void AddKeyedMailDevClient( this IHostApplicationBuilder builder, string name, - Action? configureSettings = null) + Action? configureSettings = null) { ArgumentNullException.ThrowIfNull(name); @@ -54,60 +55,82 @@ public static void AddKeyedMailDevClient( private static void AddMailDevClient( this IHostApplicationBuilder builder, string configurationSectionName, - Action? configureSettings, + Action? configureSettings, string connectionName, object? serviceKey) { ArgumentNullException.ThrowIfNull(builder); - - var settings = new MailDevClientSettings(); + var settings = new MailKitClientSettings(); builder.Configuration .GetSection(configurationSectionName) .Bind(settings); + if (builder.Configuration.GetConnectionString(connectionName) is string connectionString) + { + settings.ConnectionString = connectionString; + } + configureSettings?.Invoke(settings); - var smtpUri = GetMailDevSmtpUri(builder.Configuration, connectionName); + MailKitClientFactory CreateMailKitClientFactory(IServiceProvider sp) + { + var connectionString = settings.ConnectionString; + + if (string.IsNullOrWhiteSpace(connectionString)) + { + throw new InvalidOperationException($""" + ConnectionString is missing. + It should be provided in 'ConnectionStrings:{connectionName}' + or under 'ConnectionString' key in '{DefaultConfigSectionName}' + configuration section. + """); + } + + if (Uri.TryCreate(connectionString, UriKind.Absolute, out var smtpUri) is false || + smtpUri is null) + { + throw new InvalidOperationException($""" + The 'ConnectionStrings:{connectionName}' (or 'ConnectionString' key in + '{DefaultConfigSectionName}') isn't a valid URI format. + """); + } + + return new MailKitClientFactory(smtpUri, settings.Credentials); + } if (serviceKey is null) { - builder.Services.AddScoped(_ => new MailDevClient(smtpUri)); + builder.Services.AddScoped(CreateMailKitClientFactory); } else { - builder.Services.AddKeyedScoped(serviceKey, (_, __) => new MailDevClient(smtpUri)); + builder.Services.AddKeyedScoped(serviceKey, (sp, _) => CreateMailKitClientFactory(sp)); } if (settings.DisableHealthChecks is false) { builder.Services.AddHealthChecks() - .Add(new HealthCheckRegistration( - "Aspire.HealthChecks.MailDev", - _ => new MailDevHealthCheck(smtpUri), + .AddCheck( + name: serviceKey is null ? "MailKit" : $"MailKit_{connectionName}", failureStatus: default, - tags: default)); + tags: [ "live" ]); } - } - private static Uri GetMailDevSmtpUri(IConfigurationManager config, string name) - { - ArgumentNullException.ThrowIfNull(config); - ArgumentException.ThrowIfNullOrWhiteSpace(name); - - if (config.GetConnectionString(name) is not { } connectionString) + if (settings.DisableTracing is false) { - throw new ArgumentException( - $"Missing connection string for {name}", nameof(name)); + builder.Services.AddOpenTelemetry() + .WithTracing( + traceBuilder => traceBuilder.AddSource( + Telemetry.SmtpClient.ActivitySourceName)); } - if (Uri.TryCreate(connectionString, UriKind.Absolute, out var smtpUri) is false || - smtpUri is null) + if (settings.DisableMetrics is false) { - throw new ArgumentException( - $"Connection string isn't a URI for {name}", nameof(name)); + builder.Services.AddOpenTelemetry() + .WithMetrics( + metricsBuilder => metricsBuilder.AddMeter( + Telemetry.SmtpClient.MeterName)); } - - return smtpUri; } } diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientSettings.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs similarity index 52% rename from docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientSettings.cs rename to docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs index 75fdb95c8c..122f83bc00 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevClientSettings.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs @@ -1,10 +1,30 @@ -namespace MailDev.Client; +using System.Net; + +namespace MailDev.Client; /// -/// Provides the client configuration settings for connecting to a MailDev SMTP server. +/// Provides the client configuration settings for connecting MailKit to an SMTP server. /// -public sealed class MailDevClientSettings +public sealed class MailKitClientSettings { + /// + /// Gets or sets the SMTP server connection string. It should be represented in a + /// valid form. + /// + /// + /// The default value is . + /// + public string? ConnectionString { get; set; } + + /// + /// Gets or sets the network credentials that are optionally configurable for SMTP + /// server's that require authentication. + /// + /// + /// The default value is . + /// + public NetworkCredential? Credentials { get; set; } + /// /// Gets or sets a boolean value that indicates whether the database health check is disabled or not. /// diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs similarity index 53% rename from docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs rename to docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs index 7cc2568fc2..985984b200 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Client/MailDevHealthCheck.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs @@ -1,20 +1,18 @@ -using MailKit.Net.Smtp; +using MailKit.Client; using Microsoft.Extensions.Diagnostics.HealthChecks; namespace MailDev.Client; -internal sealed class MailDevHealthCheck(Uri smtpUri) : IHealthCheck +internal sealed class MailKitHealthCheck(MailKitClientFactory factory) : IHealthCheck { public async Task CheckHealthAsync( HealthCheckContext context, CancellationToken cancellationToken = default) { - SmtpClient client = new(); - try { - await client.ConnectAsync(smtpUri, cancellationToken) - .ConfigureAwait(false); + // The factory connects (and authenticates). + _ = await factory.GetSmtpClientAsync(cancellationToken); return HealthCheckResult.Healthy(); } @@ -22,10 +20,5 @@ await client.ConnectAsync(smtpUri, cancellationToken) { return HealthCheckResult.Unhealthy(exception: ex); } - finally - { - await client.DisconnectAsync(true, cancellationToken) - .ConfigureAwait(false); - } } } From a3022d77f342822f92766d79b4c03ee5ea199cf4 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 12 Jul 2024 14:23:31 -0500 Subject: [PATCH 06/22] A bit more clean up, fix namespaces and return interface. --- .../MailKit.Client/MailKitClientFactory.cs | 10 +++++----- .../MailKitClientServiceCollectionExtensions.cs | 10 ++++++---- .../MailKit.Client/MailKitClientSettings.cs | 2 +- .../MailKit.Client/MailKitHealthCheck.cs | 5 ++--- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs index 4e948b276a..059b593367 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -4,7 +4,7 @@ namespace MailKit.Client; /// -/// A factory for creating instances +/// A factory for creating instances /// given a (and optional ). /// /// The for the SMTP server @@ -12,17 +12,17 @@ namespace MailKit.Client; public sealed class MailKitClientFactory(Uri smtpUri, ICredentials? credentials = null) { /// - /// Gets an instance in the connected state + /// Gets an instance in the connected state /// (and that's been authenticated if configured). /// /// Used to abort client creation and connection. - /// A connected (and authenticated) instance. + /// A connected (and authenticated) instance. /// /// Since both the connection and authentication are considered expensive operations, - /// the returned is intended to be used for the duration of a request + /// the returned is intended to be used for the duration of a request /// (registered as 'Scoped') and shouldn't be disposed of and disconnect shouldn't be called. /// - public async Task GetSmtpClientAsync( + public async Task GetSmtpClientAsync( CancellationToken cancellationToken = default) { SmtpClient client = new(); diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index 283fc428aa..35ab081335 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -1,6 +1,6 @@ -using MailDev.Client; -using MailKit; +using MailKit; using MailKit.Client; +using MailKit.Net.Smtp; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -15,7 +15,8 @@ public static class MailKitClientServiceCollectionExtensions private const string DefaultConfigSectionName = "Aspire:MailKit:Client"; /// - /// Registers 'Scoped' for sending emails. + /// Registers 'Scoped' for creating + /// connected instance for sending emails. /// /// The to read config from and add services to. /// A name used to retrieve the connection string from the ConnectionStrings configuration section. @@ -32,7 +33,8 @@ public static void AddMailDevClient( serviceKey: null); /// - /// Registers 'Scoped' for sending emails. + /// Registers 'Scoped' for creating + /// connected instance for sending emails. /// /// The to read config from and add services to. /// The name of the component, which is used as the of the service and also to retrieve the connection string from the ConnectionStrings configuration section. diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs index 122f83bc00..e62100b75a 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs @@ -1,6 +1,6 @@ using System.Net; -namespace MailDev.Client; +namespace MailKit.Client; /// /// Provides the client configuration settings for connecting MailKit to an SMTP server. diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs index 985984b200..01924a130f 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs @@ -1,7 +1,6 @@ -using MailKit.Client; -using Microsoft.Extensions.Diagnostics.HealthChecks; +using Microsoft.Extensions.Diagnostics.HealthChecks; -namespace MailDev.Client; +namespace MailKit.Client; internal sealed class MailKitHealthCheck(MailKitClientFactory factory) : IHealthCheck { From eb7e51d8e1f5123afded0deec3c6e8ed0844c64e Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 15 Jul 2024 11:12:42 -0500 Subject: [PATCH 07/22] More updates --- docs/extensibility/custom-component.md | 134 +++++++++++++++++- .../Program.cs | 9 +- .../MailKit.Client/AssemblyInfo.cs | 5 - ...ailKitClientServiceCollectionExtensions.cs | 30 ++-- docs/toc.yml | 3 + 5 files changed, 148 insertions(+), 33 deletions(-) delete mode 100644 docs/extensibility/snippets/MailDevResource/MailKit.Client/AssemblyInfo.cs diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index adf59ef29c..782f859c47 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -1,13 +1,13 @@ --- title: Create custom .NET Aspire component -description: Learn how to create a custom resource for an existing containerized application. -ms.date: 07/12/2024 +description: Learn how to create a custom .NET Aspire component for an existing containerized application. +ms.date: 07/15/2024 ms.topic: how-to --- # Create custom .NET Aspire component -This article is a continution of the [Create custom resource types for .NET Aspire](custom-resources.md) article. In this article, you create a .NET Aspire component that relies on [MailKit](https://github.com/jstedfast/MailKit) to send emails and is used as a component in the Newsletter app you built. +This article is a continuation of the [Create custom resource types for .NET Aspire](custom-resources.md) article. It guides you through creating a .NET Aspire component that uses [MailKit](https://github.com/jstedfast/MailKit) to send emails. This component is then integrated into the Newsletter app you previously built. The previous example, omitted the creation of a component and instead relied on the existing .NET `SmtpClient`. It's recommended to use MailKit's `SmtpClient` over the official .NET `SmtpClient` for sending emails, as it's more modern and supports more features/protocols. ## Prerequisites @@ -15,12 +15,132 @@ If you're following along, you should have already completed the steps in the [C ## Create library for component -[.NET Aspire components](../fundamentals/components-overview.md) are delivered as NuGet packages, but in this example, it's beyond the scope of this article to publish a NuGet package. Instead, you create a class library project that contains the component and reference it as a project. +[.NET Aspire components](../fundamentals/components-overview.md) are delivered as NuGet packages, but in this example, it's beyond the scope of this article to publish a NuGet package. Instead, you create a class library project that contains the component and reference it as a project. .NET Aspire component packages are intended to wrap a client library, such as MailKit, and provide production-ready telemetry, health checks, configurability, and testability. Let's start by creating a new class library project. -1. Create a new class library project named `MailDev.Client` in the same solution as the `MailDevResource.NewsletterService` project. +1. Create a new class library project named `MailKit.Client` in the same directory as the _MailDevResource.sln_ from the previous article. ```dotnetcli - dotnet new classlib -o MailDev.Client + dotnet new classlib -o MailKit.Client ``` -// TODO: Wip +1. Add the project to the solution. + + ```dotnetcli + dotnet sln /MailDevResource.sln add MailKit.Client/MailKit.Client.csproj + ``` + +The next step is to add all the NuGet packages that the component relies on. Rather than having you add each package one-by-one from the .NET CLI, it's likely easier to simply copy and paste the following XML into the _MailKit.Client.csproj_ file. + +```xml + + + + + + + + +``` + +## Define component settings + +Whenever you're creating a .NET Aspire component, it's best to understand the client library that you're mapping to. In the case of MailKit, you need to understand the configuration settings that are required to connect to an SMTP server. But it's also important to understand if the library has support for health checks, tracing and metrics. MailKit supports tracing and metrics, through its `Telemetry.SmtpClient` class. And for health checks, those are easy enough to implement. Add the following code to the `MailKit.Client` project in a file named _MailKitClientSettings.cs_: + +:::code source="snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs"::: + +The preceding code defines the `MailKitClientSettings` class with: + +- `ConnectionString` property that represents the connection string to the SMTP server. +- `Credentials` property that represents the credentials to authenticate with the SMTP server. +- `DisableHealthChecks` property that determines whether health checks are enabled. +- `DisableTracing` property that determines whether tracing is enabled. +- `DisableMetrics` property that determines whether metrics are enabled. + +## Expose component wrapper functionality + +The goal of .NET Aspire components is to expose the underlying client library to consumers through dependency injection. In the case of MailKit and for this example, the `SmtpClient` class is what you want to expose. You're not wrapping any functionality, but rather mapping configuration settings to an `SmtpClient` class. It's common to expose both standard and keyed-service registrations for components. Standard registrations are used when there's only one instance of a service, and keyed-service registrations are used when there are multiple instances of a service. Sometimes this can be achieved by using a factory pattern. Add the following code to the `MailKit.Client` project in a file named _MailKitClientFactory.cs_: + +:::code source="snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs"::: + +The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` instance based on the configuration settings. It's responsible for returning an `ISmtpClient` implementation that's connected to a configured SMTP server and optionally authenticated. Next, you need to expose the functionality for the consumers to register this factory with the dependency injection container. Add the following code to the `MailKit.Client` project in a file named MailKitClientServiceCollectionExtensions.cs_: + +:::code source="snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs"::: + +The preceding code adds two extension methods on the `IHostApplicationBuilder` type, one for the standard registration of MailKit and another for keyed-registration of MailKit. Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a scoped-life service. The reason for registering the `MailKitClientFactory` as a scoped service is due to the fact that the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. + +The pattern for binding component settings to the builder's configuration, is to first instantiate the settings class and then bind settings to the specific section of the configuration. + +After they're bound to the existing configuration, the optional `configureSettings` delegate is invoked with the `settings` instance. This allows the consumer to further configure the settings, ensuring that manual code settings are honored over configuration settings. Next, considering whether or not the `serviceKey` value was provided, the `MailKitClientFactory` is registered with the dependency injection container as either a standard or keyed service. + +> [!IMPORTANT] +> It's intentional that the `implementationFactory` overload is called when registering services. The `CreateMailKitClientFactory` method throws when the configuration is invalid. This ensures that creation of the `MailKitClientFactory` is deferred until it's needed and it prevents the app from erroring out before logging is available. + +The registration of health checks, and telemetry are described in a bit more detail in the following sections. + +### Add health checks + +[Health checks](../fundamentals/health-checks.md) are a way to monitor the health of a component. In the case of MailKit, you can check if the connection to the SMTP server is healthy. Add the following code to the `MailKit.Client` project in a file named _MailKitHealthCheck.cs_: + +:::code source="snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs"::: + +The preceding health check implementation: + +- Implements the `IHealthCheck` interface. +- Accepts the `MailKitClientFactory` as a primary constructor parameter. +- Satisfies the `CheckHealthAsync` method by: + - Attempting to get an `ISmtpClient` instance from the `factory`. If successful, it returns `HealthCheckResult.Healthy`. + - If an exception is thrown, it returns `HealthCheckResult.Unhealthy`. + +As previously shared in the registration of the `MailKitClientFactory`, the `MailKitHealthCheck` is conditionally registered with the `IHeathChecksBuilder`: + +```csharp +if (settings.DisableHealthChecks is false) +{ + builder.Services.AddHealthChecks() + .AddCheck( + name: serviceKey is null ? "MailKit" : $"MailKit_{connectionName}", + failureStatus: default, + tags: [ "live" ]); +} +``` + +The consumer could choose to omit health checks by setting the `DisableHealthChecks` property to `true` in the configuration. This is a common pattern for components that have optional features. + +### Wire up telemetry + +As a best practice, the [MailKit client library exposes telemetry](https://github.com/jstedfast/MailKit/blob/master/Telemetry.md). .NET Aspire can take advantage of this telemetry and display it in the [.NET Aspire dashboard](../fundamentals/dashboard/overview.md). Depending on whether or not it's enabled, telemetry is wire up as shown in the following code snippet: + +```csharp +if (settings.DisableTracing is false) +{ + builder.Services.AddOpenTelemetry() + .WithTracing( + traceBuilder => traceBuilder.AddSource( + Telemetry.SmtpClient.ActivitySourceName)); +} + +if (settings.DisableMetrics is false) +{ + builder.Services.AddOpenTelemetry() + .WithMetrics( + metricsBuilder => metricsBuilder.AddMeter( + Telemetry.SmtpClient.MeterName)); +} +``` + +## Update the Newsletter service + +With the component library created, you can now update the Newsletter service to use the MailKit client. The first step is to add a reference to the `MailKit.Client` project. Add the _MailKit.Client.csproj_ project reference to the `MailDevResource.NewsletterService` project: + +```dotnetcli +dotnet add ./MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj reference MailKit.Client/MailKit.Client.csproj +``` + +The final step is to replace the existing _Program.cs_ file in the `MailDevResource.NewsletterService` project with the following code: + +:::code source="snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs"::: + +The most noteable changes in the preceding code are: + +- The replacement of the registration for the official .NET `SmtpClient` with the call to the `AddMailKitClient` extension method. +- Replacing both `/subscribe` and `/unsubscribe` map post calls to instead inject the `MailKitClientFactory` and use the `ISmtpClient` instance to send the email. diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index 6ee70edbc9..02c94ef02e 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -10,9 +10,7 @@ builder.Services.AddSwaggerGen(); // Add services to the container. -// -builder.AddMailDevClient("maildev"); -// +builder.AddMailKitClient("maildev"); var app = builder.Build(); @@ -24,8 +22,8 @@ app.UseSwaggerUI(); app.UseHttpsRedirection(); -// -app.MapPost("/subscribe", async ([FromServices] MailKitClientFactory factory, string email) => +app.MapPost("/subscribe", + async ([FromServices] MailKitClientFactory factory, string email) => { var client = await factory.GetSmtpClientAsync(); @@ -60,6 +58,5 @@ await client.SendAsync(message); }); -// app.Run(); diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/AssemblyInfo.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/AssemblyInfo.cs deleted file mode 100644 index 8e9743bb20..0000000000 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/AssemblyInfo.cs +++ /dev/null @@ -1,5 +0,0 @@ -//using MailDev.Client; - -//[assembly: ConfigurationSchema("Aspire:MailDev:Client", typeof(MailDevClientSettings))] - -//[assembly: LoggingCategories("MailDev-Client")] diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index 35ab081335..26c109c750 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -21,11 +21,11 @@ public static class MailKitClientServiceCollectionExtensions /// The to read config from and add services to. /// A name used to retrieve the connection string from the ConnectionStrings configuration section. /// An optional delegate that can be used for customizing options. It's invoked after the settings are read from the configuration. - public static void AddMailDevClient( + public static void AddMailKitClient( this IHostApplicationBuilder builder, string connectionName, Action? configureSettings = null) => - AddMailDevClient( + AddMailKitClient( builder, DefaultConfigSectionName, configureSettings, @@ -39,14 +39,14 @@ public static void AddMailDevClient( /// The to read config from and add services to. /// The name of the component, which is used as the of the service and also to retrieve the connection string from the ConnectionStrings configuration section. /// An optional method that can be used for customizing options. It's invoked after the settings are read from the configuration. - public static void AddKeyedMailDevClient( + public static void AddKeyedMailKitClient( this IHostApplicationBuilder builder, string name, Action? configureSettings = null) { ArgumentNullException.ThrowIfNull(name); - AddMailDevClient( + AddMailKitClient( builder, $"{DefaultConfigSectionName}:{name}", configureSettings, @@ -54,7 +54,7 @@ public static void AddKeyedMailDevClient( serviceKey: name); } - private static void AddMailDevClient( + private static void AddMailKitClient( this IHostApplicationBuilder builder, string configurationSectionName, Action? configureSettings, @@ -75,7 +75,16 @@ private static void AddMailDevClient( configureSettings?.Invoke(settings); - MailKitClientFactory CreateMailKitClientFactory(IServiceProvider sp) + if (serviceKey is null) + { + builder.Services.AddScoped(CreateMailKitClientFactory); + } + else + { + builder.Services.AddKeyedScoped(serviceKey, (sp, _) => CreateMailKitClientFactory(sp)); + } + + MailKitClientFactory CreateMailKitClientFactory(IServiceProvider _) { var connectionString = settings.ConnectionString; @@ -101,15 +110,6 @@ configuration section. return new MailKitClientFactory(smtpUri, settings.Credentials); } - if (serviceKey is null) - { - builder.Services.AddScoped(CreateMailKitClientFactory); - } - else - { - builder.Services.AddKeyedScoped(serviceKey, (sp, _) => CreateMailKitClientFactory(sp)); - } - if (settings.DisableHealthChecks is false) { builder.Services.AddHealthChecks() diff --git a/docs/toc.yml b/docs/toc.yml index 3edde5f837..5b81de742e 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -69,6 +69,9 @@ items: - name: Overview displayName: aspire components,components,nuget packages,packages href: fundamentals/components-overview.md + - name: Create custom components + displayName: custom components,extensibility + href: extensibility/custom-component.md - name: Tutorials items: - name: Caching using Redis components From 7b82a9d52e5cd5f4baa3daf3145be9e579e63976 Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 15 Jul 2024 11:31:09 -0500 Subject: [PATCH 08/22] A bit more updates --- docs/extensibility/custom-resources.md | 4 ++-- .../MailKit.Client/MailKitClientFactory.cs | 4 +++- .../MailKitClientServiceCollectionExtensions.cs | 14 +++++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/extensibility/custom-resources.md b/docs/extensibility/custom-resources.md index d8ee7c0faf..01e743b208 100644 --- a/docs/extensibility/custom-resources.md +++ b/docs/extensibility/custom-resources.md @@ -1,7 +1,7 @@ --- title: Create custom resource types for .NET Aspire description: Learn how to create a custom resource for an existing containerized application. -ms.date: 07/12/2024 +ms.date: 07/15/2024 ms.topic: how-to --- @@ -278,7 +278,7 @@ builder.Services.AddSingleton(sp => > [!TIP] > This code snippet relies on the official `SmtpClient`, however; this type is obsolete on some platforms and not recommended on others. This is used here to demonstrate a non-componentized approach to using the MailDev resource. For a more modern approach using [MailKit](https://github.com/jstedfast/MailKit), see [Create custom .NET Aspire component](custom-component.md). -To test the client, add two simple `subscribe` and `unsubscribe` GET methods to the newsletter service. Add the following code replacing the "weatherforecast" `MapGet` call in the _:::no-loc text="Program.cs":::_ file of the _MailDevResource.NewsletterService_ project to setup the ASP.NET Core routes: +To test the client, add two simple `subscribe` and `unsubscribe` POST methods to the newsletter service. Add the following code replacing the "weatherforecast" `MapGet` call in the _:::no-loc text="Program.cs":::_ file of the _MailDevResource.NewsletterService_ project to setup the ASP.NET Core routes: ```csharp app.MapPost("/subscribe", async ([FromServices] SmtpClient smtpClient, string email) => diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs index 059b593367..e7b4901646 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -8,7 +8,9 @@ namespace MailKit.Client; /// given a (and optional ). /// /// The for the SMTP server -/// The optional used to authenticate to the SMTP server +/// +/// The optional used to authenticate to the SMTP server +/// public sealed class MailKitClientFactory(Uri smtpUri, ICredentials? credentials = null) { /// diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index 26c109c750..ed3eaf9f94 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -36,9 +36,17 @@ public static void AddMailKitClient( /// Registers 'Scoped' for creating /// connected instance for sending emails. /// - /// The to read config from and add services to. - /// The name of the component, which is used as the of the service and also to retrieve the connection string from the ConnectionStrings configuration section. - /// An optional method that can be used for customizing options. It's invoked after the settings are read from the configuration. + /// + /// The to read config from and add services to. + /// + /// + /// The name of the component, which is used as the of the + /// service and also to retrieve the connection string from the ConnectionStrings configuration section. + /// + /// + /// An optional method that can be used for customizing options. It's invoked after the settings are + /// read from the configuration. + /// public static void AddKeyedMailKitClient( this IHostApplicationBuilder builder, string name, From 99c07c0f6110c86f3cc4b0e088156dbe567df01d Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 15 Jul 2024 12:33:11 -0500 Subject: [PATCH 09/22] Added a summary --- docs/extensibility/custom-component.md | 6 ++++++ docs/extensibility/custom-resources.md | 4 ++-- .../MailDevResource.NewsletterService/Program.cs | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index 782f859c47..b9ca6cf8df 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -144,3 +144,9 @@ The most noteable changes in the preceding code are: - The replacement of the registration for the official .NET `SmtpClient` with the call to the `AddMailKitClient` extension method. - Replacing both `/subscribe` and `/unsubscribe` map post calls to instead inject the `MailKitClientFactory` and use the `ISmtpClient` instance to send the email. + +## Summary + +In this article, you learned how to create a .NET Aspire component that uses MailKit to send emails. You also learned how to integrate this component into the Newsletter app you previously built. You learned about the core principles of .NET Aspire components, such as exposing the underlying client library to consumers through dependency injection, and how to add health checks and telemetry to the component. You also learned how to update the Newsletter service to use the MailKit client. + +Go forth and build your own .NET Aspire components! If you believe that there's enough value in the component you've built, consider publishing it as a NuGet package for others to use. Furthermore, consider submitting a pull request to the [.NET Aspire GitHub repository](https://github.com/dotnet/aspire) for consideration to be included in the official .NET Aspire components. diff --git a/docs/extensibility/custom-resources.md b/docs/extensibility/custom-resources.md index 01e743b208..8c4ac58bc0 100644 --- a/docs/extensibility/custom-resources.md +++ b/docs/extensibility/custom-resources.md @@ -281,7 +281,7 @@ builder.Services.AddSingleton(sp => To test the client, add two simple `subscribe` and `unsubscribe` POST methods to the newsletter service. Add the following code replacing the "weatherforecast" `MapGet` call in the _:::no-loc text="Program.cs":::_ file of the _MailDevResource.NewsletterService_ project to setup the ASP.NET Core routes: ```csharp -app.MapPost("/subscribe", async ([FromServices] SmtpClient smtpClient, string email) => +app.MapPost("/subscribe", async (SmtpClient smtpClient, string email) => { using var message = new MailMessage("newsletter@yourcompany.com", email) { @@ -292,7 +292,7 @@ app.MapPost("/subscribe", async ([FromServices] SmtpClient smtpClient, string em await smtpClient.SendMailAsync(message); }); -app.MapPost("/unsubscribe", async ([FromServices] SmtpClient smtpClient, string email) => +app.MapPost("/unsubscribe", async (SmtpClient smtpClient, string email) => { using var message = new MailMessage("newsletter@yourcompany.com", email) { diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index 02c94ef02e..bcdcd09201 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -23,7 +23,7 @@ app.UseHttpsRedirection(); app.MapPost("/subscribe", - async ([FromServices] MailKitClientFactory factory, string email) => + async (MailKitClientFactory factory, string email) => { var client = await factory.GetSmtpClientAsync(); @@ -41,7 +41,8 @@ await client.SendAsync(message); }); -app.MapPost("/unsubscribe", async ([FromServices] MailKitClientFactory factory, string email) => +app.MapPost("/unsubscribe", + async (MailKitClientFactory factory, string email) => { var client = await factory.GetSmtpClientAsync(); From 5586b082cd63e9e361ed02909b18215f18bb75ea Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 15 Jul 2024 14:03:54 -0500 Subject: [PATCH 10/22] More clean up and fixes --- docs/extensibility/custom-component.md | 13 ++++++-- .../Program.cs | 33 ++++++++----------- .../MailKit.Client/MailKitClientFactory.cs | 21 ++++++++---- ...ailKitClientServiceCollectionExtensions.cs | 29 +++++++++++----- 4 files changed, 58 insertions(+), 38 deletions(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index b9ca6cf8df..e28e8f48ac 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -13,6 +13,9 @@ This article is a continuation of the [Create custom resource types for .NET Asp If you're following along, you should have already completed the steps in the [Create custom resource types for .NET Aspire](custom-resources.md) article. +> [!TIP] +> This article is inspired by existing .NET Aspire components, and based on the teams official guidance. There are places where said guidance varies, and it's important to understand the reasoning behind the differences. + ## Create library for component [.NET Aspire components](../fundamentals/components-overview.md) are delivered as NuGet packages, but in this example, it's beyond the scope of this article to publish a NuGet package. Instead, you create a class library project that contains the component and reference it as a project. .NET Aspire component packages are intended to wrap a client library, such as MailKit, and provide production-ready telemetry, health checks, configurability, and testability. Let's start by creating a new class library project. @@ -66,7 +69,9 @@ The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` inst :::code source="snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs"::: -The preceding code adds two extension methods on the `IHostApplicationBuilder` type, one for the standard registration of MailKit and another for keyed-registration of MailKit. Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a scoped-life service. The reason for registering the `MailKitClientFactory` as a scoped service is due to the fact that the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. +The preceding code adds two extension methods on the `IHostApplicationBuilder` type, one for the standard registration of MailKit and another for keyed-registration of MailKit. Extension methods for .NET Aspire components should extend the `IHostApplicationBuilder` type and following the `Add` naming convention where the `` is the thing you're adding. + +Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a scoped-life service. The reason for registering the `MailKitClientFactory` as a scoped service is due to the fact that the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. The pattern for binding component settings to the builder's configuration, is to first instantiate the settings class and then bind settings to the specific section of the configuration. @@ -100,7 +105,7 @@ if (settings.DisableHealthChecks is false) .AddCheck( name: serviceKey is null ? "MailKit" : $"MailKit_{connectionName}", failureStatus: default, - tags: [ "live" ]); + tags: []); } ``` @@ -121,6 +126,8 @@ if (settings.DisableTracing is false) if (settings.DisableMetrics is false) { + Telemetry.SmtpClient.Configure(); + builder.Services.AddOpenTelemetry() .WithMetrics( metricsBuilder => metricsBuilder.AddMeter( @@ -149,4 +156,4 @@ The most noteable changes in the preceding code are: In this article, you learned how to create a .NET Aspire component that uses MailKit to send emails. You also learned how to integrate this component into the Newsletter app you previously built. You learned about the core principles of .NET Aspire components, such as exposing the underlying client library to consumers through dependency injection, and how to add health checks and telemetry to the component. You also learned how to update the Newsletter service to use the MailKit client. -Go forth and build your own .NET Aspire components! If you believe that there's enough value in the component you've built, consider publishing it as a NuGet package for others to use. Furthermore, consider submitting a pull request to the [.NET Aspire GitHub repository](https://github.com/dotnet/aspire) for consideration to be included in the official .NET Aspire components. +Go forth and build your own .NET Aspire components! If you believe that there's enough community value in the component you've built, consider publishing it as a [NuGet package](/dotnet/standard/library-guidance/nuget) for others to use. Furthermore, consider submitting a pull request to the [.NET Aspire GitHub repository](https://github.com/dotnet/aspire) for consideration to be included in the official .NET Aspire components. diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index bcdcd09201..cd53afb1dd 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -1,5 +1,6 @@ -using MailKit.Client; -using Microsoft.AspNetCore.Mvc; +using System.Net.Mail; +using MailKit.Client; +using MailKit.Net.Smtp; using MimeKit; var builder = WebApplication.CreateBuilder(args); @@ -25,39 +26,31 @@ app.MapPost("/subscribe", async (MailKitClientFactory factory, string email) => { - var client = await factory.GetSmtpClientAsync(); + // Can be disposed of since we're only sending a single message. + using ISmtpClient client = await factory.GetSmtpClientAsync(); - var message = new MimeMessage + using var message = new MailMessage("newsletter@yourcompany.com", email) { Subject = "Welcome to our newsletter!", - Body = new TextPart("plain") - { - Text = "Thank you for subscribing to our newsletter!" - }, - From = { new MailboxAddress("Dev Newsletter", "newsletter@yourcompany.com") }, - To = { new MailboxAddress("Recipient Name", email) } + Body = "Thank you for subscribing to our newsletter!" }; - await client.SendAsync(message); + await client.SendAsync(MimeMessage.CreateFromMailMessage(message)); }); app.MapPost("/unsubscribe", async (MailKitClientFactory factory, string email) => { - var client = await factory.GetSmtpClientAsync(); + // Can be disposed of since we're only sending a single message. + using ISmtpClient client = await factory.GetSmtpClientAsync(); - var message = new MimeMessage + using var message = new MailMessage("newsletter@yourcompany.com", email) { Subject = "You are unsubscribed from our newsletter!", - Body = new TextPart("plain") - { - Text = "Sorry to see you go. We hope you will come back soon!" - }, - From = { new MailboxAddress("Dev Newsletter", "newsletter@yourcompany.com") }, - To = { new MailboxAddress("Recipient Name", email) } + Body = "Sorry to see you go. We hope you will come back soon!" }; - await client.SendAsync(message); + await client.SendAsync(MimeMessage.CreateFromMailMessage(message)); }); app.Run(); diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs index e7b4901646..7f8be060de 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -1,4 +1,5 @@ -using System.Net; +using System.Diagnostics.Metrics; +using System.Net; using MailKit.Net.Smtp; namespace MailKit.Client; @@ -11,8 +12,12 @@ namespace MailKit.Client; /// /// The optional used to authenticate to the SMTP server /// -public sealed class MailKitClientFactory(Uri smtpUri, ICredentials? credentials = null) +public sealed class MailKitClientFactory( + Uri smtpUri, + ICredentials? credentials = null) : IDisposable { + private SmtpClient? _client; + /// /// Gets an instance in the connected state /// (and that's been authenticated if configured). @@ -22,22 +27,24 @@ public sealed class MailKitClientFactory(Uri smtpUri, ICredentials? credentials /// /// Since both the connection and authentication are considered expensive operations, /// the returned is intended to be used for the duration of a request - /// (registered as 'Scoped') and shouldn't be disposed of and disconnect shouldn't be called. + /// (registered as 'Scoped') and is automatically disposed of. /// public async Task GetSmtpClientAsync( CancellationToken cancellationToken = default) { - SmtpClient client = new(); + _client = new SmtpClient(); - await client.ConnectAsync(smtpUri, cancellationToken) + await _client.ConnectAsync(smtpUri, cancellationToken) .ConfigureAwait(false); if (credentials is not null) { - await client.AuthenticateAsync(credentials, cancellationToken) + await _client.AuthenticateAsync(credentials, cancellationToken) .ConfigureAwait(false); } - return client; + return _client; } + + public void Dispose() => _client?.Dispose(); } diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index ed3eaf9f94..c2157602a8 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -1,4 +1,5 @@ -using MailKit; +using System.Diagnostics.Metrics; +using MailKit; using MailKit.Client; using MailKit.Net.Smtp; using Microsoft.Extensions.Configuration; @@ -12,15 +13,22 @@ namespace Microsoft.Extensions.Hosting; /// public static class MailKitClientServiceCollectionExtensions { - private const string DefaultConfigSectionName = "Aspire:MailKit:Client"; + private const string DefaultConfigSectionName = "MailKit:Client"; /// /// Registers 'Scoped' for creating /// connected instance for sending emails. /// - /// The to read config from and add services to. - /// A name used to retrieve the connection string from the ConnectionStrings configuration section. - /// An optional delegate that can be used for customizing options. It's invoked after the settings are read from the configuration. + /// + /// The to read config from and add services to. + /// + /// + /// A name used to retrieve the connection string from the ConnectionStrings configuration section. + /// + /// + /// An optional delegate that can be used for customizing options. + /// It's invoked after the settings are read from the configuration. + /// public static void AddMailKitClient( this IHostApplicationBuilder builder, string connectionName, @@ -92,7 +100,7 @@ private static void AddMailKitClient( builder.Services.AddKeyedScoped(serviceKey, (sp, _) => CreateMailKitClientFactory(sp)); } - MailKitClientFactory CreateMailKitClientFactory(IServiceProvider _) + MailKitClientFactory CreateMailKitClientFactory(IServiceProvider sp) { var connectionString = settings.ConnectionString; @@ -115,7 +123,10 @@ configuration section. """); } - return new MailKitClientFactory(smtpUri, settings.Credentials); + return new MailKitClientFactory( + sp.GetRequiredService(), + smtpUri, + settings.Credentials); } if (settings.DisableHealthChecks is false) @@ -124,7 +135,7 @@ configuration section. .AddCheck( name: serviceKey is null ? "MailKit" : $"MailKit_{connectionName}", failureStatus: default, - tags: [ "live" ]); + tags: []); } if (settings.DisableTracing is false) @@ -137,6 +148,8 @@ configuration section. if (settings.DisableMetrics is false) { + Telemetry.SmtpClient.Configure(); + builder.Services.AddOpenTelemetry() .WithMetrics( metricsBuilder => metricsBuilder.AddMeter( From 237a9eeecc13943c3ba8f37535abdff2f1fd7f1b Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 15 Jul 2024 14:27:52 -0500 Subject: [PATCH 11/22] More updates --- docs/extensibility/custom-component.md | 2 +- .../MailKit.Client/MailKitClientServiceCollectionExtensions.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index e28e8f48ac..a07222bdc8 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -109,7 +109,7 @@ if (settings.DisableHealthChecks is false) } ``` -The consumer could choose to omit health checks by setting the `DisableHealthChecks` property to `true` in the configuration. This is a common pattern for components that have optional features. +The consumer could choose to omit health checks by setting the `DisableHealthChecks` property to `true` in the configuration. This is a common pattern for components that have optional features. For more information on health checks and a working sample that includes a user interface, see [.NET Aspire ASP.NET Core HealthChecksUI sample](/samples/dotnet/aspire-samples/aspire-health-checks-ui/). ### Wire up telemetry diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index c2157602a8..5988d03a34 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -124,7 +124,6 @@ configuration section. } return new MailKitClientFactory( - sp.GetRequiredService(), smtpUri, settings.Credentials); } From 47a8d169d91c830e771c500e0aaa3f70332f2990 Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 15 Jul 2024 15:14:30 -0500 Subject: [PATCH 12/22] Add perma link and remove usings --- docs/extensibility/custom-component.md | 2 +- .../MailDevResource/MailKit.Client/MailKitClientFactory.cs | 3 +-- .../MailKit.Client/MailKitClientServiceCollectionExtensions.cs | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index a07222bdc8..986ac6ac06 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -14,7 +14,7 @@ This article is a continuation of the [Create custom resource types for .NET Asp If you're following along, you should have already completed the steps in the [Create custom resource types for .NET Aspire](custom-resources.md) article. > [!TIP] -> This article is inspired by existing .NET Aspire components, and based on the teams official guidance. There are places where said guidance varies, and it's important to understand the reasoning behind the differences. +> This article is inspired by existing .NET Aspire components, and based on the teams official guidance. There are places where said guidance varies, and it's important to understand the reasoning behind the differences. For more information, see [.NET Aspire component requirements](https://github.com/dotnet/aspire/blob/f38b6cba86942ad1c45fc04fe7170f0fd4ba7c0b/src/Components/Aspire_Components_Progress.md#net-aspire-component-requirements). ## Create library for component diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs index 7f8be060de..f8d467010b 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -1,5 +1,4 @@ -using System.Diagnostics.Metrics; -using System.Net; +using System.Net; using MailKit.Net.Smtp; namespace MailKit.Client; diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index 5988d03a34..e636854ba6 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -1,5 +1,4 @@ -using System.Diagnostics.Metrics; -using MailKit; +using MailKit; using MailKit.Client; using MailKit.Net.Smtp; using Microsoft.Extensions.Configuration; From 19744060d0780543f7206c8943b6fe6140458865 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 07:58:25 -0500 Subject: [PATCH 13/22] Edit pass --- docs/extensibility/custom-component.md | 31 +++++++++++++------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index 986ac6ac06..90ec30dcc2 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -7,11 +7,11 @@ ms.topic: how-to # Create custom .NET Aspire component -This article is a continuation of the [Create custom resource types for .NET Aspire](custom-resources.md) article. It guides you through creating a .NET Aspire component that uses [MailKit](https://github.com/jstedfast/MailKit) to send emails. This component is then integrated into the Newsletter app you previously built. The previous example, omitted the creation of a component and instead relied on the existing .NET `SmtpClient`. It's recommended to use MailKit's `SmtpClient` over the official .NET `SmtpClient` for sending emails, as it's more modern and supports more features/protocols. +This article is a continuation of the [Create custom resource types for .NET Aspire](custom-resources.md) article. It guides you through creating a .NET Aspire component that uses [MailKit](https://github.com/jstedfast/MailKit) to send emails. This component is then integrated into the Newsletter app you previously built. The previous example, omitted the creation of a component and instead relied on the existing .NET `SmtpClient`. It's best to use MailKit's `SmtpClient` over the official .NET `SmtpClient` for sending emails, as it's more modern and supports more features/protocols. For more information, see [.NET SmtpClient: Remarks](/dotnet/api/system.net.mail.smtpclient#remarks). ## Prerequisites -If you're following along, you should have already completed the steps in the [Create custom resource types for .NET Aspire](custom-resources.md) article. +If you're following along, you should have a Newsletter app from the steps in the [Create custom resource types for .NET Aspire](custom-resources.md) article. > [!TIP] > This article is inspired by existing .NET Aspire components, and based on the teams official guidance. There are places where said guidance varies, and it's important to understand the reasoning behind the differences. For more information, see [.NET Aspire component requirements](https://github.com/dotnet/aspire/blob/f38b6cba86942ad1c45fc04fe7170f0fd4ba7c0b/src/Components/Aspire_Components_Progress.md#net-aspire-component-requirements). @@ -32,7 +32,7 @@ If you're following along, you should have already completed the steps in the [C dotnet sln /MailDevResource.sln add MailKit.Client/MailKit.Client.csproj ``` -The next step is to add all the NuGet packages that the component relies on. Rather than having you add each package one-by-one from the .NET CLI, it's likely easier to simply copy and paste the following XML into the _MailKit.Client.csproj_ file. +The next step is to add all the NuGet packages that the component relies on. Rather than having you add each package one-by-one from the .NET CLI, it's likely easier to copy and paste the following XML into the _MailKit.Client.csproj_ file. ```xml @@ -47,7 +47,7 @@ The next step is to add all the NuGet packages that the component relies on. Rat ## Define component settings -Whenever you're creating a .NET Aspire component, it's best to understand the client library that you're mapping to. In the case of MailKit, you need to understand the configuration settings that are required to connect to an SMTP server. But it's also important to understand if the library has support for health checks, tracing and metrics. MailKit supports tracing and metrics, through its `Telemetry.SmtpClient` class. And for health checks, those are easy enough to implement. Add the following code to the `MailKit.Client` project in a file named _MailKitClientSettings.cs_: +Whenever you're creating a .NET Aspire component, it's best to understand the client library that you're mapping to. With MailKit, you need to understand the configuration settings that are required to connect to a Simple Mail Transfer Protocol (SMTP) server. But it's also important to understand if the library has support for _health checks_, _tracing_ and _metrics_. MailKit supports _tracing_ and _metrics_, through its [`Telemetry.SmtpClient` class](https://github.com/jstedfast/MailKit/blob/master/MailKit/Telemetry.cs#L112-L189). When adding _health checks_, you should use any established or existing health checks where possible. Otherwise, you might consider implementing your own in the component. Add the following code to the `MailKit.Client` project in a file named _MailKitClientSettings.cs_: :::code source="snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs"::: @@ -61,21 +61,22 @@ The preceding code defines the `MailKitClientSettings` class with: ## Expose component wrapper functionality -The goal of .NET Aspire components is to expose the underlying client library to consumers through dependency injection. In the case of MailKit and for this example, the `SmtpClient` class is what you want to expose. You're not wrapping any functionality, but rather mapping configuration settings to an `SmtpClient` class. It's common to expose both standard and keyed-service registrations for components. Standard registrations are used when there's only one instance of a service, and keyed-service registrations are used when there are multiple instances of a service. Sometimes this can be achieved by using a factory pattern. Add the following code to the `MailKit.Client` project in a file named _MailKitClientFactory.cs_: +The goal of .NET Aspire components is to expose the underlying client library to consumers through dependency injection. With MailKit and for this example, the `SmtpClient` class is what you want to expose. You're not wrapping any functionality, but rather mapping configuration settings to an `SmtpClient` class. It's common to expose both standard and keyed-service registrations for components. Standard registrations are used when there's only one instance of a service, and keyed-service registrations are used when there are multiple instances of a service. Sometimes, to achieve multiple registrations of the same type you use a factory pattern. Add the following code to the `MailKit.Client` project in a file named _MailKitClientFactory.cs_: :::code source="snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs"::: -The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` instance based on the configuration settings. It's responsible for returning an `ISmtpClient` implementation that's connected to a configured SMTP server and optionally authenticated. Next, you need to expose the functionality for the consumers to register this factory with the dependency injection container. Add the following code to the `MailKit.Client` project in a file named MailKitClientServiceCollectionExtensions.cs_: +The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` instance based on the configuration settings. It's responsible for returning an `ISmtpClient` implementation that has an active connection to a configured SMTP server and optionally authenticated. Next, you need to expose the functionality for the consumers to register this factory with the dependency injection container. Add the following code to the `MailKit.Client` project in a file named MailKitClientServiceCollectionExtensions.cs_: :::code source="snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs"::: -The preceding code adds two extension methods on the `IHostApplicationBuilder` type, one for the standard registration of MailKit and another for keyed-registration of MailKit. Extension methods for .NET Aspire components should extend the `IHostApplicationBuilder` type and following the `Add` naming convention where the `` is the thing you're adding. +The preceding code adds two extension methods on the `IHostApplicationBuilder` type, one for the standard registration of MailKit and another for keyed-registration of MailKit. -Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a scoped-life service. The reason for registering the `MailKitClientFactory` as a scoped service is due to the fact that the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. +> [!TIP] +> Extension methods for .NET Aspire components should extend the `IHostApplicationBuilder` type and follow the `Add` naming convention where the `` is the type or functionality you're adding. -The pattern for binding component settings to the builder's configuration, is to first instantiate the settings class and then bind settings to the specific section of the configuration. +Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a [scoped service](/dotnet/core/extensions/dependency-injection#scoped). The reason for registering the `MailKitClientFactory` as a scoped service is because the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. -After they're bound to the existing configuration, the optional `configureSettings` delegate is invoked with the `settings` instance. This allows the consumer to further configure the settings, ensuring that manual code settings are honored over configuration settings. Next, considering whether or not the `serviceKey` value was provided, the `MailKitClientFactory` is registered with the dependency injection container as either a standard or keyed service. +To invoke the delegate after configuration binding, the consumer should instantiate the settings class and then bind the settings to the specific section of the configuration. This allows the consumer to further configure the settings, ensuring that manual code settings are honored over configuration settings. After that, depending on whether the `serviceKey` value was provided, the `MailKitClientFactory` should be registered with the dependency injection container as either a standard or keyed service. > [!IMPORTANT] > It's intentional that the `implementationFactory` overload is called when registering services. The `CreateMailKitClientFactory` method throws when the configuration is invalid. This ensures that creation of the `MailKitClientFactory` is deferred until it's needed and it prevents the app from erroring out before logging is available. @@ -84,7 +85,7 @@ The registration of health checks, and telemetry are described in a bit more det ### Add health checks -[Health checks](../fundamentals/health-checks.md) are a way to monitor the health of a component. In the case of MailKit, you can check if the connection to the SMTP server is healthy. Add the following code to the `MailKit.Client` project in a file named _MailKitHealthCheck.cs_: +[Health checks](../fundamentals/health-checks.md) are a way to monitor the health of a component. With MailKit, you can check if the connection to the SMTP server is healthy. Add the following code to the `MailKit.Client` project in a file named _MailKitHealthCheck.cs_: :::code source="snippets/MailDevResource/MailKit.Client/MailKitHealthCheck.cs"::: @@ -109,11 +110,11 @@ if (settings.DisableHealthChecks is false) } ``` -The consumer could choose to omit health checks by setting the `DisableHealthChecks` property to `true` in the configuration. This is a common pattern for components that have optional features. For more information on health checks and a working sample that includes a user interface, see [.NET Aspire ASP.NET Core HealthChecksUI sample](/samples/dotnet/aspire-samples/aspire-health-checks-ui/). +The consumer could choose to omit health checks by setting the `DisableHealthChecks` property to `true` in the configuration. A common pattern for components is to have optional features and .NET Aspire components strongly encourages these types of configurations. For more information on health checks and a working sample that includes a user interface, see [.NET Aspire ASP.NET Core HealthChecksUI sample](/samples/dotnet/aspire-samples/aspire-health-checks-ui/). ### Wire up telemetry -As a best practice, the [MailKit client library exposes telemetry](https://github.com/jstedfast/MailKit/blob/master/Telemetry.md). .NET Aspire can take advantage of this telemetry and display it in the [.NET Aspire dashboard](../fundamentals/dashboard/overview.md). Depending on whether or not it's enabled, telemetry is wire up as shown in the following code snippet: +As a best practice, the [MailKit client library exposes telemetry](https://github.com/jstedfast/MailKit/blob/master/Telemetry.md). .NET Aspire can take advantage of this telemetry and display it in the [.NET Aspire dashboard](../fundamentals/dashboard/overview.md). Depending on whether or not tracing and metrics are enabled, telemetry is wired up as shown in the following code snippet: ```csharp if (settings.DisableTracing is false) @@ -147,7 +148,7 @@ The final step is to replace the existing _Program.cs_ file in the `MailDevResou :::code source="snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs"::: -The most noteable changes in the preceding code are: +The most notable changes in the preceding code are: - The replacement of the registration for the official .NET `SmtpClient` with the call to the `AddMailKitClient` extension method. - Replacing both `/subscribe` and `/unsubscribe` map post calls to instead inject the `MailKitClientFactory` and use the `ISmtpClient` instance to send the email. @@ -156,4 +157,4 @@ The most noteable changes in the preceding code are: In this article, you learned how to create a .NET Aspire component that uses MailKit to send emails. You also learned how to integrate this component into the Newsletter app you previously built. You learned about the core principles of .NET Aspire components, such as exposing the underlying client library to consumers through dependency injection, and how to add health checks and telemetry to the component. You also learned how to update the Newsletter service to use the MailKit client. -Go forth and build your own .NET Aspire components! If you believe that there's enough community value in the component you've built, consider publishing it as a [NuGet package](/dotnet/standard/library-guidance/nuget) for others to use. Furthermore, consider submitting a pull request to the [.NET Aspire GitHub repository](https://github.com/dotnet/aspire) for consideration to be included in the official .NET Aspire components. +Go forth and build your own .NET Aspire components. If you believe that there's enough community value in the component you're building, consider publishing it as a [NuGet package](/dotnet/standard/library-guidance/nuget) for others to use. Furthermore, consider submitting a pull request to the [.NET Aspire GitHub repository](https://github.com/dotnet/aspire) for consideration to be included in the official .NET Aspire components. From 83524af2092b63a05cc9bc36bf04d92ee8e0eb42 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 07:59:53 -0500 Subject: [PATCH 14/22] global.json use latestPatch --- docs/extensibility/snippets/MailDevResource/global.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/extensibility/snippets/MailDevResource/global.json b/docs/extensibility/snippets/MailDevResource/global.json index 5c07235fa8..a1aaefd486 100644 --- a/docs/extensibility/snippets/MailDevResource/global.json +++ b/docs/extensibility/snippets/MailDevResource/global.json @@ -1,3 +1,6 @@ { - "sdk": { "version": "8.0.303" } + "sdk": { + "version": "8.0.303", + "rollForward": "latestPatch" + } } From b132b2c29bc41798f380455eb6bb136eb42a4564 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 10:37:33 -0500 Subject: [PATCH 15/22] A bit more clean up and refactoring --- docs/extensibility/custom-component.md | 17 ++++++-- .../MailKit.Client/MailKitClientFactory.cs | 12 +++--- ...ailKitClientServiceCollectionExtensions.cs | 41 ++++--------------- .../MailKit.Client/MailKitClientSettings.cs | 30 ++++++++++++-- 4 files changed, 56 insertions(+), 44 deletions(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index 90ec30dcc2..95cca67ce6 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -53,19 +53,28 @@ Whenever you're creating a .NET Aspire component, it's best to understand the cl The preceding code defines the `MailKitClientSettings` class with: -- `ConnectionString` property that represents the connection string to the SMTP server. +- `Endpoint` property that represents the connection string to the SMTP server. - `Credentials` property that represents the credentials to authenticate with the SMTP server. - `DisableHealthChecks` property that determines whether health checks are enabled. - `DisableTracing` property that determines whether tracing is enabled. - `DisableMetrics` property that determines whether metrics are enabled. +### Parse connection string logic + +The settings class also contains a `ParseConnectionString` method that parses the connection string into a valid `Uri`. The configuration is expected to be provided in the following format: + +- `ConnectionStrings:`: The connection string to the SMTP server. +- `MailKit:Client:Endpoint`: The connection string to the SMTP server. + +If neither of these values are provided, an exception is thrown. Likewise, if there's a value but it's not a valid URI, an exception is thrown. + ## Expose component wrapper functionality The goal of .NET Aspire components is to expose the underlying client library to consumers through dependency injection. With MailKit and for this example, the `SmtpClient` class is what you want to expose. You're not wrapping any functionality, but rather mapping configuration settings to an `SmtpClient` class. It's common to expose both standard and keyed-service registrations for components. Standard registrations are used when there's only one instance of a service, and keyed-service registrations are used when there are multiple instances of a service. Sometimes, to achieve multiple registrations of the same type you use a factory pattern. Add the following code to the `MailKit.Client` project in a file named _MailKitClientFactory.cs_: :::code source="snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs"::: -The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` instance based on the configuration settings. It's responsible for returning an `ISmtpClient` implementation that has an active connection to a configured SMTP server and optionally authenticated. Next, you need to expose the functionality for the consumers to register this factory with the dependency injection container. Add the following code to the `MailKit.Client` project in a file named MailKitClientServiceCollectionExtensions.cs_: +The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` instance based on the configuration settings. It's responsible for returning an `ISmtpClient` implementation that has an active connection to a configured SMTP server and optionally authenticated. Next, you need to expose the functionality for the consumers to register this factory with the dependency injection container. Add the following code to the `MailKit.Client` project in a file named _MailKitClientServiceCollectionExtensions.cs_: :::code source="snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs"::: @@ -74,7 +83,9 @@ The preceding code adds two extension methods on the `IHostApplicationBuilder` t > [!TIP] > Extension methods for .NET Aspire components should extend the `IHostApplicationBuilder` type and follow the `Add` naming convention where the `` is the type or functionality you're adding. -Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a [scoped service](/dotnet/core/extensions/dependency-injection#scoped). The reason for registering the `MailKitClientFactory` as a scoped service is because the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. +Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a [scoped service](/dotnet/core/extensions/dependency-injection#scoped). The reason for registering the `MailKitClientFactory` as a scoped service is because the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. The factory holds on to the instance of the `SmtpClient` that it creates and disposes of it. + +### Configuration binding To invoke the delegate after configuration binding, the consumer should instantiate the settings class and then bind the settings to the specific section of the configuration. This allows the consumer to further configure the settings, ensuring that manual code settings are honored over configuration settings. After that, depending on whether the `serviceKey` value was provided, the `MailKitClientFactory` should be registered with the dependency injection container as either a standard or keyed service. diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs index f8d467010b..e3cd864f46 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -7,12 +7,14 @@ namespace MailKit.Client; /// A factory for creating instances /// given a (and optional ). /// -/// The for the SMTP server +/// +/// The settings for the SMTP server +/// /// /// The optional used to authenticate to the SMTP server /// public sealed class MailKitClientFactory( - Uri smtpUri, + MailKitClientSettings settings, ICredentials? credentials = null) : IDisposable { private SmtpClient? _client; @@ -33,13 +35,13 @@ public async Task GetSmtpClientAsync( { _client = new SmtpClient(); - await _client.ConnectAsync(smtpUri, cancellationToken) - .ConfigureAwait(false); + await _client.ConnectAsync(settings.Endpoint, cancellationToken) + .ConfigureAwait(false); if (credentials is not null) { await _client.AuthenticateAsync(credentials, cancellationToken) - .ConfigureAwait(false); + .ConfigureAwait(false); } return _client; diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index e636854ba6..e5c5e83bbc 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -12,8 +12,6 @@ namespace Microsoft.Extensions.Hosting; /// public static class MailKitClientServiceCollectionExtensions { - private const string DefaultConfigSectionName = "MailKit:Client"; - /// /// Registers 'Scoped' for creating /// connected instance for sending emails. @@ -34,7 +32,7 @@ public static void AddMailKitClient( Action? configureSettings = null) => AddMailKitClient( builder, - DefaultConfigSectionName, + MailKitClientSettings.DefaultConfigSectionName, configureSettings, connectionName, serviceKey: null); @@ -63,7 +61,7 @@ public static void AddKeyedMailKitClient( AddMailKitClient( builder, - $"{DefaultConfigSectionName}:{name}", + $"{MailKitClientSettings.DefaultConfigSectionName}:{name}", configureSettings, connectionName: name, serviceKey: name); @@ -77,16 +75,16 @@ private static void AddMailKitClient( object? serviceKey) { ArgumentNullException.ThrowIfNull(builder); + var settings = new MailKitClientSettings(); builder.Configuration .GetSection(configurationSectionName) .Bind(settings); - if (builder.Configuration.GetConnectionString(connectionName) is string connectionString) - { - settings.ConnectionString = connectionString; - } + settings.ParseConnectionString( + builder.Configuration.GetConnectionString(connectionName) ?? + builder.Configuration[$"{MailKitClientSettings.DefaultConfigSectionName}:Endpoint"]); configureSettings?.Invoke(settings); @@ -99,32 +97,9 @@ private static void AddMailKitClient( builder.Services.AddKeyedScoped(serviceKey, (sp, _) => CreateMailKitClientFactory(sp)); } - MailKitClientFactory CreateMailKitClientFactory(IServiceProvider sp) + MailKitClientFactory CreateMailKitClientFactory(IServiceProvider _) { - var connectionString = settings.ConnectionString; - - if (string.IsNullOrWhiteSpace(connectionString)) - { - throw new InvalidOperationException($""" - ConnectionString is missing. - It should be provided in 'ConnectionStrings:{connectionName}' - or under 'ConnectionString' key in '{DefaultConfigSectionName}' - configuration section. - """); - } - - if (Uri.TryCreate(connectionString, UriKind.Absolute, out var smtpUri) is false || - smtpUri is null) - { - throw new InvalidOperationException($""" - The 'ConnectionStrings:{connectionName}' (or 'ConnectionString' key in - '{DefaultConfigSectionName}') isn't a valid URI format. - """); - } - - return new MailKitClientFactory( - smtpUri, - settings.Credentials); + return new MailKitClientFactory(settings); } if (settings.DisableHealthChecks is false) diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs index e62100b75a..6aedcd902b 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientSettings.cs @@ -7,14 +7,15 @@ namespace MailKit.Client; /// public sealed class MailKitClientSettings { + internal const string DefaultConfigSectionName = "MailKit:Client"; + /// - /// Gets or sets the SMTP server connection string. It should be represented in a - /// valid form. + /// Gets or sets the SMTP server . /// /// /// The default value is . /// - public string? ConnectionString { get; set; } + public Uri? Endpoint { get; set; } /// /// Gets or sets the network credentials that are optionally configurable for SMTP @@ -48,4 +49,27 @@ public sealed class MailKitClientSettings /// The default value is . /// public bool DisableMetrics { get; set; } + + internal void ParseConnectionString(string? connectionString) + { + if (string.IsNullOrWhiteSpace(connectionString)) + { + throw new InvalidOperationException($""" + ConnectionString is missing. + It should be provided in 'ConnectionStrings:' + or '{DefaultConfigSectionName}:Endpoint' key.' + configuration section. + """); + } + + if (Uri.TryCreate(connectionString, UriKind.Absolute, out var uri) is false) + { + throw new InvalidOperationException($""" + The 'ConnectionStrings:' (or 'Endpoint' key in + '{DefaultConfigSectionName}') isn't a valid URI format. + """); + } + + Endpoint = uri; + } } From bc2943baea0b5b14701a9d9fca729c6d0d64beff Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 10:57:23 -0500 Subject: [PATCH 16/22] Final updates --- docs/extensibility/custom-component.md | 10 ++++++---- .../MailDevResource.NewsletterService/Program.cs | 6 ++---- .../MailKitClientServiceCollectionExtensions.cs | 3 ++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index 95cca67ce6..3ff81b987e 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -1,7 +1,7 @@ --- title: Create custom .NET Aspire component description: Learn how to create a custom .NET Aspire component for an existing containerized application. -ms.date: 07/15/2024 +ms.date: 07/16/2024 ms.topic: how-to --- @@ -87,7 +87,7 @@ Both extensions ultimately rely on the private `AddMailKitClient` method to regi ### Configuration binding -To invoke the delegate after configuration binding, the consumer should instantiate the settings class and then bind the settings to the specific section of the configuration. This allows the consumer to further configure the settings, ensuring that manual code settings are honored over configuration settings. After that, depending on whether the `serviceKey` value was provided, the `MailKitClientFactory` should be registered with the dependency injection container as either a standard or keyed service. +One of the first things that the private implementation of the `AddMailKitClient` methods does, is to bind the configuration settings to the `MailKitClientSettings` class. The settings class is instantiated and then `Bind` is called with the specific section of configuration. Then the optional `configureSettings` delegate is invoked with the current settings. This allows the consumer to further configure the settings, ensuring that manual code settings are honored over configuration settings. After that, depending on whether the `serviceKey` value was provided, the `MailKitClientFactory` should be registered with the dependency injection container as either a standard or keyed service. > [!IMPORTANT] > It's intentional that the `implementationFactory` overload is called when registering services. The `CreateMailKitClientFactory` method throws when the configuration is invalid. This ensures that creation of the `MailKitClientFactory` is deferred until it's needed and it prevents the app from erroring out before logging is available. @@ -138,6 +138,7 @@ if (settings.DisableTracing is false) if (settings.DisableMetrics is false) { + // Required by MailKit to enable metrics Telemetry.SmtpClient.Configure(); builder.Services.AddOpenTelemetry() @@ -155,14 +156,15 @@ With the component library created, you can now update the Newsletter service to dotnet add ./MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj reference MailKit.Client/MailKit.Client.csproj ``` -The final step is to replace the existing _Program.cs_ file in the `MailDevResource.NewsletterService` project with the following code: +The final step is to replace the existing _Program.cs_ file in the `MailDevResource.NewsletterService` project with the following C# code: :::code source="snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs"::: The most notable changes in the preceding code are: +- The updated `using` statements that include the `MailKit.Client`, `MailKit.Net.Smtp`, and `MimeKit` namespaces. - The replacement of the registration for the official .NET `SmtpClient` with the call to the `AddMailKitClient` extension method. -- Replacing both `/subscribe` and `/unsubscribe` map post calls to instead inject the `MailKitClientFactory` and use the `ISmtpClient` instance to send the email. +- The replacement of both `/subscribe` and `/unsubscribe` map post calls to instead inject the `MailKitClientFactory` and use the `ISmtpClient` instance to send the email. ## Summary diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs index cd53afb1dd..45b2365ccd 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.NewsletterService/Program.cs @@ -26,8 +26,7 @@ app.MapPost("/subscribe", async (MailKitClientFactory factory, string email) => { - // Can be disposed of since we're only sending a single message. - using ISmtpClient client = await factory.GetSmtpClientAsync(); + ISmtpClient client = await factory.GetSmtpClientAsync(); using var message = new MailMessage("newsletter@yourcompany.com", email) { @@ -41,8 +40,7 @@ app.MapPost("/unsubscribe", async (MailKitClientFactory factory, string email) => { - // Can be disposed of since we're only sending a single message. - using ISmtpClient client = await factory.GetSmtpClientAsync(); + ISmtpClient client = await factory.GetSmtpClientAsync(); using var message = new MailMessage("newsletter@yourcompany.com", email) { diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index e5c5e83bbc..0ddab40586 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -94,7 +94,7 @@ private static void AddMailKitClient( } else { - builder.Services.AddKeyedScoped(serviceKey, (sp, _) => CreateMailKitClientFactory(sp)); + builder.Services.AddKeyedScoped(serviceKey, (sp, key) => CreateMailKitClientFactory(sp)); } MailKitClientFactory CreateMailKitClientFactory(IServiceProvider _) @@ -121,6 +121,7 @@ MailKitClientFactory CreateMailKitClientFactory(IServiceProvider _) if (settings.DisableMetrics is false) { + // Required by MailKit to enable metrics Telemetry.SmtpClient.Configure(); builder.Services.AddOpenTelemetry() From 9bd583c6c14761de78a9ff4160341eb6de5f38a8 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 11:20:28 -0500 Subject: [PATCH 17/22] Apply suggestions from code review Co-authored-by: Eric Erhardt --- .../MailKit.Client/MailKitClientFactory.cs | 4 +--- .../MailKitClientServiceCollectionExtensions.cs | 9 +++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs index e3cd864f46..f3f2125e11 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -13,9 +13,7 @@ namespace MailKit.Client; /// /// The optional used to authenticate to the SMTP server /// -public sealed class MailKitClientFactory( - MailKitClientSettings settings, - ICredentials? credentials = null) : IDisposable +public sealed class MailKitClientFactory(MailKitClientSettings settings) : IDisposable { private SmtpClient? _client; diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs index 0ddab40586..4e5388f60f 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs @@ -10,7 +10,7 @@ namespace Microsoft.Extensions.Hosting; /// Provides extension methods for registering a as a /// scoped-lifetime service in the services provided by the . /// -public static class MailKitClientServiceCollectionExtensions +public static class MailKitExtensions { /// /// Registers 'Scoped' for creating @@ -82,9 +82,10 @@ private static void AddMailKitClient( .GetSection(configurationSectionName) .Bind(settings); - settings.ParseConnectionString( - builder.Configuration.GetConnectionString(connectionName) ?? - builder.Configuration[$"{MailKitClientSettings.DefaultConfigSectionName}:Endpoint"]); + if (builder.Configuration.GetConnectionString(connectionName) is string connectionString) + { + settings.ParseConnectionString(connectionString); + } configureSettings?.Invoke(settings); From 46fec36c4d238d4aa331b46e2f3ad86263c747e0 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 12:18:22 -0500 Subject: [PATCH 18/22] Rename file, and fix reentry --- docs/extensibility/custom-component.md | 4 +-- .../MailKit.Client/MailKitClientFactory.cs | 33 ++++++++++++++----- ...tionExtensions.cs => MailKitExtensions.cs} | 3 ++ 3 files changed, 30 insertions(+), 10 deletions(-) rename docs/extensibility/snippets/MailDevResource/MailKit.Client/{MailKitClientServiceCollectionExtensions.cs => MailKitExtensions.cs} (97%) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index 3ff81b987e..c46e969551 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -74,9 +74,9 @@ The goal of .NET Aspire components is to expose the underlying client library to :::code source="snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs"::: -The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` instance based on the configuration settings. It's responsible for returning an `ISmtpClient` implementation that has an active connection to a configured SMTP server and optionally authenticated. Next, you need to expose the functionality for the consumers to register this factory with the dependency injection container. Add the following code to the `MailKit.Client` project in a file named _MailKitClientServiceCollectionExtensions.cs_: +The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` instance based on the configuration settings. It's responsible for returning an `ISmtpClient` implementation that has an active connection to a configured SMTP server and optionally authenticated. Next, you need to expose the functionality for the consumers to register this factory with the dependency injection container. Add the following code to the `MailKit.Client` project in a file named _MailKitExtensions.cs_: -:::code source="snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs"::: +:::code source="snippets/MailDevResource/MailKit.Client/MailKitExtensions.cs"::: The preceding code adds two extension methods on the `IHostApplicationBuilder` type, one for the standard registration of MailKit and another for keyed-registration of MailKit. diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs index f3f2125e11..13f91e6364 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientFactory.cs @@ -16,6 +16,7 @@ namespace MailKit.Client; public sealed class MailKitClientFactory(MailKitClientSettings settings) : IDisposable { private SmtpClient? _client; + private SemaphoreSlim _semaphore = new(1, 1); /// /// Gets an instance in the connected state @@ -31,19 +32,35 @@ public sealed class MailKitClientFactory(MailKitClientSettings settings) : IDisp public async Task GetSmtpClientAsync( CancellationToken cancellationToken = default) { - _client = new SmtpClient(); + await _semaphore.WaitAsync(cancellationToken); - await _client.ConnectAsync(settings.Endpoint, cancellationToken) - .ConfigureAwait(false); - - if (credentials is not null) + try { - await _client.AuthenticateAsync(credentials, cancellationToken) - .ConfigureAwait(false); + if (_client is null) + { + _client = new SmtpClient(); + + await _client.ConnectAsync(settings.Endpoint, cancellationToken) + .ConfigureAwait(false); + + if (settings.Credentials is not null) + { + await _client.AuthenticateAsync(settings.Credentials, cancellationToken) + .ConfigureAwait(false); + } + } } + finally + { + _semaphore.Release(); + } return _client; } - public void Dispose() => _client?.Dispose(); + public void Dispose() + { + _client?.Dispose(); + _semaphore.Dispose(); + } } diff --git a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitExtensions.cs similarity index 97% rename from docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs rename to docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitExtensions.cs index 4e5388f60f..1f9006ffec 100644 --- a/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitClientServiceCollectionExtensions.cs +++ b/docs/extensibility/snippets/MailDevResource/MailKit.Client/MailKitExtensions.cs @@ -114,6 +114,9 @@ MailKitClientFactory CreateMailKitClientFactory(IServiceProvider _) if (settings.DisableTracing is false) { + // Required by MailKit to enable tracing + Telemetry.SmtpClient.Configure(); + builder.Services.AddOpenTelemetry() .WithTracing( traceBuilder => traceBuilder.AddSource( From 2809a4f2a78d936356eda49e390aba4f8df2a542 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 12:21:05 -0500 Subject: [PATCH 19/22] Add more clarity --- docs/extensibility/custom-component.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index c46e969551..8868dd5973 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -81,7 +81,7 @@ The `MailKitClientFactory` class is a factory that creates an `ISmtpClient` inst The preceding code adds two extension methods on the `IHostApplicationBuilder` type, one for the standard registration of MailKit and another for keyed-registration of MailKit. > [!TIP] -> Extension methods for .NET Aspire components should extend the `IHostApplicationBuilder` type and follow the `Add` naming convention where the `` is the type or functionality you're adding. +> Extension methods for .NET Aspire components should extend the `IHostApplicationBuilder` type and follow the `Add` naming convention where the `` is the type or functionality you're adding. For this article, the `AddMailKitClient` extension method is used to add the MailKit client. It's likely more in-line with the official guidance to use `AddMailKitSmtpClient` instead of `AddMailKitClient`, since this only registers the `SmtpClient` and not the entire MailKit library. Both extensions ultimately rely on the private `AddMailKitClient` method to register the `MailKitClientFactory` with the dependency injection container as a [scoped service](/dotnet/core/extensions/dependency-injection#scoped). The reason for registering the `MailKitClientFactory` as a scoped service is because the connection (and authentication) operations are considered expensive and should be reused within the same scope where possible. In other words, for a single request, the same `ISmtpClient` instance should be used. The factory holds on to the instance of the `SmtpClient` that it creates and disposes of it. From 607e7d418fd486dd5753a9a8cbe9d7f25b30db2a Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Jul 2024 13:36:35 -0500 Subject: [PATCH 20/22] Added images and authentication flow --- docs/extensibility/custom-component.md | 92 ++++++++++++++++++ docs/extensibility/media/maildev-inbox.png | Bin 0 -> 54557 bytes ...ildev-with-newsletterservice-dashboard.png | Bin 0 -> 48062 bytes .../media/mailkit-metrics-dashboard.png | Bin 0 -> 71608 bytes .../media/mailkit-metrics-graph-dashboard.png | Bin 0 -> 114468 bytes docs/extensibility/media/swagger-ui-try.png | Bin 0 -> 90574 bytes docs/extensibility/media/swagger-ui.png | Bin 0 -> 60821 bytes .../MailDevResourceBuilderExtensions.cs | 26 ++--- .../MailDevResource.AppHost/Program.cs | 8 +- .../MailDevResource.NewsletterService.csproj | 1 + .../MailKit.Client/MailKit.Client.csproj | 2 +- .../MailKit.Client/MailKitClientFactory.cs | 3 +- .../MailKit.Client/MailKitClientSettings.cs | 22 +++++ .../MailKit.Client/MailKitExtensions.cs | 6 ++ 14 files changed, 145 insertions(+), 15 deletions(-) create mode 100644 docs/extensibility/media/maildev-inbox.png create mode 100644 docs/extensibility/media/maildev-with-newsletterservice-dashboard.png create mode 100644 docs/extensibility/media/mailkit-metrics-dashboard.png create mode 100644 docs/extensibility/media/mailkit-metrics-graph-dashboard.png create mode 100644 docs/extensibility/media/swagger-ui-try.png create mode 100644 docs/extensibility/media/swagger-ui.png diff --git a/docs/extensibility/custom-component.md b/docs/extensibility/custom-component.md index 8868dd5973..9739896c51 100644 --- a/docs/extensibility/custom-component.md +++ b/docs/extensibility/custom-component.md @@ -68,6 +68,15 @@ The settings class also contains a `ParseConnectionString` method that parses th If neither of these values are provided, an exception is thrown. Likewise, if there's a value but it's not a valid URI, an exception is thrown. +### Parse credentials logic + +The settings class also contains a `ParseCredentials` method that parses the credentials into a valid `NetworkCredential`. The configuration is expected to be provided in the following format: + +- `MailKit:Client:Credentials:UserName`: The username to authenticate with the SMTP server. +- `MailKit:Client:Credentials:Password`: The password to authenticate with the SMTP server. + +When credentials are configured, the `ParseCredentials` method attempts to parse the username and password from the configuration. If either the username or password is missing, an exception is thrown. + ## Expose component wrapper functionality The goal of .NET Aspire components is to expose the underlying client library to consumers through dependency injection. With MailKit and for this example, the `SmtpClient` class is what you want to expose. You're not wrapping any functionality, but rather mapping configuration settings to an `SmtpClient` class. It's common to expose both standard and keyed-service registrations for components. Standard registrations are used when there's only one instance of a service, and keyed-service registrations are used when there are multiple instances of a service. Sometimes, to achieve multiple registrations of the same type you use a factory pattern. Add the following code to the `MailKit.Client` project in a file named _MailKitClientFactory.cs_: @@ -166,6 +175,89 @@ The most notable changes in the preceding code are: - The replacement of the registration for the official .NET `SmtpClient` with the call to the `AddMailKitClient` extension method. - The replacement of both `/subscribe` and `/unsubscribe` map post calls to instead inject the `MailKitClientFactory` and use the `ISmtpClient` instance to send the email. +## Run the sample + +Now that you've created the MailKit client component and updated the Newsletter service to use it, you can run the sample. From your IDE, select F5 or run `dotnet run` from the root directory of the solution to start the application—you should see the [.NET Aspire dashboard](../fundamentals/dashboard/overview.md): + +:::image type="content" source="./media/maildev-with-newsletterservice-dashboard.png" lightbox="./media/maildev-with-newsletterservice-dashboard.png" alt-text=".NET Aspire dashboard: MailDev and Newsletter resources running."::: + +Once the application is running, navigate to the Swagger UI at [https://localhost:7251/swagger](https://localhost:7251/swagger) and test the `/subscribe` and `/unsubscribe` endpoints. Select the down arrow to expand the endpoint: + +:::image type="content" source="./media/swagger-ui.png" lightbox="./media/swagger-ui.png" alt-text="Swagger UI: Subscribe endpoint."::: + +Then select the `Try it out` button. Enter an email address, and then select the `Execute` button. + +:::image type="content" source="./media/swagger-ui-try.png" lightbox="./media/swagger-ui-try.png" alt-text="Swagger UI: Subscribe endpoint with email address."::: + +Repeat this several times, to add multiple email addresses. You should see the email sent to the MailDev inbox: + +:::image type="content" source="./media/maildev-inbox.png" alt-text="MailDev inbox with multiple emails."::: + +Stop the application by selecting Ctrl+C in the terminal window where the application is running, or by selecting the stop button in your IDE. + +### Configure MailDev credentials + +The MailDev container supports basic authentication for both incoming and outgoing SMTP. To configure the credentials for incoming, you need to set the `MAILDEV_INCOMING_USER` and `MAILDEV_INCOMING_PASS` environment variables. For more information, see [MailDev: Usage](https://maildev.github.io/maildev/#usage). + +To configure these credentials, update the _Program.cs_ file in the `MailDevResource.AppHost` project with the following code: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var mailDevUsername = builder.AddParameter("maildev-username"); +var mailDevPassword = builder.AddParameter("maildev-password"); + +var maildev = builder.AddMailDev("maildev") + .WithEnvironment("MAILDEV_INCOMING_USER", mailDevUsername) + .WithEnvironment("MAILDEV_INCOMING_PASS", mailDevPassword); + +builder.AddProject("newsletterservice") + .WithReference(maildev); + +builder.Build().Run(); +``` + +The preceding code adds two parameters for the MailDev username and password. It assigns these parameters to the `MAILDEV_INCOMING_USER` and `MAILDEV_INCOMING_PASS` environment variables. The `AddMailDev` method is then updated to include these environment variables. For more information on parameters, see [External parameters](../fundamentals/external-parameters.md). + +Next, configure the secrets for these paremeters. Right-click on the `MailDevResource.AppHost` project and select `Manage User Secrets`. Add the following JSON to the `secrets.json` file: + +```json +{ + "Parameters:maildev-username": "@admin", + "Parameters:maildev-password": "t3st1ng" +} +``` + +> [!WARNING] +> These credentials are for demonstration purposes only and MailDev is intended for local development. These crednetials are fictitious and shouldn't be used in a production environment. + +If you're to run the sample now, the client wouldn't be able to connect to the MailDev container. This is because the MailDev container is configured to require authentication for incoming SMTP connections. The MailKit client configuration also needs to be updated to include the credentials. + +To configure the credentials in the client, right-click on the `MailDevResource.NewsletterService` project and select `Manage User Secrets`. Add the following JSON to the `secrets.json` file: + +```json +{ + "MailKit:Client": { + "Credentials": { + "UserName": "@admin", + "Password": "t3st1ng" + } + } +} +``` + +Run the app again, and everything works as it did before, but now with authentication enabled. + +### View MailKit telemetry + +The MailKit client library exposes telemetry that can be viewed in the .NET Aspire dashboard. To view the telemetry, navigate to the .NET Aspire dashboard at [https://localhost:7251](https://localhost:7251). Select the `newsletter` resource to view the telemetry on the **Metrics** page: + +:::image type="content" source="./media/mailkit-metrics-dashboard.png" lightbox="./media/mailkit-metrics-dashboard.png" alt-text=".NET Aspire dashboard: MailKit telemetry."::: + +Open up the Swagger UI again, and make some requests to the `/subscribe` and `/unsubscribe` endpoints. Then, navigate back to the .NET Aspire dashboard and select the `newsletter` resource. Select a metric under the **mailkit.net.smtp** node, such as `mailkit.net.smtp.client.operation.count`. You should see the telemetry for the MailKit client: + +:::image type="content" source="./media/mailkit-metrics-graph-dashboard.png" lightbox="./media/mailkit-metrics-graph-dashboard.png" alt-text=".NET Aspire dashboard: MailKit telemetry for operation count."::: + ## Summary In this article, you learned how to create a .NET Aspire component that uses MailKit to send emails. You also learned how to integrate this component into the Newsletter app you previously built. You learned about the core principles of .NET Aspire components, such as exposing the underlying client library to consumers through dependency injection, and how to add health checks and telemetry to the component. You also learned how to update the Newsletter service to use the MailKit client. diff --git a/docs/extensibility/media/maildev-inbox.png b/docs/extensibility/media/maildev-inbox.png new file mode 100644 index 0000000000000000000000000000000000000000..b4f6d177fb2957e511ec14446ccd9933c6702ca2 GIT binary patch literal 54557 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 literal 0 HcmV?d00001 diff --git a/docs/extensibility/media/maildev-with-newsletterservice-dashboard.png b/docs/extensibility/media/maildev-with-newsletterservice-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..75bcc71aefbcab1103a23c59df535f89b538c489 GIT binary patch literal 48062 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 literal 0 HcmV?d00001 diff --git a/docs/extensibility/media/mailkit-metrics-dashboard.png b/docs/extensibility/media/mailkit-metrics-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..504cb745eb048cf4a825e49baa442fa4ab6fb2b0 GIT binary patch literal 71608 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⁣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

Vms)lSo;Iv>yb`pXXy~EV| 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 literal 0 HcmV?d00001 diff --git a/docs/extensibility/media/swagger-ui.png b/docs/extensibility/media/swagger-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..e0177c8e5bb9756793cf80f066a7e44b73904cea GIT binary patch literal 60821 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