diff --git a/cmd/contacts/contacts.go b/cmd/contacts/contacts.go index 0d0f601..ef0c363 100644 --- a/cmd/contacts/contacts.go +++ b/cmd/contacts/contacts.go @@ -14,6 +14,9 @@ import ( _ "github.com/lib/pq" ) +var all = flag.Bool("all", false, + "extract addresses from all messages. Default is to only extract from unprocessed messages.") + type contact struct { hash string name string @@ -91,13 +94,29 @@ VALUES ( errc <- nil } -func fetchMessages(db *sql.DB) error { - rows, err := db.Query(` +func fetchMessages(db *sql.DB, all bool) error { + var query string + if all { + query = ` SELECT hash, blob FROM original -`) +` + } else { + query = ` +SELECT + original.hash AS hash, + original.blob AS blob +FROM + original +LEFT + JOIN contact ON original.hash = contact.hash +WHERE + contact.hash IS NULL; +` + } + rows, err := db.Query(query) if err != nil { return err } @@ -140,7 +159,8 @@ FROM for _, hdr := range []string{"to", "cc", "from"} { addrs, err := msg.Header.AddressList(hdr) if err != nil && err != mail.ErrHeaderNotPresent { - glog.Errorf("%s %q header: %v", h, hdr, err) + glog.Errorf("%s %q header: %v: %q", h, hdr, err, + msg.Header.Get(hdr)) continue } for _, addr := range addrs { @@ -169,7 +189,7 @@ func main() { if err != nil { glog.Fatal(err) } - if err := fetchMessages(db); err != nil { + if err := fetchMessages(db, *all); err != nil { glog.Fatal(err) } }