mailslurp-examples - golang-imap-examples

https://github.com/mailslurp/examples

Table of Contents

golang-imap-examples/main_test.go

package main

//<gen>golang_imap_import
import (
	"context"
	"fmt"
	"github.com/antihax/optional"
	"github.com/emersion/go-imap"
	imapClient "github.com/emersion/go-imap/client"
	mailslurp "github.com/mailslurp/mailslurp-client-go"
	"strconv"
)

//</gen>
import (
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"os"
	"testing"
)

var apiKey = os.Getenv("API_KEY")

func getMailSlurpClient(t *testing.T) (*mailslurp.APIClient, context.Context) {
	require.NotNil(t, apiKey)
	require.NotEqual(t, "", apiKey)
	ctx := context.WithValue(context.Background(), mailslurp.ContextAPIKey, mailslurp.APIKey{Key: apiKey})
	config := mailslurp.NewConfiguration()
	client := mailslurp.NewAPIClient(config)
	return client, ctx
}

func Test_CanConnectToMailbox(t *testing.T) {
	client, ctx := getMailSlurpClient(t)
	expiresIn := int64(300_000)
	inbox, _, err := client.InboxControllerApi.CreateInboxWithOptions(ctx, mailslurp.CreateInboxDto{
		ExpiresIn: &expiresIn,
	})
	require.NoError(t, err)

	//<gen>golang_imap
	// get imap access details for an inbox
	details, _, err := client.InboxControllerApi.GetImapAccess(ctx, &mailslurp.GetImapAccessOpts{
		InboxId: optional.NewInterface(inbox.Id),
	})
	require.NoError(t, err)

	// connect to server
	addr := fmt.Sprint(details.ImapServerHost + ":" + strconv.Itoa(int(details.ImapServerPort)))
	c, err := imapClient.Dial(addr)
	require.NoError(t, err)

	// login
	err = c.Login(details.ImapUsername, details.ImapPassword)
	require.NoError(t, err)
	//</gen>

	//<gen>golang_imap_list
	// list mailboxes
	mailboxes := make(chan *imap.MailboxInfo, 10)
	done := make(chan error, 1)
	go func() {
		done <- c.List("", "*", mailboxes)
	}()
	var mboxes []string
	for m := range mailboxes {
		mboxes = append(mboxes, m.Name)
	}
	if err := <-done; err != nil {
		require.NoError(t, err)
	}
	assert.Len(t, mboxes, 2)
	assert.Contains(t, mboxes, "INBOX")
	assert.Contains(t, mboxes, inbox.EmailAddress)

	// can select INBOX
	_, err = c.Select(inbox.EmailAddress, false)
	require.NoError(t, err)

	// search messages
	resSeqs, err := c.Search(&imap.SearchCriteria{
		WithoutFlags: []string{"\\Seen"},
	})
	require.NoError(t, err)
	fmt.Println("Search result imap seq nums", resSeqs)

	// logout
	err = c.Logout()
	require.NoError(t, err)
	//</gen>
}

golang-imap-examples/go.sum

cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/emersion/go-imap v1.2.1 h1:+s9ZjMEjOB8NzZMVTM3cCenz2JrQIGGo5j1df19WjTA=
github.com/emersion/go-imap v1.2.1/go.mod h1:Qlx1FSx2FTxjnjWpIlVNEuX+ylerZQNFE5NsmKFSejY=
github.com/emersion/go-message v0.15.0/go.mod h1:wQUEfE+38+7EW8p8aZ96ptg6bAb1iwdgej19uXASlE4=
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 h1:OJyUGMJTzHTd1XQp98QTaHernxMYzRaOasRir9hUlFQ=
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/mailslurp/mailslurp-client-go v0.0.0-20240503021632-5c40782e2dd7 h1:c/PwgaDOK2rPo4XJbUhiGQq8bcSzHhFLzde5art/xRk=
github.com/mailslurp/mailslurp-client-go v0.0.0-20240503021632-5c40782e2dd7/go.mod h1:xf8nKo8PBsZ+T9tp0bn5ntB2aRmHTPX1p46ip6hOBKE=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg=
golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

golang-imap-examples/go.mod

module mailslurp.com/examples/golang/v2

go 1.21

require (
	github.com/antihax/optional v1.0.0
	github.com/emersion/go-imap v1.2.1
	github.com/mailslurp/mailslurp-client-go v0.0.0-20240503021632-5c40782e2dd7
	github.com/stretchr/testify v1.7.0
)

require (
	github.com/davecgh/go-spew v1.1.0 // indirect
	github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 // indirect
	github.com/pmezard/go-difflib v1.0.0 // indirect
	golang.org/x/oauth2 v0.19.0 // indirect
	golang.org/x/text v0.14.0 // indirect
	gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
)

golang-imap-examples/README.md

# MailSlurp Go IMAP example
IMAP golang example showing how to connect to MailSlurp inboxes using IMAP.

- [MailSlurp Go Docs](https://www.mailslurp.com/docs/go/) 
- [IMAP/SMTP guide](https://docs.mailslurp.com/guides/imap-smtp/)

## Run example
```
API_KEY="your-api-key" go test
```

golang-imap-examples/Makefile

-include ../.env

test:
	API_KEY=$(API_KEY) go test