Skip to content

Commit

Permalink
fix: fix parse error
Browse files Browse the repository at this point in the history
  • Loading branch information
windvalley committed Jul 3, 2023
1 parent f338a2d commit b5bed79
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 13 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## v0.2.2

### Fixed

- 修复解析邮件内容报错的问题

## v0.2.1

### Changed
Expand Down
20 changes: 9 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,15 @@ package main
import (
"fmt"
"log"
"strings"

"github.com/knadh/go-pop3"
"github.com/bytbox/go-pop3"

"github.com/windvalley/go-mailparser"
)

func main() {
p := pop3.New(pop3.Opt{
Host: "mail.xxx.com",
Port: 110,
TLSEnabled: false,
})

c, err := p.NewConn()
c, err := pop3.Dial("mail.xxx.com:110")
if err != nil {
log.Fatal(err)
}
Expand All @@ -45,20 +40,23 @@ func main() {
log.Fatal(err)
}

msgs, err := c.List(0)
msgs, _, err := c.ListAll()
if err != nil {
log.Fatal(err)
}

for _, v := range msgs {
b, err := c.Cmd("RETR", true, v.ID)
msg, err := c.Retr(v)
if err != nil {
fmt.Println(err)
continue
}

// string to io.Reader
msgReader := strings.NewReader(msg)

// parse email
res, err := mailparser.Parse(b)
res, err := mailparser.Parse(msgReader)
if err != nil {
fmt.Println(err)
continue
Expand Down
17 changes: 15 additions & 2 deletions mailparser.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,17 @@ type MailMessage struct {

// Parse mail message.
func Parse(r io.Reader) (*MailMessage, error) {
header, err := ParseHeader(r)
m, err := mail.ReadMessage(r)
if err != nil {
return nil, err
}

header, err := parseHeader(m)
if err != nil {
return nil, err
}

body, attachments, err := ParseBody(r)
body, attachments, err := parseBody(m)
if err != nil {
return nil, err
}
Expand All @@ -77,6 +82,10 @@ func ParseHeader(r io.Reader) (*Header, error) {
return nil, err
}

return parseHeader(m)
}

func parseHeader(m *mail.Message) (*Header, error) {
dec := new(mime.WordDecoder)
dec.CharsetReader = charsetReader

Expand Down Expand Up @@ -141,6 +150,10 @@ func ParseBody(r io.Reader) (string, []*Attachment, error) {
return "", nil, err
}

return parseBody(m)
}

func parseBody(m *mail.Message) (string, []*Attachment, error) {
contentType := m.Header.Get("Content-Type")
if contentType == "" {
contentType = "text/plain"
Expand Down

0 comments on commit b5bed79

Please sign in to comment.