diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-05-20 15:58:18 -0400 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-05-21 00:04:19 -0400 |
commit | 731bde4f68014caeca82d72e43c04a7b755148f8 (patch) | |
tree | 725d0851550e15eb83290308fec14d837e40409f /lib/mailstuff/mbox.go | |
parent | 6fc6b0f6b440a92334a668da1af468dd84531a4b (diff) |
mv cmd/generate/mailstuff/ lib/mailstuff/ # and supporting
Diffstat (limited to 'lib/mailstuff/mbox.go')
-rw-r--r-- | lib/mailstuff/mbox.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/mailstuff/mbox.go b/lib/mailstuff/mbox.go new file mode 100644 index 0000000..8700c24 --- /dev/null +++ b/lib/mailstuff/mbox.go @@ -0,0 +1,38 @@ +package mailstuff + +import ( + "bytes" + "io" + "net/mail" +) + +func ReadMBox(r io.Reader) ([]*mail.Message, error) { + rest, err := io.ReadAll(r) + if err != nil { + return nil, err + } + + const terminator = "\nFrom " + + var parts [][]byte + for { + pos := bytes.Index(rest, []byte(terminator)) + if pos < 0 { + parts = append(parts, rest) + break + } + parts = append(parts, rest[:pos+1]) + rest = rest[pos+1:] + } + + ret := make([]*mail.Message, len(parts)) + for i := range len(parts) { + msg, err := mail.ReadMessage(bytes.NewReader(parts[i])) + if err != nil { + return nil, err + } + ret[i] = msg + } + + return ret, nil +} |