aboutsummaryrefslogtreecommitdiff
path: root/serve_imap.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-01-13 16:33:50 +0800
committerRunxi Yu <me@runxiyu.org>2025-01-13 16:33:50 +0800
commitb27e7a73337659aca8ed1aadd4b907048b1f598c (patch)
treeaee98e8ef63b51724e22eeceb62d70f4c670e80c /serve_imap.go
parentRefactor mx stuff (diff)
downloadmaild-b27e7a73337659aca8ed1aadd4b907048b1f598c.tar.gz
maild-b27e7a73337659aca8ed1aadd4b907048b1f598c.tar.zst
maild-b27e7a73337659aca8ed1aadd4b907048b1f598c.zip
Listen to IMAP
Diffstat (limited to 'serve_imap.go')
-rw-r--r--serve_imap.go40
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())
+ }
+}