ホームページ  >  記事  >  バックエンド開発  >  Golangを使ってIMAPメールを削除する方法

Golangを使ってIMAPメールを削除する方法

PHPz
PHPzオリジナル
2023-04-05 10:29:261272ブラウズ

IMAP は、電子メールの送受信に使用される一般的なネットワーク プロトコルです。 Golang では、IMAP を使用して簡単にメールを削除できます。この記事ではGolangを使ってIMAPメールを削除する方法を紹介します。

ステップ 1: 必要なライブラリをインポートする

まず、Golang に「net/imap」ライブラリと「fmt」ライブラリをインポートする必要があります。インポート コードは次のとおりです。

import (
    "net/imap"
    "fmt"
)

ステップ 2: IMAP 接続を確立する

次に、IMAP サーバーとの接続を確立する必要があります。サーバーアドレス、ユーザー名、パスワードなどの情報を提供する必要があります。接続は、IMAP ライブラリの「Dial」メソッドを使用して確立できます。

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

ステップ 3: IMAP サーバーにログインする

接続が確立されたら、IMAP サーバーにログインする必要があります。ユーザー名やパスワードなどの情報を入力する必要があります。 IMAP ライブラリの「Login」メソッドを使用して、IMAP サーバーにログインできます。

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

ステップ 4: 電子メール アドレスの選択

ログインに成功したら、電子メールを削除する電子メール アドレスを選択する必要があります。メールボックスは、IMAP ライブラリの「選択」メソッドを使用して選択できます。

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

ステップ 5: 電子メールを検索する

メールボックスを選択した後、削除する電子メールを見つける必要があります。 IMAPライブラリの「検索」メソッドを使用してメールを検索できます。メールの件名や送信者などで検索できます。

// 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)
}

ステップ 6: メッセージを削除済みとしてマークする

削除するメッセージを見つけたら、そのメッセージを削除済みとしてマークする必要があります。メッセージは、IMAP ライブラリの「Store」メソッドを使用してタグ付けできます。このメソッドでは、タグ付けするメッセージのシーケンス番号とタグの種類を指定する必要があります。

// 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)
}

ステップ 7: フラグ付きメッセージを削除する

最後に、フラグ付きメッセージを削除する必要があります。フラグ付きメッセージは、IMAP ライブラリの「消去」メソッドを使用して削除できます。

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

完全なコード例

以下は、Golang を使用して IMAP 電子メールを削除するための完全なコード例です。

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!")
}

上記は、IMAP 電子メールを削除するプロセスと完全なコード例です。 Golangを使って。

以上がGolangを使ってIMAPメールを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。