imap

package module
v0.0.0-...-90479f1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 26, 2016 License: MIT Imports: 0 Imported by: 0

README

go-imap

GoDoc Build Status codecov stability-unstable

An IMAP4rev1 library written in Go. It can be used to build a client and/or a server and supports UTF-7.

go get github.com/emersion/go-imap

Why?

Other IMAP implementations in Go:

Implemented commands

This package implements all commands specified in the RFC.

Command Client Client tests Server Server tests
CAPABILITY
NOOP
LOGOUT
AUTHENTICATE
LOGIN
STARTTLS
SELECT
EXAMINE
CREATE
DELETE
RENAME
SUBSCRIBE
UNSUBSCRIBE
LIST
LSUB
STATUS
APPEND
CHECK
CLOSE
EXPUNGE
SEARCH
FETCH
STORE
COPY
UID

IMAP extensions

Commands defined in IMAP extensions are available in other packages.

Usage

Client
package main

import (
	"log"

	"github.com/emersion/go-imap/client"
	imap "github.com/emersion/go-imap/common"
)

func main() {
	log.Println("Connecting to server...")

	// Connect to server
	c, err := client.DialTLS("mail.example.org:993", nil)
	if err != nil {
		log.Fatal(err)
	}
	log.Println("Connected")

	// Don't forget to logout
	defer c.Logout()

	// Login
	if err := c.Login("username", "password"); err != nil {
		log.Fatal(err)
	}
	log.Println("Logged in")

	// List mailboxes
	mailboxes := make(chan *imap.MailboxInfo)
	go (func () {
		err = c.List("", "%", mailboxes)
	})()

	log.Println("Mailboxes:")
	for m := range mailboxes {
		log.Println("* " + m.Name)
	}

	if 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
	seqset, _ := imap.NewSeqSet("")
	seqset.AddRange(mbox.Messages - 3, mbox.Messages)

	messages := make(chan *imap.Message, 4)
	err = c.Fetch(seqset, []string{"ENVELOPE"}, messages)
	if err != nil {
		log.Fatal(err)
	}

	for msg := range messages {
		log.Println(msg.Envelope.Subject)
	}

	log.Println("Done!")
}
Server
package main

import (
	"log"

	"github.com/emersion/go-imap/server"
	"github.com/emersion/go-imap/backend/memory"
)

func main() {
	// Create a memory backend
	bkd := memory.New()

	// Create a new server
	s, err := server.Listen(":3000", bkd)
	if err != nil {
		log.Fatal(err)
	}

	// Since we will use this server for testing only, we can allow plain text
	// authentication over unencrypted connections
	s.AllowInsecureAuth = true

	log.Println("Server listening at", s.Addr())

	// Do something else to keep the server alive
	select {}
}

You can now use telnet localhost 3000 to manually connect to the server.

License

MIT

Documentation

Overview

An IMAP4rev1 (RFC 3501) library written in Go. It can be used to build a client and/or a server and supports UTF-7.

Directories

Path Synopsis
IMAP server backend interface.
IMAP server backend interface.
memory
A memory backend.
A memory backend.
An IMAP client.
An IMAP client.
IMAP commands defined in RFC 3501.
IMAP commands defined in RFC 3501.
Generic structures and functions for IMAP.
Generic structures and functions for IMAP.
IMAP responses defined in RFC 3501.
IMAP responses defined in RFC 3501.
An IMAP server.
An IMAP server.
Modified UTF-7 encoding defined in RFC 3501 section 5.1.3
Modified UTF-7 encoding defined in RFC 3501 section 5.1.3

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL