net3000.mailingList
1.0.0
dotnet add package net3000.mailingList --version 1.0.0
NuGet\Install-Package net3000.mailingList -Version 1.0.0
<PackageReference Include="net3000.mailingList" Version="1.0.0" />
<PackageVersion Include="net3000.mailingList" Version="1.0.0" />
<PackageReference Include="net3000.mailingList" />
paket add net3000.mailingList --version 1.0.0
#r "nuget: net3000.mailingList, 1.0.0"
#:package net3000.mailingList@1.0.0
#addin nuget:?package=net3000.mailingList&version=1.0.0
#tool nuget:?package=net3000.mailingList&version=1.0.0
mailingListCore
Overview
The mailingListCore library provides comprehensive mailing list management for the Net3000 platform. It handles subscriber management, campaign creation and delivery, multi-platform email marketing integrations (SendGrid, MailChimp, Constant Contact), delivery tracking, and unsubscribe management. Campaigns can be sent immediately or queued for background processing.
Features
- Subscriber Management: Subscribe, unsubscribe, search, and import subscribers with custom metadata fields
- Campaign Delivery: Create, schedule, and send email campaigns with immediate or background execution
- Multi-Platform Integration: SendGrid, MailChimp, Constant Contact, and Amadeus platform support with list/contact synchronization
- Delivery Tracking: Email open tracking via pixels, click tracking, bounce detection, and per-subscriber status logging
- Unsubscribe Management: Token-based unsubscribe links with cross-platform unsubscribe handling
- SendGrid Webhooks: Process delivery events (bounces, opens, clicks, unsubscribes) from SendGrid webhook callbacks
- Dynamic Message Groups: Query-based recipient lists from external data sources
Database Tables
ml_maillists
Mailing lists with account scoping:
- title, listCode, uuid (GUID), account
- responseTitle, responseMessage (subscription confirmation)
- notifyemail, details
ml_subscribers
Subscriber records:
- email, firstName, lastName, account
- metaData (JSON custom fields), bounced, exclude
ml_listsubscribers
Subscription relationships linking subscribers to lists:
- listID, subscriberID, unsubscribed, Token (GUID for unsubscribe links)
ml_messages
Email message templates:
- messageCode, title, subject, message (HTML body)
- fromName, fromMail, replyEmail, useTemplate
ml_dlog
Campaign delivery logs:
- messageID, listID, account, statusID, Token (GUID)
- Delivery stats: sentNumber, delivered_count, bounces, opens, clicks, unsubscribes
ml_subscriberlog
Individual subscriber delivery tracking:
- logID, subscriberID, opened, unsubscribed, token
ml_listConnections
External platform connections per list:
- listID, apiPlatformID, metaData (JSON)
ml_subscriberConnections
External platform subscriber links:
- subscriberId, platformId, externalId
ml_netareaLog
Campaign logs with filter criteria for targeted sends:
- messageID, sentTo, clientStatus, accountStatus, appCodes
Public API
<details> <summary>net3000.mailingList.lib - Subscription Management</summary>
| Member | Summary | Parameters |
|---|---|---|
string subscribe(subscriber mySubscriber) |
Subscribes a new or existing subscriber to a list; creates list if using listCode. | mySubscriber (subscriber) |
Task<apiResponse> SubscribeAsync(Dictionary<string, string> mySubscriber, ml_maillists list) |
Async subscription using dictionary data with platform sync (MailChimp, Constant Contact, SendGrid). | mySubscriber (Dictionary), list (ml_maillists) |
Task<apiResponse> SubscribeAsync(subscribeModel mySubscriber, ml_maillists list) |
Async subscription using subscribeModel with platform synchronization. | mySubscriber (subscribeModel), list (ml_maillists) |
Task<UnsubscribeEmailListApiResult> UnsubscribeByEmailAndListUuidAsync(string email, Guid listUuid) |
Unsubscribes by email and list UUID; removes platform connections. | email (string), listUuid (Guid) |
List<ml_subscribers> searchMembers(string search) |
Searches subscribers by email, firstName, or lastName within current account. | search (string) |
List<ml_listsubscribers> membersList(int listID) |
Retrieves all list subscriber relationships for a list. | listID (int) |
</details>
<details> <summary>net3000.mailingList.lib - Campaign Sending</summary>
| Member | Summary | Parameters |
|---|---|---|
Task<apiResponse> SendCampaignAsync(int campaignId) |
Sends campaign to subscribers synchronously. Background execution is arranged by the caller via Hangfire (see Net3000.Worker.Jobs.ScheduledCampaignDispatchJob). |
campaignId (int) |
Task Send(ml_dlog exLog) |
Sends campaign to subscribers using their configured platforms. | exLog (ml_dlog) |
Task<apiResponse> SendMessageAsync(ml_messages message, List<string> emails) |
Sends direct message to email list via SendGrid API. | message (ml_messages), emails (List<string>) |
Task<apiResponse> SendToSendGrid(string listId, ml_dlog exLog) |
Sends campaign to SendGrid list with tracking and personalization. | listId (string), exLog (ml_dlog) |
</details>
<details> <summary>net3000.mailingList.lib - Tracking & Unsubscribe</summary>
| Member | Summary | Parameters |
|---|---|---|
Task<UnsubscribeByTokenResult> GetUnsubscribeByTokenInfoAsync(Guid campaignToken, Guid subscriberToken) |
Retrieves unsubscribe confirmation info by campaign and subscriber tokens. | campaignToken (Guid), subscriberToken (Guid) |
Task<UnsubscribeByTokenResult> UnsubscribeByTokenAsync(Guid campaignToken, Guid subscriberToken) |
Marks subscriber as unsubscribed using tokens. | campaignToken (Guid), subscriberToken (Guid) |
UnsubscribeByQueryResult UnsubscribeByQuery(string actualToken, int? id) |
Unsubscribes by query parameter token and optional subscriber ID. | actualToken (string), id (int?) |
ml_subscriberlog TrackImage(string token, int? logid) |
Tracks email opens via tracking pixel; returns subscriber log record. | token (string), logid (int?) |
Task<MarkBouncedResult> MarkBouncedAsync(Guid listUuid, List<string> emails) |
Marks emails as bounced for a specific list. | listUuid (Guid), emails (List<string>) |
</details>
<details> <summary>net3000.mailingList.lib - Platform Sync</summary>
| Member | Summary | Parameters |
|---|---|---|
Task<apiResponse> SyncSendGridListsAsync() |
Syncs mailing lists from SendGrid API to local database for current account. | None |
Task<apiResponse> SyncSendGridContactsAsync(string listId, string name) |
Syncs contacts from a specific SendGrid list to local database. | listId (string), name (string) |
</details>
<details> <summary>net3000.mailingList.lib - Utility</summary>
| Member | Summary | Parameters |
|---|---|---|
List<string> ExtractEmails(string data) |
Extracts all email addresses from text using regex. | data (string) |
List<string> ExtractEmailLists(string data) |
Extracts unique email addresses from text. | data (string) |
Task<ml_maillists> FindOrCreateListForDictionarySubscribeAsync(Dictionary<string, string> mySubscriber) |
Resolves or creates a mailing list for subscription by listID, uuid, or listCode. | mySubscriber (Dictionary) |
</details>
<details> <summary>Constants & Enums</summary>
| Name | Type | Values |
|---|---|---|
Platforms.ConstantContact |
string | "constantContact" |
Platforms.MailChimp |
string | "mailChimp" |
Platforms.SendGrid |
string | "sendGrid" |
Platforms.Amadeus |
string | "amadeus" |
CampaignStatus.Draft |
int | -1 |
CampaignStatus.Scheduled |
int | 0 |
CampaignStatus.Delivered |
int | 1 |
CampaignStatus.Cancelled |
int | 2 |
CampaignStatus.Failed |
int | 3 |
</details>
Usage
using net3000.mailingList;
// Initialize
var ml = new lib();
ml.mailingListDb = mailingListDbContext;
ml.account = currentAccountId;
// Subscribe a user
var subscriber = new subscriber
{
email = "user@example.com",
name = "Jane Doe",
account = currentAccountId,
listCode = "newsletter"
};
ml.subscribe(subscriber);
// Send a campaign
var result = await ml.SendCampaignAsync(campaignId, runInBackground: true, serviceProvider);
// Track unsubscribe
var info = await ml.GetUnsubscribeByTokenInfoAsync(campaignToken, subscriberToken);
Connection String
The library expects a connection string named "mailinglist":
{
"ConnectionStrings": {
"mailinglist": "Server=your-server;Database=mailinglist;..."
}
}
Dependencies
- SendGrid 9.29.3 - Email delivery
- Microsoft.EntityFrameworkCore.SqlServer 10.0.1 - Data access
- Newtonsoft.Json 13.0.4 - JSON serialization
- Serilog 4.3.0 - Structured logging
- net3000.common 10.0.7 - Common utilities
- apiConnectorCore - API connection management
- ConstantContact.Services / mailChimp.Services / SendGrid.Services - Platform integrations
License
This library is proprietary to Net3000. Redistribution or use outside Net3000.ca solutions is not permitted.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- apiConnectorCore (>= 1.0.5)
- Microsoft.EntityFrameworkCore (>= 10.0.7)
- Microsoft.EntityFrameworkCore.SqlServer (>= 10.0.7)
- net3000.common (>= 10.0.22)
- net3000.constantcontact (>= 1.0.0)
- net3000.mailchimp (>= 1.0.0)
- net3000.sendgrid (>= 1.0.0)
- net3000.servicecoordinator (>= 1.0.0)
- Newtonsoft.Json (>= 13.0.4)
- SendGrid (>= 9.29.3)
- Serilog (>= 4.3.1)
- Serilog.Extensions.Logging (>= 10.0.0)
- TweetinviAPI (>= 5.0.4)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on net3000.mailingList:
| Package | Downloads |
|---|---|
|
net3000.shoppingCart
E-commerce library for Net3000 storefronts. Product catalog, orders, payment gateways, structured data, and mailing-list audience integration. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 31 | 7/21/2026 |
1.0.0 — Initial NuGet release. Library decoupled from netlibCore; namespaces remain net3000.mailingList.*.