.NET-HILFE

C# Imap (Wie es für Entwickler funktioniert)

Veröffentlicht 3. April 2024
Teilen Sie:

Im Bereich der E-Mail-Server-Kommunikation wird das Internet Message Access Protocol (IMAP) objekt spielt eine entscheidende Rolle bei der Erleichterung des nahtlosen Zugriffs auf E-Mail-Nachrichten, die auf einem Mail-Server gespeichert sind. Durch die Integration der neuen IMAP-Server-Funktionen des .NET-Framework in C#-Anwendungen können Entwickler robuste E-Mail-Clients erstellen, E-Mail-Verarbeitungsaufgaben automatisieren und die Produktivität steigern. Dieses umfassende Handbuch behandelt die Grundlagen der IMAP-Protokollintegration in C# und deckt die wichtigsten Konzepte, IMAP-Implementierungstechniken, Idle-Erweiterungen und praktische Codebeispiele ab, damit Entwickler die Leistungsfähigkeit von IMAP-Clients in ihren Anwendungen nutzen können. In diesem Handbuch wird auch erläutert, wie Sie PDF-Dateien mit IronPDF und C# IMAP daten.

1. Verständnis des IMAP-Client

IMAP ist ein weit verbreitetes Protokoll für den Zugriff auf und die Verwaltung von E-Mail-Nachrichten, die auf einem entfernten Mailserver gespeichert sind. Im Gegensatz zum älteren POP3-Protokoll, bei dem die E-Mails auf einen lokalen E-Mail-Client heruntergeladen und anschließend vom E-Mail-Server entfernt werden, können die Benutzer bei IMAP-Servern die erste Nachricht anzeigen und die E-Mails direkt auf dem Server organisieren und bearbeiten. Dies ermöglicht die Synchronisierung von E-Mails über mehrere Geräte hinweg und bietet einen flexibleren Ansatz für die E-Mail-Verwaltung.

2. Hauptmerkmale von IMAP

  1. Synchronisierung von Nachrichten: IMAP ermöglicht es den Clients, E-Mail-Nachrichten, Ordner und den Postfachstatus mit dem Server zu synchronisieren, wodurch ein konsistenter Zugriff auf die neuesten E-Mail-Daten von jedem Gerät aus gewährleistet wird.

  2. Verwaltung von Ordnern: IMAP unterstützt die Erstellung, Umbenennung, Löschung und Organisation von E-Mail-Ordnern auf dem Server, so dass die Benutzer ihre E-Mails in logischen Kategorien organisieren können.

  3. Abrufen und Verarbeiten von Nachrichten: Mit IMAP können Clients einzelne E-Mail-Nachrichten oder ganze Threads direkt vom Server abrufen, suchen, lesen, verschieben, kopieren und löschen.

  4. E-Mail-Kennzeichnung und Statusaktualisierung: IMAP ermöglicht es Clients, Nachrichten zu kennzeichnen, sie als gelesen oder ungelesen zu markieren und Nachrichtenkennzeichnungen wie "gesehen", "beantwortet" oder "gekennzeichnet" zu verwalten, was eine bessere Kontrolle über den E-Mail-Status ermöglicht.

3. Implementierung eines IMAP-Servers in C#;

Um IMAP-Funktionen in C#-Anwendungen zu integrieren, können Entwickler auf Bibliotheken von Drittanbietern wie MailKit oder OpenPop.NET zurückgreifen, die umfassende Unterstützung für IMAP-Vorgänge bieten. Sehen wir uns ein einfaches Beispiel für die Verwendung von MailKit an, um einen Benutzer mit einem IMAP-Server zu verbinden, E-Mail-Nachrichten abzurufen und grundlegende Operationen durchzuführen.

Bevor wir zum Code-Beispiel kommen, müssen Sie einige Schritte unternehmen, um Ihr App-Passwort zu erhalten, das erforderlich ist, um den IMAP-Server für den Zugriff auf Ihre E-Mails zu nutzen.

  1. Gehen Sie zu Ihrem Google Mail-Konto und klicken Sie auf Einstellungen.

  2. Gehen Sie in den Einstellungen zum Abschnitt IMAP und aktivieren Sie die folgenden Kontrollkästchen.

    C# Imap (Wie es für Entwickler funktioniert): Abbildung 1 - IMAP-Einstellungen

  3. Gehen Sie dann zu Ihrem Google-Konto und suchen Sie die zweistufige Verifizierung.

    C# Imap (Wie es für Entwickler funktioniert): Abbildung 2 - Zweistufige Verifizierung

  4. Scrollen Sie auf der Seite mit der zweistufigen Verifizierung bis zum Ende und suchen Sie nach App Password.

    C# Imap (Wie es für Entwickler funktioniert): Abbildung 3 - App-Passwörter

  5. Geben Sie dann den Namen Ihrer Anwendung ein und klicken Sie auf die Schaltfläche Erstellen.

    C# Imap (Wie es für Entwickler funktioniert): Abbildung 4 - App-Passwort erstellen

  6. Das App-Passwort wurde erfolgreich generiert.

    C# Imap (Wie es für Entwickler funktioniert): Abbildung 5 - Genearated App Passwort

    Sobald die Konfigurationen abgeschlossen sind und das App-Passwort erstellt wurde, können wir uns dem Code widmen.

