diff --git a/README.md b/README.md new file mode 100644 index 0000000..86f7370 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +go-sieve +==================== + +Sieve email filtering language ([RFC 5228][rfc5228]) +implementation in Go. + +## Extensions + +- envelope (RFC 5228) +- fileinto (RFC 5228) + +## Example + +```go +package main + +import ( + "context" + "strings" + + "github.com/foxcpp/go-sieve" + "github.com/foxcpp/go-sieve/interp" +) + +func main() { + const script = ` +require "fileinto"; +if header :contains "subject" "rich" { + fileinto "Junk"; +} +` + + parsed, _ := sieve.Load(strings.NewReader(script), sieve.DefaultOptions()) + data := interp.NewRuntimeData( + parsed, + interp.Callback{}, + ) + parsed.Execute(context.Background(), data) + // inspect RuntimeData for results +} + +``` + +[rfc5228]: https://datatracker.ietf.org/doc/html/rfc5228 \ No newline at end of file diff --git a/cmd/sieve-run/main.go b/cmd/sieve-run/main.go index 9c4fded..c3f68fa 100644 --- a/cmd/sieve-run/main.go +++ b/cmd/sieve-run/main.go @@ -4,6 +4,7 @@ import ( "bufio" "context" "flag" + "fmt" "log" "net/textproto" "os" @@ -65,11 +66,14 @@ func main() { data.SMTP.To = *envTo ctx := context.Background() + start = time.Now() if err := loadedScript.Execute(ctx, data); err != nil { log.Fatalln(err) } + end = time.Now() + log.Println("script executed in", end.Sub(start)) - log.Println("redirect:", data.RedirectAddr) - log.Println("fileinfo:", data.Mailboxes) - log.Println("keep:", data.ImplicitKeep || data.Keep) + fmt.Println("redirect:", data.RedirectAddr) + fmt.Println("fileinfo:", data.Mailboxes) + fmt.Println("keep:", data.ImplicitKeep || data.Keep) }