Biblioteca .NET de código abierto para IMAP, POP3 y SMTP

Biblioteca C# .NET gratuita para generar mensajes con archivos adjuntos, cifrar/descifrar mensajes con PGP/MIME. 

MailKit es una biblioteca .NET de código abierto para IMAP, POP3 y SMTP. Es una biblioteca de cliente de correo multiplataforma construida sobre MimeKit. El proyecto tiene como objetivo proporcionar implementaciones de clientes SMTP, POP3 e IMAP sólidas, con todas las funciones y compatibles con RFC.

La API admite varias funciones importantes relacionadas con la autenticación SASL, compatibilidad con proxy, cliente SMTP, cliente POP3, cliente IMAP4, clasificación del lado del cliente y subprocesos de mensajes.

Previous Next

Primeros pasos con MailKit

La forma más sencilla de instalar MailKit es a través de NuGet. Para usarlo desde la consola del administrador de paquetes de Visual Studio, ingrese el siguiente comando.

instalar Mailkit a través de NuGet

Install-Package MailKit  

Instalar Mailkit a través de GitHub 

git clone --recursive https://github.com/jstedfast/MailKit.git 

Crear nuevos mensajes a través de .NET

La biblioteca MailKit de API de código abierto permite a los desarrolladores de software crear mensajes MIME con unos pocos comandos simples. Un TextPart es un elemento MIME de nodo hoja con un tipo de medio de texto. El primer argumento del constructor TextPart especifica el subtipo de medios, en este caso, sin formato. Otro subtipo de medios con el que probablemente esté familiarizado es el subtipo HTML. La forma más fácil de obtener y establecer tanto el contenido de la cadena de la parte MIME es la propiedad Text.

La biblioteca MailKit de API de código abierto permite a los desarrolladores de software crear mensajes MIME con unos pocos comandos simples. Un TextPart es una parte MIME de nodo hoja con un tipo de medio de texto. El primer argumento del constructor TextPart especifica el subtipo de medios, en este caso, sin formato. Otro subtipo de medios con el que probablemente esté familiarizado es el subtipo HTML. La forma más sencilla de obtener y establecer el contenido de la cadena de la parte MIME es la propiedad Text.

Generar y enviar mensajes gratis usando C#

var message = new MimeMessage();
message.From.Add(new MailboxAddress("fred", "This email address is being protected from spam-bots. You need JavaScript enabled to view it."));
message.To.Add(new MailboxAddress("frans", "This email address is being protected from spam-bots. You need JavaScript enabled to view it."));
message.Subject = "FileFormat ";
message.Body = new TextPart("plain")
{
  Text = "File Format Developer Guide"
};
using (var client = new SmtpClient())
{
  // For demo-purposes,
  client.ServerCertificateValidationCallback = (s, c, h, e) => true;
  client.Connect("smtp.test.com", 587, false);
  // Note: only needed if the SMTP server requires authentication
  client.Authenticate("frans", "password");
  client.Send(message);
  client.Disconnect(true);
}                  

Generar mensaje con archivos adjuntos utilizando la API de .NET

MailKit API proporciona funciones para generar un mensaje con archivos adjuntos dentro de las aplicaciones .NET. Los archivos adjuntos son como cualquier otro MimePart; la principal diferencia es que contienen un encabezado de disposición de contenido que contiene el valor del archivo adjunto en lugar de un encabezado de disposición de contenido en línea o ningún encabezado. Para enviar tanto una versión de texto/HTML como de texto/sin formato del mensaje, debe crear un TextPart para cada parte y luego agregarlos a una alternativa/varias partes.

Crear mensaje con archivos adjuntos a través de C#


var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("Joey", "joey@friends.com"));
message.To.Add (new MailboxAddress ("Alice", "alice@wonderland.com"));
message.Subject = "How you doin?";
// create our message text, just like before (except don't set it as the message.Body)
var body = new TextPart ("plain") {
  Text = @"Hey Alice,
What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.
Will you be my +1?
-- Joey
"
};
// create an image attachment for the file located at path
var attachment = new MimePart ("image", "gif") {
  Content = new MimeContent (File.OpenRead (path), ContentEncoding.Default),
  ContentDisposition = new ContentDisposition (ContentDisposition.Attachment),
  ContentTransferEncoding = ContentEncoding.Base64,
  FileName = Path.GetFileName (path)
};
// now create the multipart/mixed container to hold the message text and the
// image attachment
var multipart = new Multipart ("mixed");
multipart.Add (body);
multipart.Add (attachment);
// now set the multipart/mixed as the message body
message.Body = multipart;
 

Cifrar/Descifrar Mensajes con PGP/MIME

La biblioteca MailKit proporciona funciones para cifrar mensajes de correo electrónico con PGP/MIME dentro de aplicaciones .NET. El PGP/MIME utiliza una parte MIME con un tipo MIME multiparte/encriptado para encapsular datos encriptados. Si desea encriptar un mensaje, siempre es un mejor enfoque usar SecureMailboxAddress en lugar de MailboxAddress para cada destinatario, lo que permitirá a los usuarios especificar la huella digital única de la clave PGP de cada destinatario.

Cifrado de mensajes con PGP/MIME a través de C#


public void Encrypt (MimeMessage message)
{
  // encrypt our message body using our custom GnuPG cryptography context
  using (var ctx = new MyGnuPGContext ()) {
    // Note: this assumes that each of the recipients has a PGP key associated
    // with their email address in the user's public keyring.
    // 
    // If this is not the case, you can use SecureMailboxAddresses instead of
    // normal MailboxAddresses which would allow you to specify the fingerprint
    // of their PGP keys. You could also choose to use one of the Encrypt()
    // overloads that take a list of PgpPublicKeys.
    message.Body = MultipartEncrypted.Encrypt (ctx, message.To.Mailboxes, message.Body);
  }
}

Descifrar mensajes PGP/MIME


public MimeEntity Decrypt (MimeMessage message)
{
  if (message.Body is MultipartEncrypted) {
    // the top-level MIME part of the message is encrypted using PGP/MIME
    var encrypted = (MultipartEncrypted) entity;
    return encrypted.Decrypt ();
  } else {
    // the top-level MIME part is not encrypted
    return message.Body;
  }
}
 Español