From b27e7a73337659aca8ed1aadd4b907048b1f598c Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 13 Jan 2025 16:33:50 +0800 Subject: Listen to IMAP --- serve_imap.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 serve_imap.go (limited to 'serve_imap.go') diff --git a/serve_imap.go b/serve_imap.go new file mode 100644 index 0000000..f1d195d --- /dev/null +++ b/serve_imap.go @@ -0,0 +1,40 @@ +package main + +import ( + "crypto/tls" + + "github.com/emersion/go-imap/v2" + "github.com/emersion/go-imap/v2/imapserver" + "go.lindenii.runxiyu.org/lindenii-common/clog" +) + +func serve_imap() { + var tls_config *tls.Config + var imap_net, imap_addr string + config_consistent_run(func() { + tls_config = config._tls_config + imap_net = config.IMAP.Net + imap_addr = config.IMAP.Addr + }) + listener, err := tls.Listen(imap_net, imap_addr, tls_config) + if err != nil { + clog.Fatal(1, "IMAP: Cannot listen TLS: "+err.Error()) + } + clog.Info("IMAP: Listening via " + imap_net + " on " + imap_addr) + + + server := imapserver.New(&imapserver.Options{ + NewSession: func(conn *imapserver.Conn) (imapserver.Session, *imapserver.GreetingData, error) { + return nil, nil, nil + }, + Caps: imap.CapSet{ + imap.CapIMAP4rev1: {}, + imap.CapIMAP4rev2: {}, + }, + DebugWriter: nil, // TODO + }) + err = server.Serve(listener) + if err != nil { + clog.Fatal(1, "IMAP: Failed serving: "+err.Error()) + } +} -- cgit v1.2.3