//Install-Package MailKit
using System;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";//email Address
        string password = "wiie scqg qxpr gqoz";// App Password
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder or any special folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                foreach (var uid in uids)
                {
                    // Retrieve the message by UID
                    var message = client.Inbox.GetMessage(uid);
                    // Display message details
                    Console.WriteLine($"From: {message.From}");
                    Console.WriteLine($"Subject: {message.Subject}");
                    Console.WriteLine($"Date: {message.Date}");
                    Console.WriteLine($"Body: {message.TextBody}");
                    Console.WriteLine();
                }
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
//Install-Package MailKit
using System;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";//email Address
        string password = "wiie scqg qxpr gqoz";// App Password
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder or any special folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                foreach (var uid in uids)
                {
                    // Retrieve the message by UID
                    var message = client.Inbox.GetMessage(uid);
                    // Display message details
                    Console.WriteLine($"From: {message.From}");
                    Console.WriteLine($"Subject: {message.Subject}");
                    Console.WriteLine($"Date: {message.Date}");
                    Console.WriteLine($"Body: {message.TextBody}");
                    Console.WriteLine();
                }
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
'Install-Package MailKit
Imports System
Imports MailKit.Net.Imap
Imports MailKit.Search
Imports MimeKit
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' IMAP server settings
		Dim imapServer As String = "imap.gmail.com"
		Dim imapPort As Integer = 993
		Dim useSsl As Boolean = True
		' IMAP credentials
		Dim username As String = "buttwaleed121@gmail.com" 'email Address
		Dim password As String = "wiie scqg qxpr gqoz" ' App Password
		Try
			Using client = New ImapClient()
				' Connect to the IMAP server
				client.Connect(imapServer, imapPort, useSsl)
				' Authenticate with the server
				client.Authenticate(username, password)
				' Select the INBOX folder or any special folder
				client.Inbox.Open(FolderAccess.ReadOnly)
				' Search for unread messages
				Dim searchQuery = SearchQuery.NotSeen
				Dim uids = client.Inbox.Search(searchQuery)
				For Each uid In uids
					' Retrieve the message by UID
					Dim message = client.Inbox.GetMessage(uid)
					' Display message details
					Console.WriteLine($"From: {message.From}")
					Console.WriteLine($"Subject: {message.Subject}")
					Console.WriteLine($"Date: {message.Date}")
					Console.WriteLine($"Body: {message.TextBody}")
					Console.WriteLine()
				Next uid
				' Disconnect from the server
				client.Disconnect(True)
			End Using
		Catch ex As Exception
			Console.WriteLine($"Error: {ex.Message}")
		End Try
	End Sub
End Class
VB   C#

In diesem Codebeispiel verwenden wir MailKit, um eine Verbindung zu einem IMAP-Server herzustellen, unsere Verbindung mit dem Server anhand der bereitgestellten Anmeldeinformationen zu authentifizieren und ungelesene E-Mail-Nachrichten aus dem Ordner INBOX abzurufen. Anschließend wird die Liste der ungelesenen Nachrichten-UIDs durchlaufen, jede Nachricht nach UID abgerufen und ihre Details einschließlich Absender, Betreff, Datum und Text angezeigt.

Ausgabe

C# Imap (Wie es für Entwickler funktioniert): Abbildung 6 - Konsolenausgabe

4. IronPDF

IronPDF ist eine leistungsstarke C#-Bibliothek, die die Erstellung, Bearbeitung und Darstellung von PDF-Dokumenten in .NET-Anwendungen vereinfacht. Mit seiner intuitiven API und seinem umfangreichen Funktionsumfang ermöglicht IronPDF Entwicklern die nahtlose programmgesteuerte Erzeugung, Bearbeitung und Manipulation von PDF-Dateien und erweitert so die Vielseitigkeit und Funktionalität ihrer Anwendungen. Egal, ob Sie dynamische Berichte erstellen, HTML-Inhalte in PDF konvertieren, Text und Bilder aus vorhandenen PDFs extrahieren oder Dokumente digital signieren möchten, IronPDF bietet ein umfassendes Toolkit für Ihre PDF-Verarbeitungsanforderungen. Durch den Einsatz von IronPDF können Entwickler ihre Aufgaben im Zusammenhang mit PDF optimieren und mühelos hochwertige Dokumentenlösungen bereitstellen.

