all repos — navani @ a19bec824e09eb9de02066e7ea79e6a8c4342b6b

forlater's primary mail processing service

mail/utils.go (view raw)

 1package mail
 2
 3import (
 4	"fmt"
 5
 6	"github.com/microcosm-cc/bluemonday"
 7	"mvdan.cc/xurls/v2"
 8)
 9
10type Mail struct {
11	From    string
12	Date    string
13	ReplyTo string
14	Parts   map[string]string
15}
16
17// Extracts URLs from given text.
18func ExtractURLs(text string) []string {
19	x := xurls.Strict()
20	return x.FindAllString(text, -1)
21}
22
23// Returns the main body of the email; hopefully containing URLs.
24func MailBody(parts map[string]string) (string, error) {
25	if plain, ok := parts["text/plain"]; ok {
26		return plain, nil
27	} else if html, ok := parts["text/html"]; ok {
28		p := bluemonday.NewPolicy()
29		p.AllowStandardURLs()
30		p.AddSpaceWhenStrippingTag(true)
31		clean := p.Sanitize(html)
32		return clean, nil
33	} else {
34		return "", fmt.Errorf("no good MIME type found")
35	}
36}