SQL Server Storage Provider
Enterprise-grade message storage with Microsoft SQL Server and Azure SQL Database.
Enterprise Features
ACID CompliantAuto Schema CreationMessage CompressionFull-Text SearchAzure SQL Support
Installation
dotnet add package Zetian
dotnet add package Zetian.Storage.SqlServerQuick Start
QuickStart.cs
using Zetian.Server;
using Zetian.Storage.SqlServer.Extensions;
// Basic setup - table created automatically
var server = new SmtpServerBuilder()
.Port(25)
.WithSqlServerStorage(
"Server=localhost;Database=SmtpDb;Trusted_Connection=true;")
.Build();
await server.StartAsync();Advanced Configuration
AdvancedConfig.cs
var server = new SmtpServerBuilder()
.Port(25)
.WithSqlServerStorage(
"Server=localhost;Database=SmtpStorage;Integrated Security=true;",
config =>
{
config.TableName = "SmtpMessages";
config.AttachmentsTableName = "SmtpAttachments";
config.SchemaName = "mail";
config.AutoCreateTable = true;
config.StoreAttachmentsSeparately = true;
config.CompressMessageBody = true;
config.MaxMessageSizeMB = 50;
config.EnableRetry = true;
config.MaxRetryAttempts = 3;
})
.Build();Configuration Options
| Option | Default | Description |
|---|---|---|
| TableName | "SmtpMessages" | Main messages table |
| SchemaName | "dbo" | Database schema |
| AutoCreateTable | true | Auto-create tables |
| StoreAttachmentsSeparately | false | Separate attachments table |
| CompressMessageBody | false | GZIP compression |
| MaxMessageSizeMB | 100 | Max message size |
Connection Strings
ConnectionStrings.cs
// Windows Authentication
"Server=localhost;Database=SmtpDb;Trusted_Connection=true;"
// SQL Server Authentication
"Server=localhost;Database=SmtpDb;User Id=sa;Password=YourPassword;"
// Azure SQL Database
"Server=tcp:yourserver.database.windows.net,1433;
Initial Catalog=SmtpDb;User ID=yourusername;Password=yourpassword;
Encrypt=True;TrustServerCertificate=False;"
// Named Instance
"Server=localhost\SQLEXPRESS;Database=SmtpDb;Trusted_Connection=true;"Table Schema
Schema.sql
-- Messages table (auto-created)
CREATE TABLE [SmtpMessages] (
Id BIGINT IDENTITY(1,1) PRIMARY KEY,
MessageId NVARCHAR(255) NOT NULL UNIQUE,
SessionId NVARCHAR(255) NOT NULL,
FromAddress NVARCHAR(500),
ToAddresses NVARCHAR(MAX) NOT NULL,
Subject NVARCHAR(1000),
ReceivedDate DATETIME2 NOT NULL,
MessageSize BIGINT NOT NULL,
MessageBody VARBINARY(MAX) NOT NULL,
IsCompressed BIT DEFAULT 0,
Headers NVARCHAR(MAX),
HasAttachments BIT DEFAULT 0,
AttachmentCount INT DEFAULT 0,
RemoteIP NVARCHAR(45),
CreatedAt DATETIME2 DEFAULT GETUTCDATE()
);Performance & Security
Enable Compression
Reduces storage by 60-80%
Connection Pooling
Adjust pool size for load
Use Least Privilege
Grant minimal permissions
Enable TDE
Encryption at rest