4.1. IronPDF installieren

IronPDF kann mit dem NuGet-Paketmanager installiert werden, indem Sie den folgenden Befehl ausführen.

Install-Package IronPdf

4.2. PDF mit E-Mails vom IMAP-Server erstellen

using System;
using System.Collections.Generic;
using System.IO;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
using IronPdf;
using MailKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";
        string password = "wiie scqg qxpr gqoz";
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                // Create a list to store message details
                var messages = new List<string>();
                // Retrieve details for the first 100 unread messages
                for (int i = 0; i < Math.Min(uids.Count, 100); i++)
                {
                    var uid = uids [i];
                    var message = client.Inbox.GetMessage(uid);
                    // Add message details to the list
                    messages.Add($"From: {message.From}");
                    messages.Add($"Subject: {message.Subject}");
                    messages.Add($"Date: {message.Date}");
                    messages.Add($"Body: {message.TextBody}");
                    messages.Add(""); // Add an empty line for separation
                }
                // Generate PDF report
                GeneratePdfReport(messages);
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
    static void GeneratePdfReport(List<string> messages)
    {
        try
        {
            var pdf = new ChromePdfRenderer();
            // Convert message details to HTML format
            string htmlContent = "<h1>Not Seen Emails</h1><hr/>";
            foreach (var message in messages)
            {
                htmlContent += $"<p style='padding-top:30px;'>{message}</p>";
            }
            // Render HTML content to PDF
            var pdfOutput = pdf.RenderHtmlAsPdf(htmlContent);
            // Save PDF to file
            var outputPath = "Email_Report.pdf";
            pdfOutput.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated successfully: {outputPath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF report: {ex.Message}");
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
using IronPdf;
using MailKit;
class Program
{
    static void Main(string [] args)
    {
        // IMAP server settings
        string imapServer = "imap.gmail.com";
        int imapPort = 993;
        bool useSsl = true;
        // IMAP credentials
        string username = "buttwaleed121@gmail.com";
        string password = "wiie scqg qxpr gqoz";
        try
        {
            using (var client = new ImapClient())
            {
                // Connect to the IMAP server
                client.Connect(imapServer, imapPort, useSsl);
                // Authenticate with the server
                client.Authenticate(username, password);
                // Select the INBOX folder
                client.Inbox.Open(FolderAccess.ReadOnly);
                // Search for unread messages
                var searchQuery = SearchQuery.NotSeen;
                var uids = client.Inbox.Search(searchQuery);
                // Create a list to store message details
                var messages = new List<string>();
                // Retrieve details for the first 100 unread messages
                for (int i = 0; i < Math.Min(uids.Count, 100); i++)
                {
                    var uid = uids [i];
                    var message = client.Inbox.GetMessage(uid);
                    // Add message details to the list
                    messages.Add($"From: {message.From}");
                    messages.Add($"Subject: {message.Subject}");
                    messages.Add($"Date: {message.Date}");
                    messages.Add($"Body: {message.TextBody}");
                    messages.Add(""); // Add an empty line for separation
                }
                // Generate PDF report
                GeneratePdfReport(messages);
                // Disconnect from the server
                client.Disconnect(true);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
    static void GeneratePdfReport(List<string> messages)
    {
        try
        {
            var pdf = new ChromePdfRenderer();
            // Convert message details to HTML format
            string htmlContent = "<h1>Not Seen Emails</h1><hr/>";
            foreach (var message in messages)
            {
                htmlContent += $"<p style='padding-top:30px;'>{message}</p>";
            }
            // Render HTML content to PDF
            var pdfOutput = pdf.RenderHtmlAsPdf(htmlContent);
            // Save PDF to file
            var outputPath = "Email_Report.pdf";
            pdfOutput.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated successfully: {outputPath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF report: {ex.Message}");
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports MailKit.Net.Imap
Imports MailKit.Search
Imports MimeKit
Imports IronPdf
Imports MailKit
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' IMAP server settings
		Dim imapServer As String = "imap.gmail.com"
		Dim imapPort As Integer = 993
		Dim useSsl As Boolean = True
		' IMAP credentials
		Dim username As String = "buttwaleed121@gmail.com"
		Dim password As String = "wiie scqg qxpr gqoz"
		Try
			Using client = New ImapClient()
				' Connect to the IMAP server
				client.Connect(imapServer, imapPort, useSsl)
				' Authenticate with the server
				client.Authenticate(username, password)
				' Select the INBOX folder
				client.Inbox.Open(FolderAccess.ReadOnly)
				' Search for unread messages
				Dim searchQuery = SearchQuery.NotSeen
				Dim uids = client.Inbox.Search(searchQuery)
				' Create a list to store message details
				Dim messages = New List(Of String)()
				' Retrieve details for the first 100 unread messages
				For i As Integer = 0 To Math.Min(uids.Count, 100) - 1
					Dim uid = uids (i)
					Dim message = client.Inbox.GetMessage(uid)
					' Add message details to the list
					messages.Add($"From: {message.From}")
					messages.Add($"Subject: {message.Subject}")
					messages.Add($"Date: {message.Date}")
					messages.Add($"Body: {message.TextBody}")
					messages.Add("") ' Add an empty line for separation
				Next i
				' Generate PDF report
				GeneratePdfReport(messages)
				' Disconnect from the server
				client.Disconnect(True)
			End Using
		Catch ex As Exception
			Console.WriteLine($"Error: {ex.Message}")
		End Try
	End Sub
	Private Shared Sub GeneratePdfReport(ByVal messages As List(Of String))
		Try
			Dim pdf = New ChromePdfRenderer()
			' Convert message details to HTML format
			Dim htmlContent As String = "<h1>Not Seen Emails</h1><hr/>"
			For Each message In messages
				htmlContent &= $"<p style='padding-top:30px;'>{message}</p>"
			Next message
			' Render HTML content to PDF
			Dim pdfOutput = pdf.RenderHtmlAsPdf(htmlContent)
			' Save PDF to file
			Dim outputPath = "Email_Report.pdf"
			pdfOutput.SaveAs(outputPath)
			Console.WriteLine($"PDF report generated successfully: {outputPath}")
		Catch ex As Exception
			Console.WriteLine($"Error generating PDF report: {ex.Message}")
		End Try
	End Sub
End Class
VB   C#
  1. Wir erstellen eine Liste von Nachrichten, um die Details der ersten 100 ungelesenen E-Mails zu speichern.

  2. Innerhalb der Schleife zum Abrufen von E-Mail-Details fügen wir die Details jeder Nachricht der Liste Meldungen hinzu.

  3. Nach dem Abrufen der Details für alle ungelesenen E-Mails oder die ersten 100 E-Mails rufen wir die Methode GeneratePdfReport auf, um einen PDF-Bericht mit diesen Details zu erstellen.

  4. In der Methode GeneratePdfReport konvertieren wir die Nachrichtendetails in das HTML-Format und verwenden IronPDF, um diesen HTML-Inhalt in eine PDF-Datei zu übertragen.

  5. Der PDF-Bericht wird in einer Datei namens "Email_Report.pdf" gespeichert.

    Sie können diesen Code testen, indem Sie die Standardeinstellungen und Anmeldeinformationen des IMAP-Servers durch Ihre tatsächlichen Serverinformationen ersetzen und das Programm ausführen. Es stellt eine Verbindung zum IMAP-Server her, ruft die Details der ersten 100 ungelesenen E-Mails ab, erstellt einen PDF-Bericht mit diesen Details und speichert ihn in einer Datei.

    C# Imap (Wie es für Entwickler funktioniert): Abbildung 7 - E-Mail-Berichtsausgabe

5. Schlussfolgerung

Die Integration von IMAP-Funktionen in C#-Anwendungen eröffnet eine Vielzahl von Möglichkeiten für die E-Mail-Kommunikation, die Automatisierung und die Steigerung der Produktivität. Wenn Sie die Grundlagen von IMAP verstehen und leistungsstarke Bibliotheken wie MailKit .NET nutzen, können Entwickler mit Leichtigkeit funktionsreiche E-Mail-Clients erstellen, E-Mail-Verarbeitungsaufgaben automatisieren und Kommunikations-Workflows rationalisieren.

Mit dem praktischen Wissen und den Codebeispielen in diesem Handbuch sind Entwickler in der Lage, die Leistungsfähigkeit der IMAP-Integration in ihren C#-Anwendungen zu nutzen und neue Möglichkeiten für Innovation und Effizienz in der E-Mail-Kommunikation zu erschließen. Mit der Hilfe von IronPDF können Sie Anhänge als PDFs speichern oder E-Mails als PDF-Dateien importieren oder E-Mails als PDF-Dokumente speichern.

Um mehr über IronPDF und seine Funktionen zu erfahren, besuchen Sie die offizielle dokumentationsseite.

< PREVIOUS
C# Groupby (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Log (Wie es für Entwickler funktioniert)

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 11,308,499 Lizenzen anzeigen >