aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Weiss2020-08-02 16:06:17 +0200
committerMichael Weiss2020-08-08 16:44:52 +0200
commit03ecabacc697f96629aa94727260e37df11b7b6c (patch)
treea246c743cc54d9276e8632bcef63752f3dffa8c3
parentc29889a09803986f647c2d1fd0a5bf88d8efc5e7 (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.go25
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)