contact/cmd/recv/main.go

63 lines
1.4 KiB
Go
Executable File

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,
)
}
}