package main import ( "fmt" "io" "io/ioutil" "net/mail" "strings" "time" "gogs.inhome.blapointe.com/local-sandbox/contact" "gogs.inhome.blapointe.com/local/args" ) func main() { emailer := contact.NewEmailer() as := args.NewArgSet() as.Append(args.STRING, "imap", "imap server:port", "imap.gmail.com:993") as.Append(args.STRING, "pop3", "pop3 server:port", "") as.Append(args.INT, "n", "limit (<1 for inf)", 10) as.Append(args.STRING, "u", "username", emailer.From) as.Append(args.STRING, "p", "password", emailer.Password) if err := as.Parse(); err != nil { panic(err) } emailer.IMAP = as.Get("imap").GetString() emailer.POP3 = as.Get("pop3").GetString() emailer.Limit = as.Get("n").GetInt() emailer.From = as.GetString("u") emailer.Password = as.GetString("p") var msgs <-chan *mail.Message var err error if emailer.POP3 != "" { msgs, err = emailer.ReadPOP3() } else { msgs, err = emailer.Read() } if err != nil { panic(err) } for msg := range msgs { b, _ := ioutil.ReadAll(io.LimitReader(msg.Body, 1024)) s := strings.ReplaceAll(string(b), "\r\n", " ") s = strings.ReplaceAll(string(s), "\n", " ") s = strings.ReplaceAll(string(s), "\r", " ") if !strings.Contains(s, " ") { s = "..." } d, _ := msg.Header.Date() d = d.In(time.Local) fmt.Printf( "@%+v @%+v: %+v: %s\n", d.Format("06-01-02T15:04Z07"), msg.Header.Get("From"), msg.Header.Get("Subject"), s, ) } }