Publicada:

.NET 6.0 - Envíe un correo electrónico a través de SMTP con MailKit

Tutorial construido con .NET 6.0

Otras versiones disponibles:

Para obtener más información sobre MailKit, consulte https://github.com/jstedfast/MailKit.

Este es un ejemplo rápido de cómo enviar un correo electrónico en .NET 6.0 usando la biblioteca del cliente de correo electrónico MailKit.

Para obtener más información sobre MailKit, consulte https://github.com/jstedfast/MailKit.


Instalar MailKit a través de NuGet

.NET Core CLI: dotnet add package MailKit

Visual Studio Package Manager Console: Install-Package MailKit


Enviar un correo electrónico HTML en .NET 6.0

Este código envía un correo electrónico HTML simple utilizando el servicio SMTP falso de Ethereal. Para una prueba rápida, puede crear una bandeja de entrada temporal en https://ethereal.email/ y copiar las opciones de configuración de SMTP. Hay instrucciones más abajo sobre cómo usar algunos otros proveedores de SMTP populares: Gmail, Hotmail, Office 365 y AWS SES.

// create email message
var email = new MimeMessage();
email.From.Add(MailboxAddress.Parse("[email protected]"));
email.To.Add(MailboxAddress.Parse("[email protected]"));
email.Subject = "Test Email Subject";
email.Body = new TextPart(TextFormat.Html) { Text = "<h1>Example HTML Message Body</h1>" };

// send email
using var smtp = new SmtpClient();
smtp.Connect("smtp.ethereal.email", 587, SecureSocketOptions.StartTls);
smtp.Authenticate("[USERNAME]", "[PASSWORD]");
smtp.Send(email);
smtp.Disconnect(true);


Envíe un correo electrónico de texto sin formato en .NET 6.0

Este código envía el mismo correo electrónico que el anterior con un cuerpo de texto sin formato.

// create email message
var email = new MimeMessage();
email.From.Add(MailboxAddress.Parse("[email protected]"));
email.To.Add(MailboxAddress.Parse("[email protected]"));
email.Subject = "Test Email Subject";
email.Body = new TextPart(TextFormat.Plain) { Text = "Example Plain Text Message Body" };

// send email
using var smtp = new SmtpClient();
smtp.Connect("smtp.ethereal.email", 587, SecureSocketOptions.StartTls);
smtp.Authenticate("[USERNAME]", "[PASSWORD]");
smtp.Send(email);
smtp.Disconnect(true);


Envíe correo electrónico SMTP con Gmail, Hotmail, Office 365 o AWS SES

Para cambiar el código anterior para usar un proveedor de correo electrónico diferente, simplemente actualice el parámetro de host (el primer parámetro) pasado al método smtp.Connect(), por ejemplo:

// gmail
smtp.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);

// hotmail
smtp.Connect("smtp.live.com", 587, SecureSocketOptions.StartTls);

// office 365
smtp.Connect("smtp.office365.com", 587, SecureSocketOptions.StartTls);

// aws ses (simple email service)
smtp.Connect("email-smtp.[AWS REGION].amazonaws.com", 587, SecureSocketOptions.StartTls)


Wrap it up in an Email Service

Para encapsular la funcionalidad de envío de correo electrónico para que sea fácil enviar correo electrónico desde cualquier lugar en su aplicación .NET, puede crear una clase EmailService y una interfaz IEmailService como abajo.

El servicio de correo electrónico está tomado de un tutorial de API repetitivo de autenticación de .NET que publiqué recientemente. Para probar la funcionalidad de envío de correo electrónico, puede ejecutar la API localmente y registrar una cuenta que activa un correo electrónico de verificación. Para obtener instrucciones completas, consulte .NET 6.0 - Boilerplate API Tutorial with Email Sign Up, Verification, Authentication & Forgot Password.

namespace WebApi.Services;

using MailKit.Net.Smtp;
using MailKit.Security;
using Microsoft.Extensions.Options;
using MimeKit;
using MimeKit.Text;
using WebApi.Helpers;

public interface IEmailService
{
    void Send(string to, string subject, string html, string from = null);
}

public class EmailService : IEmailService
{
    private readonly AppSettings _appSettings;

    public EmailService(IOptions<AppSettings> appSettings)
    {
        _appSettings = appSettings.Value;
    }

    public void Send(string to, string subject, string html, string from = null)
    {
        // create message
        var email = new MimeMessage();
        email.From.Add(MailboxAddress.Parse(from ?? _appSettings.EmailFrom));
        email.To.Add(MailboxAddress.Parse(to));
        email.Subject = subject;
        email.Body = new TextPart(TextFormat.Html) { Text = html };

        // send email
        using var smtp = new SmtpClient();
        smtp.Connect(_appSettings.SmtpHost, _appSettings.SmtpPort, SecureSocketOptions.StartTls);
        smtp.Authenticate(_appSettings.SmtpUser, _appSettings.SmtpPass);
        smtp.Send(email);
        smtp.Disconnect(true);
    }
}

 


Suscríbete o Sígueme para actualizaciones

Suscríbete a mi canal de YouTube o sígueme en Twitter, Facebook o GitHub para recibir notificaciones cuando publique contenido nuevo.

Aparte de la codificación...

Actualmente estoy intentando viajar por Australia en motocicleta con mi esposa Tina en un par de Royal Enfield Himalayan. Puedes seguir nuestras aventuras en YouTube, Instagram y Facebook.


¿Necesita Ayuda .NET?

Buscar fiverr para encontrar ayuda rápidamente de desarrolladores .NET experimentados.