diff --git a/pkg/message/parser.go b/pkg/message/parser.go index 45aeb157..77c148a3 100644 --- a/pkg/message/parser.go +++ b/pkg/message/parser.go @@ -277,7 +277,12 @@ func writeMIMEMessage(p *parser.Parser) (mime string, err error) { NewWriter(). WithCondition(func(p *parser.Part) (keep bool) { disp, _, err := p.Header.ContentDisposition() - return err != nil || disp != "attachment" + if err != nil { + return true + } + + // TODO: Is it true that we don't want to write attachments? I thought this was for externals... + return disp != "attachment" }) buf := new(bytes.Buffer) diff --git a/pkg/message/parser/parser.go b/pkg/message/parser/parser.go index d2460ccf..7b91c57c 100644 --- a/pkg/message/parser/parser.go +++ b/pkg/message/parser/parser.go @@ -1,19 +1,13 @@ package parser import ( + "fmt" "io" "io/ioutil" "github.com/emersion/go-message" ) -// TODO: Set this to something that handles charsets. -func init() { // nolint[gochecknoinits] - message.CharsetReader = func(string, io.Reader) (io.Reader, error) { - panic("not implemented") - } -} - type Parser struct { stack []*Part root *Part @@ -49,7 +43,7 @@ func (p *Parser) Part(number []int) (part *Part, err error) { part = p.root for _, n := range number { - if part, err = part.Part(n); err != nil { + if part, err = part.Child(n); err != nil { return } } @@ -57,13 +51,17 @@ func (p *Parser) Part(number []int) (part *Part, err error) { return } -func (p *Parser) parse(r io.Reader) (err error) { - e, err := message.Read(r) +func (p *Parser) parse(r io.Reader) error { + entity, err := message.Read(r) if err != nil { - return + if !message.IsUnknownCharset(err) { + return err + } else { + fmt.Println(err) + } } - return p.parseEntity(e) + return p.parseEntity(entity) } func (p *Parser) enter() { diff --git a/pkg/message/parser/part.go b/pkg/message/parser/part.go index 576d8c8c..e3ae8ff1 100644 --- a/pkg/message/parser/part.go +++ b/pkg/message/parser/part.go @@ -14,7 +14,7 @@ type Part struct { children Parts } -func (p *Part) Part(n int) (part *Part, err error) { +func (p *Part) Child(n int) (part *Part, err error) { if len(p.children) < n { return nil, errors.New("no such part") }