email/cmd/mbox2maildir/mbox2maildir.go
2017-12-26 12:33:33 -08:00

66 lines
1.1 KiB
Go

package main
import (
"bufio"
"bytes"
"flag"
"io"
"os"
"github.com/golang/glog"
)
func writeMailderFile(b []byte) error { return nil }
func parse(r io.Reader, writeMessage func(b []byte) error) error {
from := []byte("From ")
scanner := bufio.NewScanner(r)
buf := new(bytes.Buffer)
for scanner.Scan() {
b := scanner.Bytes()
if bytes.HasPrefix(b, from) {
// New message
if buf.Len() > 0 {
msg := buf.Bytes()
// Trim empty line from end of mbox message
msg = msg[:len(msg)-1]
if err := writeMessage(msg); err != nil {
return err
}
}
buf.Reset()
}
buf.Write(b)
buf.Write([]byte("\n"))
}
if buf.Len() > 0 {
if err := writeMessage(buf.Bytes()); err != nil {
return err
}
}
return scanner.Err()
}
func parseFile(p string) error {
r, err := os.Open(p)
if err != nil {
return err
}
defer r.Close()
if err := parse(r, writeMailderFile); err != nil {
return err
}
return nil
}
func main() {
flag.Parse()
defer glog.Flush()
for _, path := range flag.Args() {
if err := parseFile(path); err != nil {
glog.Errorf("Failed to parse %q: %v", err)
}
}
}