Emailit 2.0.1

dotnet add package Emailit --version 2.0.1
                    
NuGet\Install-Package Emailit -Version 2.0.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="Emailit" Version="2.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Emailit" Version="2.0.1" />
                    
Directory.Packages.props
<PackageReference Include="Emailit" />
                    
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 Emailit --version 2.0.1
                    
#r "nuget: Emailit, 2.0.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 Emailit@2.0.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=Emailit&version=2.0.1
                    
Install as a Cake Addin
#tool nuget:?package=Emailit&version=2.0.1
                    
Install as a Cake Tool

Emailit .NET

Tests NuGet License

The official .NET SDK for the Emailit Email API.

Requirements

  • .NET 8.0+

Installation

dotnet add package Emailit

Getting Started

using Emailit;
using Emailit.Options;
using Emailit.Resources;

var emailit = new EmailitClient("your_api_key");

Email email = emailit.Emails.Send(new EmailSendOptions
{
    From = "hello@yourdomain.com",
    To = new[] { "user@example.com" },
    Subject = "Hello from Emailit",
    Html = "<h1>Welcome!</h1><p>Thanks for signing up.</p>",
});

Console.WriteLine(email.Id);     // em_abc123...
Console.WriteLine(email.Status); // pending

All service methods accept strongly-typed option classes and return typed resource objects (Email, Domain, Contact, etc.) with real properties.

Available Services

Service Property Description
Emails emailit.Emails Send, list, get, cancel, retry emails
Domains emailit.Domains Create, verify, list, manage sending domains
API Keys emailit.ApiKeys Create, list, manage API keys
Audiences emailit.Audiences Create, list, manage audiences
Subscribers emailit.Subscribers Add, list, manage subscribers in audiences
Templates emailit.Templates Create, list, publish email templates
Suppressions emailit.Suppressions Create, list, manage suppressed addresses
Email Verifications emailit.EmailVerifications Verify email addresses
Email Verification Lists emailit.EmailVerificationLists Create, list, get results, export
Webhooks emailit.Webhooks Create, list, manage webhooks
Contacts emailit.Contacts Create, list, manage contacts
Events emailit.Events List and retrieve events

Usage

Emails

Send an email
Email email = emailit.Emails.Send(new EmailSendOptions
{
    From = "hello@yourdomain.com",
    To = new[] { "user@example.com" },
    Subject = "Hello from Emailit",
    Html = "<h1>Welcome!</h1>",
});

Console.WriteLine(email.Id);
Console.WriteLine(email.Status);
Send with a template
Email email = emailit.Emails.Send(new EmailSendOptions
{
    From = "hello@yourdomain.com",
    To = "user@example.com",
    Template = "welcome_email",
    Variables = new Dictionary<string, object?>
    {
        ["name"] = "John",
        ["company"] = "Acme",
    },
});
Send with attachments
Email email = emailit.Emails.Send(new EmailSendOptions
{
    From = "invoices@yourdomain.com",
    To = "customer@example.com",
    Subject = "Your Invoice",
    Html = "<p>Please find your invoice attached.</p>",
    Attachments = new List<EmailAttachment>
    {
        new EmailAttachment
        {
            Filename = "invoice.pdf",
            Content = Convert.ToBase64String(File.ReadAllBytes("invoice.pdf")),
            ContentType = "application/pdf",
        },
    },
});
Schedule an email
Email email = emailit.Emails.Send(new EmailSendOptions
{
    From = "reminders@yourdomain.com",
    To = "user@example.com",
    Subject = "Reminder",
    Html = "<p>Don't forget about tomorrow's meeting.</p>",
    ScheduledAt = "2026-01-10T09:00:00Z",
});
Send with tracking
Email email = emailit.Emails.Send(new EmailSendOptions
{
    From = "hello@yourdomain.com",
    To = new[] { "user@example.com" },
    Subject = "Tracked Email",
    Html = "<p>Hello!</p>",
    Tracking = new EmailTracking { Loads = true, Clicks = true },
});
Send from System.Net.Mail.MailMessage
using System.Net.Mail;

var message = new MailMessage("from@yourdomain.com", "to@example.com", "Hello", "<h1>Hi!</h1>")
{
    IsBodyHtml = true,
};
message.CC.Add("cc@example.com");
message.Attachments.Add(new Attachment("report.pdf"));

Email email = emailit.Emails.Send(message);
List emails
EmailitCollection<Email> list = emailit.Emails.List(new EmailListOptions { Page = 1, Limit = 10 });

foreach (Email email in list)
{
    Console.WriteLine($"{email.Id} - {email.Status}");
}

if (list.HasMore())
{
    Console.WriteLine("More pages available");
}
Get, cancel, and retry
Email email = emailit.Emails.Get("em_abc123");
emailit.Emails.Cancel("em_abc123");
emailit.Emails.Retry("em_abc123");
Get raw, attachments, body, meta
var raw = emailit.Emails.GetRaw("em_abc123");
var attachments = emailit.Emails.GetAttachments("em_abc123");
var body = emailit.Emails.GetBody("em_abc123");
var meta = emailit.Emails.GetMeta("em_abc123");

