IlluminatingSoftware.MessageService.Client 1.1.1

dotnet add package IlluminatingSoftware.MessageService.Client --version 1.1.1
                    
NuGet\Install-Package IlluminatingSoftware.MessageService.Client -Version 1.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="IlluminatingSoftware.MessageService.Client" Version="1.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="IlluminatingSoftware.MessageService.Client" Version="1.1.1" />
                    
Directory.Packages.props
<PackageReference Include="IlluminatingSoftware.MessageService.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add IlluminatingSoftware.MessageService.Client --version 1.1.1
                    
#r "nuget: IlluminatingSoftware.MessageService.Client, 1.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package IlluminatingSoftware.MessageService.Client@1.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=IlluminatingSoftware.MessageService.Client&version=1.1.1
                    
Install as a Cake Addin
#tool nuget:?package=IlluminatingSoftware.MessageService.Client&version=1.1.1
                    
Install as a Cake Tool

MessageService.Client

A typed .NET HTTP client for the MessageService email and SMS sending API.

Targets .NET 8+ and .NET Framework 4.6.2+.

Installation

dotnet add package IlluminatingSoftware.MessageService.Client

Usage

Register the client with dependency injection using Basic-Auth credentials issued by the MessageService admin portal:

services.AddMessageServiceClient(options =>
{
    options.BaseUrl = new Uri("https://messageservice.example.com/");
    options.Username = "your-client-username";
    options.Password = "your-client-password";
});

Then inject IMessageServiceClient wherever you need it:

public class NotificationService
{
    private readonly IMessageServiceClient _client;

    public NotificationService(IMessageServiceClient client)
    {
        _client = client;
    }

    public Task SendWelcomeEmailAsync(string to)
    {
        return _client.SendEmailAsync(new SendEmailRequest
        {
            ToAddresses = new[] { to },
            Subject = "Welcome!",
            Body = "Thanks for signing up."
        });
    }
}

Tracking sent and read events

Set your own ids when sending. The service stores them and records events as the email is sent, read (tracking pixel), or fails.

  • MessageId — your id for one email. Use it later to pull that email's events.
  • GroupMessageId — your id for a batch or campaign. Set the same value on every email in the group, then pull all of their events in one call.

MessageId is stored as RequesterMsgId (that field already existed). GroupMessageId is new. Both are optional Guid? values.

var messageId = Guid.NewGuid();
var groupId = campaignId; // one id shared by every email in this send

await _client.SendEmailAsync(new SendEmailRequest
{
    ToAddresses = new[] { to },
    Subject = "Welcome!",
    Body = "Thanks for signing up.",
    MessageId = messageId,
    GroupMessageId = groupId,
});

// Later — one email
var one = await _client.GetEmailEventsByMessageIdAsync(messageId);
Console.WriteLine($"sent={one.Messages[0].WasSent} read={one.Messages[0].WasRead}");
foreach (var ev in one.Messages[0].Events)
    Console.WriteLine($"{ev.ActionTimeUtc:u} {ev.Action}");

// Later — every email in the campaign
var group = await _client.GetEmailEventsByGroupMessageIdAsync(groupId);
foreach (var email in group.Messages)
    Console.WriteLine($"{email.Subject}: sent={email.WasSent} read={email.WasRead} last={email.LatestAction}");

Each result includes:

Field Meaning
WasSent A Sent event exists, or SentAtUtc is set
WasRead A tracking-pixel Read event exists
LastReadAtUtc Time of the most recent Read
LatestAction Most recent event name (Sent, Read, Error, …)
Events Full history (Action, ActionTimeUtc, Details, …)

Lookups are scoped to your API client. Results are capped at 500 emails per call.

You can also load a single email (including its events) by the service-assigned id returned from SendEmailAsync:

var record = await _client.GetEmailAsync(sent.Id);
foreach (var ev in record.MessageEvents)
    Console.WriteLine($"{ev.ActionTimeUtc:u} {ev.Action}");

API

  • SendEmailAsync / GetEmailAsync / GetEmailsAsync
  • GetEmailEventsByMessageIdAsync / GetEmailEventsByGroupMessageIdAsync
  • SendSmsAsync / GetSmsMessageAsync / GetSmsMessagesAsync

License

Licensed under the MIT License, © Illuminating Software LLC.

Package Maintainer

Published to NuGet.org under the Splat account (trent@zfairs.com).

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Framework net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.1 96 8/17/2026
1.1.0 93 8/17/2026
1.0.2 109 7/16/2026
1.0.1 99 7/15/2026