fix pop3 fetching, limit recv to N bytes
parent
6b04a324f3
commit
7d372adb78
|
|
@ -20,6 +20,7 @@ func main() {
|
||||||
as.Append(args.INT, "n", "limit (<1 for inf)", 10)
|
as.Append(args.INT, "n", "limit (<1 for inf)", 10)
|
||||||
as.Append(args.STRING, "u", "username", emailer.From)
|
as.Append(args.STRING, "u", "username", emailer.From)
|
||||||
as.Append(args.STRING, "p", "password", emailer.Password)
|
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 {
|
if err := as.Parse(); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
@ -42,17 +43,17 @@ func main() {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
for msg := range msgs {
|
for msg := range msgs {
|
||||||
b, _ := ioutil.ReadAll(io.LimitReader(msg.Body, 1024))
|
b, _ := ioutil.ReadAll(io.LimitReader(msg.Body, int64(as.GetInt("b"))))
|
||||||
s := strings.ReplaceAll(string(b), "\r\n", " ")
|
s := strings.ReplaceAll(string(b), "\r\n", "\n")
|
||||||
s = strings.ReplaceAll(string(s), "\n", " ")
|
s = strings.ReplaceAll(string(s), "\n", "\n")
|
||||||
s = strings.ReplaceAll(string(s), "\r", " ")
|
s = strings.ReplaceAll(string(s), "\r", "\n")
|
||||||
if !strings.Contains(s, " ") {
|
if !strings.Contains(s, " ") {
|
||||||
s = "..."
|
s = "..."
|
||||||
}
|
}
|
||||||
d, _ := msg.Header.Date()
|
d, _ := msg.Header.Date()
|
||||||
d = d.In(time.Local)
|
d = d.In(time.Local)
|
||||||
fmt.Printf(
|
fmt.Printf(
|
||||||
"@%+v @%+v: %+v: %s\n",
|
"@%+v @%+v: \n\t%+v: \n\t%s\n",
|
||||||
d.Format("06-01-02T15:04Z07"),
|
d.Format("06-01-02T15:04Z07"),
|
||||||
msg.Header.Get("From"),
|
msg.Header.Get("From"),
|
||||||
msg.Header.Get("Subject"),
|
msg.Header.Get("Subject"),
|
||||||
|
|
|
||||||
25
email.go
25
email.go
|
|
@ -86,23 +86,29 @@ func (e *Emailer) ReadIMAP() (chan *mail.Message, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Emailer) ReadPOP3() (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)
|
c, err := pop3.DialTLS(e.POP3)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer c.Rset()
|
defer c.Rset()
|
||||||
|
|
||||||
if err := c.Auth(e.From, e.Password); err != nil {
|
if err := c.Auth(e.From, e.Password); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ids, _, err := c.ListAll()
|
ids, _, err := c.ListAll()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for j, id := range ids {
|
|
||||||
if e.Limit > 0 && len(ids)-1-j >= e.Limit {
|
for _, id := range ids {
|
||||||
break
|
|
||||||
}
|
|
||||||
raw, err := c.Retr(id)
|
raw, err := c.Retr(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -111,10 +117,13 @@ func (e *Emailer) ReadPOP3() (chan *mail.Message, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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 {
|
func (e *Emailer) Send(to, subj, msg string) error {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue