diff options
author | Michael Weiss | 2020-08-02 16:06:17 +0200 |
---|---|---|
committer | Michael Weiss | 2020-08-08 16:44:52 +0200 |
commit | 03ecabacc697f96629aa94727260e37df11b7b6c (patch) | |
tree | a246c743cc54d9276e8632bcef63752f3dffa8c3 | |
parent | c29889a09803986f647c2d1fd0a5bf88d8efc5e7 (diff) |
scripts/mailing-list-member-retirement: Add a flag to ignore mails before a certain date
-rw-r--r-- | scripts/mailing-list-member-retirement/main.go | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/scripts/mailing-list-member-retirement/main.go b/scripts/mailing-list-member-retirement/main.go index 7388cd6..06990e9 100644 --- a/scripts/mailing-list-member-retirement/main.go +++ b/scripts/mailing-list-member-retirement/main.go @@ -7,6 +7,7 @@ import ( "io" "log" "os" + "time" "github.com/emersion/go-mbox" "github.com/emersion/go-message/mail" _ "github.com/emersion/go-message/charset" @@ -15,12 +16,18 @@ import ( // Prints the email addresses (one per line) of all senders by parsing an MBOX. func main() { - mboxNamePtr := flag.String("mbox", "test.mbox", "MBOX to read") + mboxNamePtr := flag.String("mbox", "test.mbox", "The mailbox (in the mbox file format) to read") + sincePtr := flag.String("since", "1970-01-01", "Consider only messages since the given date (YYYY-MM-DD)") flag.Parse() - PrintAllMboxSenders(*mboxNamePtr) + const isoFormat = "2006-01-02" + since, err := time.Parse(isoFormat, *sincePtr) + if err != nil { + log.Fatalf("Date \"%v\" couldn't be parsed", *sincePtr) + } + PrintAllMboxSenders(*mboxNamePtr, since) } -func PrintAllMboxSenders(fileName string) { +func PrintAllMboxSenders(fileName string, since time.Time) { f, err := os.Open(fileName) if err != nil { log.Fatal(err) @@ -39,16 +46,24 @@ func PrintAllMboxSenders(fileName string) { } else if err != nil { log.Fatal(err) } - PrintMessageSender(r) + PrintMessageSender(r, since) } } -func PrintMessageSender(r io.Reader) { +func PrintMessageSender(r io.Reader, since time.Time) { mr, err := mail.CreateReader(r) if err != nil { IgnoreMail(err, mr) } + date, err := mr.Header.Date() + if err != nil { + IgnoreMail(err, mr) + return + } else if date.Before(since) { + return // Ignore this mail (too old) + } + addr, err := mr.Header.AddressList("From") if err != nil { IgnoreMail(err, mr) |