Heim  >  Artikel  >  Backend-Entwicklung  >  So löschen Sie IMAP-Nachrichten mit Golang

So löschen Sie IMAP-Nachrichten mit Golang

PHPz
PHPzOriginal
2023-04-05 10:29:261339Durchsuche

IMAP ist ein gängiges Netzwerkprotokoll, das zum Senden und Empfangen von E-Mails verwendet wird. In Golang können E-Mails ganz einfach per IMAP gelöscht werden. In diesem Artikel erfahren Sie, wie Sie IMAP-E-Mails mit Golang löschen.

Schritt 1: Importieren Sie die erforderlichen Bibliotheken

Zuerst müssen Sie die Bibliotheken „net/imap“ und „fmt“ in Golang importieren. Der Importcode lautet wie folgt:

import (
    "net/imap"
    "fmt"
)

Schritt 2: IMAP-Verbindung herstellen

Als nächstes müssen Sie eine Verbindung zum IMAP-Server herstellen. Sie müssen Informationen wie Serveradresse, Benutzername und Passwort angeben. Der Verbindungsaufbau kann über die Methode „Dial“ der IMAP-Bibliothek erfolgen.

conn, err := imap.DialTLS(serverAddr, nil)
if err != nil {
    log.Fatal(err)
}

Schritt 3: Melden Sie sich beim IMAP-Server an

Nachdem die Verbindung hergestellt wurde, müssen Sie sich beim IMAP-Server anmelden. Sie müssen Informationen wie Benutzernamen und Passwort angeben. Verwenden Sie die Methode „Login“ der IMAP-Bibliothek, um sich beim IMAP-Server anzumelden.

_, err = conn.Login(username, password)
if err != nil {
    log.Fatal(err)
}

Schritt 4: E-Mail-Adresse auswählen

Nach erfolgreicher Anmeldung müssen Sie die E-Mail-Adresse auswählen, von der Sie E-Mails löschen möchten. Postfächer können über die Methode „Auswählen“ der IMAP-Bibliothek ausgewählt werden.

_, err = conn.Select("INBOX", false)
if err != nil {
    log.Fatal(err)
}

Schritt fünf: E-Mails durchsuchen

Nachdem Sie Ihr Postfach ausgewählt haben, müssen Sie die E-Mails finden, die Sie löschen möchten. E-Mails können mit der „Suchen“-Methode der IMAP-Bibliothek durchsucht werden. Sie können nach E-Mail-Betreff, Absender usw. suchen.

// search for mails with 'subject' in subject and 'from' in sender
criteria := imap.NewSearchCriteria()
criteria.Header.Set("subject", "subject")
criteria.Header.Set("from", "from")

// execute search
uids, err := conn.Search(criteria)
if err != nil {
    log.Fatal(err)
}

Schritt 6: Markieren Sie die Nachricht als gelöscht

Nachdem Sie die Nachricht gefunden haben, die Sie löschen möchten, müssen Sie die Nachricht als gelöscht markieren. Nachrichten können mit der „Store“-Methode der IMAP-Bibliothek markiert werden. Bei dieser Methode müssen Sie die Sequenznummer der zu kennzeichnenden Nachricht und den Tag-Typ angeben.

// mark mails as deleted
seqSet := new(imap.SeqSet)
seqSet.AddNum(uids...)
delFlags := []interface{}{imap.DeletedFlag}
err = conn.Store(seqSet, "+FLAGS", delFlags, nil)
if err != nil {
    log.Fatal(err)
}

Schritt sieben: Markierte Nachrichten löschen

Abschließend müssen Sie die markierten Nachrichten löschen. Gekennzeichnete Nachrichten können mit der Methode „Expunge“ der IMAP-Bibliothek gelöscht werden.

// delete mails
if err = conn.Expunge(nil); err != nil {
    log.Fatal(err)
}

Vollständiges Codebeispiel

Das Folgende ist der vollständige Beispielcode zum Löschen von IMAP-E-Mails mit Golang:

package main

import (
    "fmt"
    "log"
    "net/mail"

    "github.com/emersion/go-imap"
    "github.com/emersion/go-imap/client"
    "github.com/emersion/go-message/charset"
)

func main() {
    // Connect to the server
    c, err := client.DialTLS("mail.example.com:993", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer c.Logout()

    // Login
    if err := c.Login("user@example.com", "password"); err != nil {
        log.Fatal(err)
    }

    // Select mailbox
    mbox, err := c.Select("INBOX", false)
    if err != nil {
        log.Fatal(err)
    }

    // Search for messages
    charsetReader := charset.Reader
    msgs := make(chan *imap.Message, 10)
    done := make(chan error, 1)
    go func() {
        done <- c.List("", "INBOX", msgs)
    }()
    for msg := range msgs {
        r := msg.GetBody(&imap.BodySectionName{section})
        if r == nil {
            continue
        }
        if _, err := mail.ReadMessage(charsetReader(r)); err != nil {
            log.Fatal(err)
        }

        // Delete message
        seqSet := new(imap.SeqSet)
        seqSet.AddNum(msg.SeqNum)
        item := imap.FormatFlagsOp(imap.AddFlags, true)
        flags := []interface{}{imap.DeletedFlag}
        if err := c.Store(seqSet, item, flags, nil); err != nil {
            log.Fatal(err)
        }
    }

    // Expunge deleted messages
    if err := c.Expunge(nil); err != nil {
        log.Fatal(err)
    }

    if err := <-done; err != nil {
        log.Fatal(err)
    }

    fmt.Println("Done!")
}

Das Obige ist der Prozess und das vollständige Codebeispiel zum Löschen von IMAP-E-Mails mit Golang.

Das obige ist der detaillierte Inhalt vonSo löschen Sie IMAP-Nachrichten mit Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn