diff options
author | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-04-20 02:02:15 +0200 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-04-20 02:02:15 +0200 |
commit | 9e45db27daa3b682c4d8e1e1aa9e66594cf887a4 (patch) | |
tree | 251177708d11f7118541fc49ac1549df18803ad7 /internal/feed | |
parent | f1231aa444bd13aa031fe6e3dac32138436f956b (diff) | |
download | feed2imap-go-9e45db27daa3b682c4d8e1e1aa9e66594cf887a4.tar.gz feed2imap-go-9e45db27daa3b682c4d8e1e1aa9e66594cf887a4.tar.bz2 feed2imap-go-9e45db27daa3b682c4d8e1e1aa9e66594cf887a4.zip |
Started with mail creation
Diffstat (limited to '')
-rw-r--r-- | internal/feed/mail.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/internal/feed/mail.go b/internal/feed/mail.go new file mode 100644 index 0000000..d166e09 --- /dev/null +++ b/internal/feed/mail.go @@ -0,0 +1,85 @@ +package feed + +import ( + "bytes" + "io" + "time" + + "github.com/emersion/go-message/mail" + + "github.com/Necoro/feed2imap-go/internal/config" +) + +func address(name, address string) []*mail.Address { + return []*mail.Address{{name, address}} +} + +func fromAdress(feed Feed, item feeditem, cfg config.Config) []*mail.Address { + switch { + case item.Item.Author != nil && item.Item.Author.Email != "": + return address(item.Item.Author.Name, item.Item.Author.Email) + case item.Item.Author != nil && item.Item.Author.Name != "": + return address(item.Item.Author.Name, cfg.DefaultEmail) + case item.Feed.Author != nil && item.Feed.Author.Email != "": + return address(item.Feed.Author.Name, item.Feed.Author.Email) + case item.Feed.Author != nil && item.Feed.Author.Name != "": + return address(item.Feed.Author.Name, cfg.DefaultEmail) + default: + return address(feed.Name, cfg.DefaultEmail) + } +} + +func asMail(feed Feed, item feeditem, cfg config.Config) (string, error) { + var b bytes.Buffer + + var h mail.Header + h.SetAddressList("From", fromAdress(feed, item, cfg)) + h.SetAddressList("To", address(feed.Name, cfg.DefaultEmail)) + + { // date + date := item.Item.PublishedParsed + if date == nil { + now := time.Now() + date = &now + } + h.SetDate(*date) + } + { // subject + subject := item.Item.Title + if subject == "" { + subject = item.Item.Published + } + if subject == "" { + subject = item.Item.Link + } + h.SetSubject(subject) + } + + mw, err := mail.CreateWriter(&b, h) + if err != nil { + return "", err + } + + if cfg.WithPartText() { + tw, err := mw.CreateInline() + if err != nil { + return "", err + } + + var th mail.InlineHeader + th.SetContentType("text/plain", map[string]string{"charset": "utf-8", "format": "flowed"}) + + w, err := tw.CreatePart(th) + if err != nil { + return "", err + } + _, _ = io.WriteString(w, "Who are you?") + + _ = w.Close() + _ = tw.Close() + } + + _ = mw.Close() + + return b.String(), nil +} |