Merge branch 'strip-style' into 'main'
strip <style> in html emails See merge request etke.cc/postmoogle!17
This commit is contained in:
@@ -74,16 +74,15 @@ func (s *session) Data(r io.Reader) error {
|
|||||||
files = append(files, attachments...)
|
files = append(files, attachments...)
|
||||||
files = append(files, inlines...)
|
files = append(files, inlines...)
|
||||||
|
|
||||||
email := &utils.Email{
|
email := utils.NewEmail(
|
||||||
MessageID: eml.GetHeader("Message-Id"),
|
eml.GetHeader("Message-Id"),
|
||||||
InReplyTo: eml.GetHeader("In-Reply-To"),
|
eml.GetHeader("In-Reply-To"),
|
||||||
Subject: eml.GetHeader("Subject"),
|
eml.GetHeader("Subject"),
|
||||||
From: s.from,
|
s.from,
|
||||||
To: s.to,
|
s.to,
|
||||||
Text: eml.Text,
|
eml.Text,
|
||||||
HTML: eml.HTML,
|
eml.HTML,
|
||||||
Files: files,
|
files)
|
||||||
}
|
|
||||||
|
|
||||||
return s.client.Send(s.ctx, email)
|
return s.client.Send(s.ctx, email)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,3 +11,27 @@ type Email struct {
|
|||||||
HTML string
|
HTML string
|
||||||
Files []*File
|
Files []*File
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewEmail constructs Email object
|
||||||
|
func NewEmail(messageID, inReplyTo, subject, from, to, text, html string, files []*File) *Email {
|
||||||
|
email := &Email{
|
||||||
|
MessageID: messageID,
|
||||||
|
InReplyTo: inReplyTo,
|
||||||
|
From: from,
|
||||||
|
To: to,
|
||||||
|
Subject: subject,
|
||||||
|
Text: text,
|
||||||
|
HTML: html,
|
||||||
|
Files: files,
|
||||||
|
}
|
||||||
|
|
||||||
|
if html != "" {
|
||||||
|
var err error
|
||||||
|
html, err = StripHTMLTag(html, "style")
|
||||||
|
if err == nil {
|
||||||
|
email.HTML = html
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return email
|
||||||
|
}
|
||||||
|
|||||||
44
utils/html.go
Normal file
44
utils/html.go
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"golang.org/x/net/html"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StripHTMLTag from text
|
||||||
|
//
|
||||||
|
// Source: https://siongui.github.io/2018/01/16/go-remove-html-inline-style/
|
||||||
|
func StripHTMLTag(text, tag string) (string, error) {
|
||||||
|
doc, err := html.Parse(strings.NewReader(text))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
stripHTMLTag(doc, tag)
|
||||||
|
|
||||||
|
var out bytes.Buffer
|
||||||
|
err = html.Render(&out, doc)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func stripHTMLTag(node *html.Node, tag string) {
|
||||||
|
i := -1
|
||||||
|
for index, attr := range node.Attr {
|
||||||
|
if attr.Key == tag {
|
||||||
|
i = index
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if i != -1 {
|
||||||
|
node.Attr = append(node.Attr[:i], node.Attr[i+1:]...)
|
||||||
|
}
|
||||||
|
|
||||||
|
for child := node.FirstChild; child != nil; child = child.NextSibling {
|
||||||
|
stripHTMLTag(child, tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user