Microsoft officially deprecated the IIS SMTP server component in Windows Server 2012, as documented in their feature removal notes. This caused confusion particularly because their suggested replacement ("System.Net.Smtp") appears to be either a typographical error or an incomplete solution, since System.Net.Mail is merely an API for sending emails, not a service that listens on port 25.
What administrators actually need is a service that:
- Listens on port 25 for incoming SMTP connections
- Processes and routes emails to their destinations
- Provides queue management and retry logic
- Supports authentication and security protocols
Option 1: Third-Party SMTP Servers
Several robust alternatives exist:
// Example PowerShell command to install hMailServer
choco install hmailserver --params '"/service"'
Popular choices include:
- hMailServer (Open source, Windows-native)
- MailEnable (Commercial)
- SmarterMail (Commercial)
Option 2: Windows Service Using System.Net.Mail
For developers who need programmatic control:
// C# Windows Service example skeleton
public class SmtpBridgeService : ServiceBase
{
private TcpListener _listener;
protected override void OnStart(string[] args)
{
_listener = new TcpListener(IPAddress.Any, 25);
_listener.Start();
ThreadPool.QueueUserWorkItem(ListenerWorker);
}
private void ListenerWorker(object state)
{
while (true)
{
using (var client = _listener.AcceptTcpClient())
using (var stream = client.GetStream())
using (var mailClient = new SmtpClient("relay.provider.com", 587))
{
// Process SMTP commands and forward emails
mailClient.Send(message);
}
}
}
}
Option 3: Cloud-Based Solutions
For modern architectures:
- Amazon SES (Simple Email Service)
- SendGrid
- Mailgun
These require minimal configuration:
// AWS SES configuration example
var client = new AmazonSimpleEmailServiceClient(
"accessKey",
"secretKey",
RegionEndpoint.USEast1);
Factor | IIS SMTP | Modern Alternative |
---|---|---|
Port 25 Listening | Built-in | Requires configuration |
Queue Management | Basic | Advanced in most alternatives |
Security Updates | None (deprecated) | Actively maintained |
For most Windows Server environments that previously relied on IIS SMTP, we recommend hMailServer for its:
- Native Windows service architecture
- Compatibility with legacy applications
- Web administration interface
- Active development community
The installation and basic configuration can be automated:
REM Batch script for automated hMailServer setup
hMailServer.exe /silent /install=full /port=25
/domain=yourdomain.com
/relay=smpt.provider.com:587
When Microsoft deprecated the IIS SMTP Server in Windows Server 2012 (as documented in Technet article), it left many developers scrambling for alternatives. The official documentation's suggestion of "System.Net.Smtp" was indeed misleading - it likely meant System.Net.Mail
, which is merely a .NET namespace for sending emails, not a server implementation.
For developers needing SMTP server functionality, here are the primary alternatives:
1. Third-Party SMTP Servers
Popular options include:
- hMailServer (open source)
- MailEnable (commercial)
- Postfix (with Windows compatibility layer)
2. Azure/Cloud Services
Microsoft's recommended path for modern applications:
// Example using SendGrid API (Azure-compatible)
var client = new SendGridClient(apiKey);
var msg = new SendGridMessage()
{
From = new EmailAddress("sender@domain.com"),
Subject = "Test Email",
PlainTextContent = "This is a test"
};
msg.AddTo(new EmailAddress("recipient@domain.com"));
await client.SendEmailAsync(msg);
3. Building Your Own Relay
For scenarios requiring local processing:
// Minimal SMTP relay using System.Net.Mail
public void RelayEmail(MailMessage message)
{
using (SmtpClient client = new SmtpClient("your.mailserver.com"))
{
client.Credentials = new NetworkCredential("username", "password");
client.Send(message);
}
}
Key differences from IIS SMTP Server:
- Pickup directory functionality must be custom-implemented
- No built-in SMTP service control panel
- Requires separate installation for local delivery
For developers needing to maintain similar functionality:
// Complete SMTP proxy implementation
public class SmtpProxyService : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var listener = new TcpListener(IPAddress.Any, 25);
listener.Start();
while (!stoppingToken.IsCancellationRequested)
{
var client = await listener.AcceptTcpClientAsync();
_ = ProcessClientAsync(client);
}
}
private async Task ProcessClientAsync(TcpClient client)
{
using (client)
using (var stream = client.GetStream())
using (var relay = new SmtpClient("smtp.relay.com"))
{
// Implement SMTP protocol handling here
// Forward to actual SMTP server
}
}
}
For production environments, consider implementing proper authentication, TLS support, and queue management.