From 07991688fbe83a5b6e3d2258bf0647fb70e9cc52 Mon Sep 17 00:00:00 2001 From: Thomas Schwery Date: Sun, 25 Jun 2017 21:02:20 +0000 Subject: [PATCH] SMTP and IMAP tools --- imap-listmails.go | 78 +++++++++++++++++++++++++++++++++++++++++++++++ smtp-sendmail.go | 23 ++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 imap-listmails.go create mode 100644 smtp-sendmail.go diff --git a/imap-listmails.go b/imap-listmails.go new file mode 100644 index 0000000..9e7b25e --- /dev/null +++ b/imap-listmails.go @@ -0,0 +1,78 @@ +package main + +import ( + "log" + + "github.com/emersion/go-imap/client" + "github.com/emersion/go-imap" +) + +func main() { + log.Println("Connecting to server...") + + // Connect to server + c, err := client.Dial("127.0.0.1:10143") + if err != nil { + log.Fatal(err) + } + log.Println("Connected") + + // Don't forget to logout + defer c.Logout() + + // Login + if err := c.Login("smtp", "a"); err != nil { + log.Fatal(err) + } + log.Println("Logged in") + + // List mailboxes + 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, []string{imap.EnvelopeMsgAttr}, 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!") +} diff --git a/smtp-sendmail.go b/smtp-sendmail.go new file mode 100644 index 0000000..54a875e --- /dev/null +++ b/smtp-sendmail.go @@ -0,0 +1,23 @@ +package main + +import ( + "log" + "net/smtp" +) + +func main() { + err := smtp.SendMail( + "127.0.0.1:10025", + nil, + "sender@example.org", + []string{"incoming+1@code.sai-erp.net"}, + []byte("To: recipient@example.net\r\n"+ + "Subject: discount Gophers!\r\n"+ + "\r\n"+ + "This is the email body.\r\n"), + ) + + if err != nil { + log.Fatal(err) + } +}