gomail/main.go
Michael f12e865042 added support for socks5 proxy
Signed-off-by: Michael <michael.lindman@gmail.com>
2021-12-10 04:26:47 +00:00

78 lines
1.8 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"time"
"git.0cd.xyz/michael/gomail/mail"
)
func main() {
cfgFile, mailbox, msgs := ui()
cfg := NewConfig(*cfgFile)
chErr, chDone := make(chan error), make(chan bool)
for _, account := range cfg.Account {
go func(addr, username, password string, chErr chan<- error, chDone chan<- bool) {
defer func() {
chDone <- true
}()
auth := mail.Conn{Addr: addr, Username: username, Password: password}
var conn *mail.Mail
var err error
if cfg.Proxy.Enabled {
conn, err = mail.LoginWithProxy(auth, cfg.Proxy.Proto, cfg.Proxy.Addr, nil)
if err != nil {
chErr <- err
}
} else {
conn, err = mail.Login(auth)
if err != nil {
chErr <- err
}
}
defer conn.Client.Logout()
messages, err := conn.GetMessages(*mailbox, int32(*msgs))
if err != nil {
chErr <- err
}
path := cfg.Path + username + "/" + time.Now().Format("2006-01-02-15:04:05")
for _, p := range []string{cfg.Path + username, path} {
if _, err := os.Stat(p); os.IsNotExist(err) {
os.Mkdir(p, 0775)
}
}
if err := mail.WriteMessages(path, messages); err != nil {
chErr <- err
}
}(account.Addr, account.Username, account.Password, chErr, chDone)
}
for c := 0; c < len(cfg.Account); {
select {
case err := <-chErr:
log.Println(err)
case <-chDone:
c++
}
}
}
func ui() (cfgFile, mailbox *string, msgs *int) {
flag.Usage = func() {
fmt.Printf("Usage of %s:\n", os.Args[0])
flag.PrintDefaults()
}
home, err := os.UserHomeDir()
if err != nil {
log.Fatal(err)
}
cfgFile = flag.String("cfgFile", home+"/.config/gomail/config.yaml", "path to config file")
mailbox = flag.String("mailbox", "inbox", "mailbox to scan messages")
msgs = flag.Int("msgs", 100, "Number of messages to pull")
flag.Parse()
return cfgFile, mailbox, msgs
}