Библиотека .NET с открытым исходным кодом для IMAP, POP3 и SMTP

Бесплатная библиотека C# .NET для создания сообщений с вложениями, шифрования и расшифровки сообщений с помощью PGP/MIME. 

MailKit — это библиотека .NET с открытым исходным кодом для IMAP, POP3 и SMTP. Это кроссплатформенная библиотека почтового клиента, построенная на основе MimeKit. Проект направлен на предоставление надежных, полнофункциональных и RFC-совместимых клиентских реализаций SMTP, POP3 и IMAP.

API поддерживает несколько важных функций, связанных с аутентификацией SASL, поддержкой прокси, SMTP-клиентом, POP3-клиентом, IMAP4-клиентом, сортировкой на стороне клиента и потоковой передачей сообщений.

Previous Next

Начало работы с MailKit

Самый простой способ установить MailKit — через NuGet. Чтобы использовать его из консоли диспетчера пакетов Visual Studio, введите следующую команду.

установить Mailkit через NuGet

Install-Package MailKit  

Установите Mailkit через GitHub 

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

Создание новых сообщений через .NET

Библиотека MailKit API с открытым исходным кодом позволяет разработчикам программного обеспечения создавать сообщения MIME с помощью нескольких простых команд. TextPart — это часть MIME конечного узла с типом текстового носителя. Первый аргумент конструктора TextPart указывает подтип носителя, в данном случае обычный. Другой подтип медиа, с которым вы, вероятно, знакомы, — это подтип HTML. Самый простой способ получить и установить как строковое содержимое части MIME, так это свойство Text.

Библиотека Open Source API MailKit позволяет разработчикам программного обеспечения создавать сообщения MIME с помощью нескольких простых команд. TextPart — это MIME-часть листового узла с текстовым медиа-типом. Первый аргумент конструктора TextPart указывает подтип носителя, в данном случае обычный. Другой подтип медиа, с которым вы, вероятно, знакомы, — это подтип HTML. Самый простой способ как получить, так и установить строковое содержимое части MIME — это свойство Text.

Создавайте и отправляйте сообщения бесплатно с помощью 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);
}                  

Создание сообщения с вложениями с помощью .NET API

MailKit API предоставляет функции для создания сообщения с вложениями внутри приложений .NET. Вложения такие же, как и любой другой MimePart; основное отличие состоит в том, что они содержат заголовок content-disposition, содержащий значение вложения, вместо встроенного или вообще не содержат заголовка Content-Disposition. Чтобы отправить как текстовую/HTML-версию, так и текстовую/обычную версию сообщения, вам нужно создать TextPart для каждой части, а затем добавить их в multipart/alternative.

Создать сообщение с вложениями через С#


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;
 

Шифрование/дешифрование сообщений с помощью PGP/MIME

Библиотека MailKit предоставляет функции для шифрования сообщений электронной почты с помощью PGP/MIME внутри приложений .NET. PGP/MIME использует часть MIME с multipart/encrypted mime-типом для инкапсуляции зашифрованных данных. Если вы хотите зашифровать сообщение, всегда лучше использовать SecureMailboxAddress вместо MailboxAddress для каждого получателя, что позволит пользователям указать уникальный отпечаток ключа PGP каждого получателя.

Шифрование сообщений с помощью PGP/MIME через 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);
  }
}

Расшифровка сообщений 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;
  }
}
 Русский