Βιβλιοθήκη ανοιχτού κώδικα .NET για IMAP, POP3 και SMTP
Δωρεάν βιβλιοθήκη C# .NET για δημιουργία μηνυμάτων με συνημμένα, Κρυπτογράφηση/αποκρυπτογράφηση μηνυμάτων με PGP/MIME.
Το MailKit είναι μια βιβλιοθήκη ανοιχτού κώδικα .NET για IMAP, POP3 και SMTP. Είναι μια βιβλιοθήκη προγράμματος-πελάτη αλληλογραφίας πολλαπλών πλατφορμών χτισμένη πάνω από το MimeKit. Το έργο στοχεύει να παρέχει ισχυρές, πλήρως εξοπλισμένες και συμβατές με RFC υλοποιήσεις πελάτη SMTP, POP3 και IMAP.
Το API υποστηρίζει πολλές σημαντικές δυνατότητες που σχετίζονται με τον έλεγχο ταυτότητας SASL, την υποστήριξη διακομιστή μεσολάβησης, τον πελάτη SMTP, τον πελάτη POP3, τον πελάτη IMAP4, την ταξινόμηση από την πλευρά του πελάτη και τη διοχέτευση μηνυμάτων.
Ξεκινώντας με το MailKit
Ο ευκολότερος τρόπος εγκατάστασης του MailKit είναι μέσω του NuGet. Για να το χρησιμοποιήσετε από την Κονσόλα Package Manager του Visual Studio, εισαγάγετε την ακόλουθη εντολή.
εγκαταστήστε το Mailkit μέσω NuGet
Install-Package MailKit
Εγκαταστήστε το Mailkit μέσω του GitHub
git clone --recursive https://github.com/jstedfast/MailKit.git
Δημιουργία νέων μηνυμάτων μέσω .NET
Η βιβλιοθήκη Open Source API MailKit επιτρέπει στους προγραμματιστές λογισμικού να δημιουργούν μηνύματα MIME με μερικές απλές εντολές. Ένα TextPart είναι ένα τμήμα MIME κόμβου φύλλου με τύπο μέσου κειμένου. Το πρώτο όρισμα στον κατασκευαστή TextPart καθορίζει τον υποτύπο του μέσου, σε αυτήν την περίπτωση, απλό. Ένας άλλος υποτύπος πολυμέσων που πιθανώς γνωρίζετε είναι ο υποτύπος HTML. Ο ευκολότερος τρόπος για να λάβετε και να ορίσετε τόσο το περιεχόμενο συμβολοσειράς του τμήματος MIME είναι η ιδιότητα Κείμενο.
Η βιβλιοθήκη Open Source API MailKit επιτρέπει στους προγραμματιστές λογισμικού να δημιουργούν μηνύματα MIME με λίγες απλές εντολές. Ένα TextPart είναι ένα τμήμα MIME κόμβου φύλλου με τύπο μέσου κειμένου. Το πρώτο όρισμα στον κατασκευαστή TextPart καθορίζει τον υποτύπο του μέσου, σε αυτήν την περίπτωση, απλό. Ένας άλλος υποτύπος πολυμέσων που πιθανώς γνωρίζετε είναι ο υποτύπος HTML. Ο ευκολότερος τρόπος για να λάβετε και να ορίσετε το περιεχόμενο συμβολοσειράς του τμήματος MIME είναι η ιδιότητα Κείμενο.
Δημιουργήστε και στείλτε μήνυμα δωρεάν χρησιμοποιώντας 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. Για να στείλετε ένα κείμενο/HTML και μια έκδοση κειμένου/απλής έκδοσης του μηνύματος, πρέπει να δημιουργήσετε ένα TextPart για κάθε τμήμα και στη συνέχεια να το προσθέσετε σε ένα πολυμερές/εναλλακτικό.
Δημιουργία μηνύματος με συνημμένα μέσω 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;
Κρυπτογράφηση/Αποκρυπτογράφηση μηνυμάτων με PGP/MIME
Η βιβλιοθήκη MailKit παρέχει δυνατότητες για κρυπτογράφηση μηνυμάτων email με PGP/MIME μέσα σε εφαρμογές .NET. Το PGP/MIME χρησιμοποιεί ένα τμήμα MIME με έναν πολυμερή/κρυπτογραφημένο τύπο 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;
}
}