diff options
author | Runxi Yu <me@runxiyu.org> | 2025-01-13 16:33:50 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-01-13 16:33:50 +0800 |
commit | b27e7a73337659aca8ed1aadd4b907048b1f598c (patch) | |
tree | aee98e8ef63b51724e22eeceb62d70f4c670e80c /serve_imap.go | |
parent | Refactor mx stuff (diff) | |
download | maild-b27e7a73337659aca8ed1aadd4b907048b1f598c.tar.gz maild-b27e7a73337659aca8ed1aadd4b907048b1f598c.tar.zst maild-b27e7a73337659aca8ed1aadd4b907048b1f598c.zip |
Listen to IMAP
Diffstat (limited to 'serve_imap.go')
-rw-r--r-- | serve_imap.go | 40 |
1 files changed, 40 insertions, 0 deletions
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()) + } +} |