Domains

// Create
Domain domain = emailit.Domains.Create(new DomainCreateOptions
{
    Name = "example.com",
    TrackLoads = true,
    TrackClicks = true,
});

// Verify
emailit.Domains.Verify("dom_abc123");

// List
EmailitCollection<Domain> domains = emailit.Domains.List();

// Get
Domain domain = emailit.Domains.Get("dom_abc123");

// Update
emailit.Domains.Update("dom_abc123", new DomainUpdateOptions { TrackClicks = false });

// Delete
emailit.Domains.Delete("dom_abc123");

API Keys

// Create
ApiKey key = emailit.ApiKeys.Create(new ApiKeyCreateOptions
{
    Name = "Production Key",
    Scope = "sending",
});

Console.WriteLine(key.Key); // only available on create

// List
EmailitCollection<ApiKey> keys = emailit.ApiKeys.List();

// Get
ApiKey key = emailit.ApiKeys.Get("key_abc123");

// Update
emailit.ApiKeys.Update("key_abc123", new ApiKeyUpdateOptions { Name = "Updated Name" });

// Delete
emailit.ApiKeys.Delete("key_abc123");

Audiences

// Create
Audience audience = emailit.Audiences.Create(new AudienceCreateOptions { Name = "Newsletter" });

// List
EmailitCollection<Audience> audiences = emailit.Audiences.List();

// Get
Audience audience = emailit.Audiences.Get("aud_abc123");

// Update
emailit.Audiences.Update("aud_abc123", new AudienceUpdateOptions { Name = "Updated Newsletter" });

// Delete
emailit.Audiences.Delete("aud_abc123");

Subscribers

// Create
Subscriber subscriber = emailit.Subscribers.Create("aud_abc123", new SubscriberCreateOptions
{
    Email = "user@example.com",
    FirstName = "John",
    LastName = "Doe",
});

// List
EmailitCollection<Subscriber> subscribers = emailit.Subscribers.List("aud_abc123");

// Get
Subscriber subscriber = emailit.Subscribers.Get("aud_abc123", "sub_abc123");

// Update
emailit.Subscribers.Update("aud_abc123", "sub_abc123", new SubscriberUpdateOptions
{
    FirstName = "Jane",
});

// Delete
emailit.Subscribers.Delete("aud_abc123", "sub_abc123");

Templates

// Create
Template template = emailit.Templates.Create(new TemplateCreateOptions
{
    Name = "Welcome Email",
    Subject = "Welcome {{name}}",
    Html = "<h1>Hello {{name}}!</h1>",
});

// List
EmailitCollection<Template> templates = emailit.Templates.List();

// Get
Template template = emailit.Templates.Get("tpl_abc123");

// Update
emailit.Templates.Update("tpl_abc123", new TemplateUpdateOptions { Subject = "Updated Subject" });

// Publish
emailit.Templates.Publish("tpl_abc123");

// Delete
emailit.Templates.Delete("tpl_abc123");

Suppressions

// Create
Suppression suppression = emailit.Suppressions.Create(new SuppressionCreateOptions
{
    Email = "bounced@example.com",
    Type = "hard_bounce",
    Reason = "Mailbox does not exist",
});

// List
EmailitCollection<Suppression> suppressions = emailit.Suppressions.List();

// Get
Suppression suppression = emailit.Suppressions.Get("sup_abc123");

// Update
emailit.Suppressions.Update("sup_abc123", new SuppressionUpdateOptions { Reason = "Updated reason" });

// Delete
emailit.Suppressions.Delete("sup_abc123");

Email Verifications

EmailVerification result = emailit.EmailVerifications.Verify(new EmailVerificationVerifyOptions
{
    Email = "user@example.com",
});

Console.WriteLine(result.Status); // valid, invalid, risky, unknown
Console.WriteLine(result.Score);
Console.WriteLine(result.Risk);

Email Verification Lists

// Create
EmailVerificationList list = emailit.EmailVerificationLists.Create(new EmailVerificationListCreateOptions
{
    Name = "My List",
    Emails = new List<string> { "a@example.com", "b@example.com" },
});

// List
var lists = emailit.EmailVerificationLists.List();

// Get
EmailVerificationList list = emailit.EmailVerificationLists.Get("evl_abc123");

// Get results
var results = emailit.EmailVerificationLists.Results("evl_abc123");

// Export (XLSX)
var response = emailit.EmailVerificationLists.Export("evl_abc123");
File.WriteAllText("results.xlsx", response.Body);

Webhooks

// Create
Webhook webhook = emailit.Webhooks.Create(new WebhookCreateOptions
{
    Name = "My Webhook",
    Url = "https://example.com/webhook",
    AllEvents = true,
});

// List
EmailitCollection<Webhook> webhooks = emailit.Webhooks.List();

// Get
Webhook webhook = emailit.Webhooks.Get("wh_abc123");

// Update
emailit.Webhooks.Update("wh_abc123", new WebhookUpdateOptions
{
    Enabled = false,
});

