diff --git a/cmd/recv/main.go b/cmd/recv/main.go index f67844b..e5afc54 100755 --- a/cmd/recv/main.go +++ b/cmd/recv/main.go @@ -20,6 +20,7 @@ func main() { 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) + as.Append(args.INT, "b", "dont read more than this many characters", 4096) if err := as.Parse(); err != nil { panic(err) } @@ -42,17 +43,17 @@ func main() { 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", " ") + b, _ := ioutil.ReadAll(io.LimitReader(msg.Body, int64(as.GetInt("b")))) + s := strings.ReplaceAll(string(b), "\r\n", "\n") + s = strings.ReplaceAll(string(s), "\n", "\n") + s = strings.ReplaceAll(string(s), "\r", "\n") if !strings.Contains(s, " ") { s = "..." } d, _ := msg.Header.Date() d = d.In(time.Local) fmt.Printf( - "@%+v @%+v: %+v: %s\n", + "@%+v @%+v: \n\t%+v: \n\t%s\n", d.Format("06-01-02T15:04Z07"), msg.Header.Get("From"), msg.Header.Get("Subject"), diff --git a/email.go b/email.go index 72a9bd9..6c0ea1f 100755 --- a/email.go +++ b/email.go @@ -86,23 +86,29 @@ func (e *Emailer) ReadIMAP() (chan *mail.Message, error) { } func (e *Emailer) ReadPOP3() (chan *mail.Message, error) { - emails := []*mail.Message{} + limit := e.Limit + if limit < 1 { + limit = 1000 + } + emails := make(chan *mail.Message, limit) + defer close(emails) + c, err := pop3.DialTLS(e.POP3) if err != nil { return nil, err } defer c.Rset() + if err := c.Auth(e.From, e.Password); err != nil { return nil, err } + ids, _, err := c.ListAll() if err != nil { return nil, err } - for j, id := range ids { - if e.Limit > 0 && len(ids)-1-j >= e.Limit { - break - } + + for _, id := range ids { raw, err := c.Retr(id) if err != nil { return nil, err @@ -111,10 +117,13 @@ func (e *Emailer) ReadPOP3() (chan *mail.Message, error) { if err != nil { return nil, err } - emails = append(emails, msg) + select { + case emails <- msg: + default: + break + } } - return nil, nil - //return emails, nil //c.Quit() + return emails, nil } func (e *Emailer) Send(to, subj, msg string) error {