Created
August 27, 2020 11:21
-
-
Save buroz/e0aa703ad0515edc5a656b3190f3a7f4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"flag" | |
"fmt" | |
"log" | |
"github.com/emersion/go-imap" | |
"github.com/emersion/go-imap/client" | |
) | |
func main() { | |
fmt.Println("8u202 | IMAP Check Tool \n") | |
usernamePtr := flag.String("username", "", "'string'") | |
passwordPtr := flag.String("password", "", "'string'") | |
hostPtr := flag.String("host", "", "'string'") | |
portPtr := flag.Int("port", 0, "number") | |
flag.Parse() | |
log.Println("Connecting to server...") | |
c, err := client.DialTLS(fmt.Sprintf("%s:%d", *hostPtr, *portPtr), nil) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer c.Logout() | |
log.Println("Connected") | |
if err := c.Login(*usernamePtr, *passwordPtr); err != nil { | |
log.Fatal(err) | |
} | |
log.Println("Logged in") | |
mailboxes := make(chan *imap.MailboxInfo, 10) | |
done := make(chan error, 1) | |
go func() { | |
done <- c.List("", "*", mailboxes) | |
}() | |
log.Println("Mailboxes:") | |
for m := range mailboxes { | |
log.Println("* " + m.Name) | |
} | |
if err := <-done; err != nil { | |
log.Fatal(err) | |
} | |
// Select INBOX | |
mbox, err := c.Select("INBOX", false) | |
if err != nil { | |
log.Fatal(err) | |
} | |
log.Println("Flags for INBOX:", mbox.Flags) | |
// Get the last 4 messages | |
from := uint32(1) | |
to := mbox.Messages | |
if mbox.Messages > 3 { | |
// We're using unsigned integers here, only substract if the result is > 0 | |
from = mbox.Messages - 3 | |
} | |
seqset := new(imap.SeqSet) | |
seqset.AddRange(from, to) | |
messages := make(chan *imap.Message, 10) | |
done = make(chan error, 1) | |
go func() { | |
done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope}, messages) | |
}() | |
log.Println("Last 4 messages:") | |
for msg := range messages { | |
log.Println("* " + msg.Envelope.Subject) | |
} | |
if err := <-done; err != nil { | |
log.Fatal(err) | |
} | |
log.Println("Done!") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment