Add license information.
[mailpopbox.git] / mailpopbox.go
1 // mailpopbox
2 // Copyright 2020 Blue Static <https://www.bluestatic.org>
3 // This program is free software licensed under the GNU General Public License,
4 // version 3.0. The full text of the license can be found in LICENSE.txt.
5 // SPDX-License-Identifier: GPL-3.0-only
6
7 package main
8
9 import (
10 "encoding/json"
11 "fmt"
12 "os"
13
14 "github.com/uber-go/zap"
15 )
16
17 func main() {
18 if len(os.Args) != 2 {
19 fmt.Fprintf(os.Stderr, "Usage: %s config.json\n", os.Args[0])
20 os.Exit(1)
21 }
22
23 configFile, err := os.Open(os.Args[1])
24 if err != nil {
25 fmt.Fprintf(os.Stderr, "config file: %s\n", err)
26 os.Exit(2)
27 }
28
29 var config Config
30 if err := json.NewDecoder(configFile).Decode(&config); err != nil {
31 fmt.Fprintf(os.Stderr, "config file: %s\n", err)
32 os.Exit(3)
33 }
34 configFile.Close()
35
36 log := zap.New(zap.NewTextEncoder())
37
38 pop3 := runPOP3Server(config, log)
39 smtp := runSMTPServer(config, log)
40
41 for {
42 select {
43 case cm := <-pop3:
44 if cm == ServerControlRestart {
45 pop3 = runPOP3Server(config, log)
46 } else {
47 break
48 }
49 case <-smtp:
50 // smtp never reloads.
51 break
52 }
53 }
54 }