How do I send an email using ASP.NET? Print

  • 40

How to Send Email from ASP.NET Applications

Updated: This guide covers both .NET Core/8/9/10 and .NET Framework 4.x email sending.

SMTP Settings for Adaptive Web Hosting

Setting Value
SMTP Server mail.yourdomain.com
Port (TLS) 587
Port (SSL) 465
Username Full email address
Authentication Required

ASP.NET Core / .NET 8/9/10 (Recommended)

Option 1: Using MailKit (Recommended)

First, install the NuGet package:

dotnet add package MailKit

Then send email:

using MailKit.Net.Smtp;
using MimeKit;

public async Task SendEmailAsync(string to, string subject, string body)
{
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("Your Name", "[email protected]"));
    message.To.Add(new MailboxAddress("", to));
    message.Subject = subject;
    message.Body = new TextPart("html") { Text = body };

    using var client = new SmtpClient();
    await client.ConnectAsync("mail.yourdomain.com", 587, MailKit.Security.SecureSocketOptions.StartTls);
    await client.AuthenticateAsync("[email protected]", "your-password");
    await client.SendAsync(message);
    await client.DisconnectAsync(true);
}

Option 2: Using System.Net.Mail (Built-in)

using System.Net;
using System.Net.Mail;

public async Task SendEmailAsync(string to, string subject, string body)
{
    using var message = new MailMessage();
    message.From = new MailAddress("[email protected]", "Your Name");
    message.To.Add(new MailAddress(to));
    message.Subject = subject;
    message.Body = body;
    message.IsBodyHtml = true;

    using var client = new SmtpClient("mail.yourdomain.com", 587)
    {
        Credentials = new NetworkCredential("[email protected]", "your-password"),
        EnableSsl = true
    };

    await client.SendMailAsync(message);
}

Configuration in appsettings.json

{
  "EmailSettings": {
    "SmtpServer": "mail.yourdomain.com",
    "Port": 587,
    "Username": "[email protected]",
    "Password": "your-password",
    "FromEmail": "[email protected]",
    "FromName": "Your Application"
  }
}

Email Service with Dependency Injection

// In Program.cs
builder.Services.Configure<EmailSettings>(
    builder.Configuration.GetSection("EmailSettings"));
builder.Services.AddTransient<IEmailService, EmailService>();

// EmailService.cs
public class EmailService : IEmailService
{
    private readonly EmailSettings _settings;

    public EmailService(IOptions<EmailSettings> settings)
    {
        _settings = settings.Value;
    }

    public async Task SendEmailAsync(string to, string subject, string body)
    {
        // Use MailKit or SmtpClient as shown above
    }
}

ASP.NET Framework 4.x (Legacy)

using System.Net;
using System.Net.Mail;

MailMessage message = new MailMessage();
message.From = new MailAddress("[email protected]");
message.To.Add(new MailAddress("[email protected]"));
message.Subject = "Test Email";
message.Body = "This is a test email.";
message.IsBodyHtml = true;

SmtpClient smtp = new SmtpClient();
smtp.Host = "mail.yourdomain.com";
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.Credentials = new NetworkCredential("[email protected]", "your-password");

smtp.Send(message);

Web.config Configuration

<system.net>
  <mailSettings>
    <smtp from="[email protected]">
      <network host="mail.yourdomain.com"
               port="587"
               userName="[email protected]"
               password="your-password"
               enableSsl="true" />
    </smtp>
  </mailSettings>
</system.net>

Troubleshooting

Error Solution
Authentication failed Verify email and password; use full email as username
Connection timeout Try port 465 with SSL instead of 587 with TLS
Certificate error Ensure SSL/TLS is enabled; check certificate validity
Relay denied Must authenticate; from address must match account

Security Best Practices

  • Never hardcode passwords in code - use configuration
  • Always use TLS/SSL encryption (port 587 or 465)
  • Use environment variables for production credentials
  • Implement rate limiting to prevent abuse

Was this answer helpful?

« Back