// Delete
emailit.Webhooks.Delete("wh_abc123");

Contacts

// Create
Contact contact = emailit.Contacts.Create(new ContactCreateOptions
{
    Email = "user@example.com",
    FirstName = "John",
    LastName = "Doe",
    Audiences = new List<string> { "aud_abc123" },
});

// List
EmailitCollection<Contact> contacts = emailit.Contacts.List();

// Get
Contact contact = emailit.Contacts.Get("con_abc123");

// Update
emailit.Contacts.Update("con_abc123", new ContactUpdateOptions
{
    FirstName = "Jane",
});

// Delete
emailit.Contacts.Delete("con_abc123");

Events

// List
EmailitCollection<Event> events = emailit.Events.List(new EventListOptions
{
    Type = "email.delivered",
    Page = 1,
    Limit = 10,
});

// Get
Event evt = emailit.Events.Get("evt_abc123");

Webhook Verification

Verify incoming webhook signatures to ensure they're from Emailit:

using Emailit;
using Emailit.Events;

var rawBody = /* raw request body string */;
var signature = request.Headers["x-emailit-signature"];
var timestamp = request.Headers["x-emailit-timestamp"];
var secret = "your_webhook_secret";

try
{
    var evt = WebhookSignature.Verify(rawBody, signature, timestamp, secret);

    Console.WriteLine(evt.Type);    // e.g. "email.delivered"
    Console.WriteLine(evt.EventId); // e.g. "evt_abc123"

    switch (evt)
    {
        case EmailDelivered delivered:
            Console.WriteLine("Email delivered!");
            break;
        case EmailBounced bounced:
            Console.WriteLine("Email bounced!");
            break;
    }
}
catch (Emailit.Exceptions.ApiErrorException ex)
{
    Console.WriteLine($"Verification failed: {ex.Message}");
}

Supported Webhook Event Types

Event Type Class
email.accepted EmailAccepted
email.scheduled EmailScheduled
email.delivered EmailDelivered
email.bounced EmailBounced
email.attempted EmailAttempted
email.failed EmailFailed
email.rejected EmailRejected
email.suppressed EmailSuppressed
email.received EmailReceived
email.complained EmailComplained
email.clicked EmailClicked
email.loaded EmailLoaded
domain.created DomainCreated
domain.updated DomainUpdated
domain.deleted DomainDeleted
audience.created AudienceCreated
audience.updated AudienceUpdated
audience.deleted AudienceDeleted
subscriber.created SubscriberCreated
subscriber.updated SubscriberUpdated
subscriber.deleted SubscriberDeleted
contact.created ContactCreated
contact.updated ContactUpdated
contact.deleted ContactDeleted
template.created TemplateCreated
template.updated TemplateUpdated
template.deleted TemplateDeleted
suppression.created SuppressionCreated
suppression.updated SuppressionUpdated
suppression.deleted SuppressionDeleted
email_verification.created EmailVerificationCreated
email_verification.updated EmailVerificationUpdated
email_verification.deleted EmailVerificationDeleted
email_verification_list.created EmailVerificationListCreated
email_verification_list.updated EmailVerificationListUpdated
email_verification_list.deleted EmailVerificationListDeleted

Error Handling

The SDK throws typed exceptions for different error scenarios:

using Emailit.Exceptions;
using Emailit.Options;

try
{
    Email email = emailit.Emails.Send(new EmailSendOptions
    {
        From = "hello@yourdomain.com",
        To = "user@example.com",
        Subject = "Hello",
        Html = "<p>Hi</p>",
    });
}
catch (AuthenticationException ex)
{
    // 401 - Invalid API key
    Console.WriteLine($"Auth error: {ex.Message}");
}
catch (InvalidRequestException ex)
{
    // 400, 404 - Bad request or not found
    Console.WriteLine($"Invalid request: {ex.Message}");
}
catch (UnprocessableEntityException ex)
{
    // 422 - Validation error
    Console.WriteLine($"Validation error: {ex.Message}");
}
catch (RateLimitException ex)
{
    // 429 - Rate limit exceeded
    Console.WriteLine($"Rate limited: {ex.Message}");
}
catch (ApiConnectionException ex)
{
    // Network/connection error
    Console.WriteLine($"Connection failed: {ex.Message}");
}
catch (ApiErrorException ex)
{
    // Other API errors
    Console.WriteLine($"API error ({ex.HttpStatus}): {ex.Message}");
    Console.WriteLine($"Body: {ex.HttpBody}");
}

All exceptions extend ApiErrorException and expose:

  • HttpStatus - HTTP status code
  • HttpBody - Raw response body
  • JsonBody - Parsed JSON body (if available)
  • HttpHeaders - Response headers

Configuration

// Basic
var emailit = new EmailitClient("your_api_key");

// Custom API base URL
var emailit = new EmailitClient("your_api_key", apiBase: "https://custom.api.com");

// Custom HttpClient
var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(60) };
var emailit = new EmailitClient("your_api_key", httpClient: httpClient);

License

MIT

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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

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
2.0.1 118 3/7/2026