mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2026-01-08 06:33:15 -06:00
minify email html before sending
This commit is contained in:
parent
42881aa0f1
commit
d3a80b69f0
7 changed files with 31 additions and 9 deletions
|
|
@ -21,6 +21,8 @@ package email
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"net/smtp"
|
"net/smtp"
|
||||||
|
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/text"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -33,7 +35,11 @@ func (s *sender) SendConfirmEmail(toAddress string, data ConfirmData) error {
|
||||||
if err := s.template.ExecuteTemplate(buf, confirmTemplate, data); err != nil {
|
if err := s.template.ExecuteTemplate(buf, confirmTemplate, data); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
confirmBody := buf.String()
|
|
||||||
|
confirmBody, err := text.MinifyHTML(buf.String())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
msg := assembleMessage(confirmSubject, confirmBody, toAddress, s.from)
|
msg := assembleMessage(confirmSubject, confirmBody, toAddress, s.from)
|
||||||
return smtp.SendMail(s.hostAddress, s.auth, s.from, []string{toAddress}, msg)
|
return smtp.SendMail(s.hostAddress, s.auth, s.from, []string{toAddress}, msg)
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ package email
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/text"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewNoopSender returns a no-op email sender that will just execute the given sendCallback
|
// NewNoopSender returns a no-op email sender that will just execute the given sendCallback
|
||||||
|
|
@ -50,7 +52,11 @@ func (s *noopSender) SendConfirmEmail(toAddress string, data ConfirmData) error
|
||||||
if err := s.template.ExecuteTemplate(buf, confirmTemplate, data); err != nil {
|
if err := s.template.ExecuteTemplate(buf, confirmTemplate, data); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
confirmBody := buf.String()
|
|
||||||
|
confirmBody, err := text.MinifyHTML(buf.String())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
msg := assembleMessage(confirmSubject, confirmBody, toAddress, "test@example.org")
|
msg := assembleMessage(confirmSubject, confirmBody, toAddress, "test@example.org")
|
||||||
s.sendCallback(toAddress, string(msg))
|
s.sendCallback(toAddress, string(msg))
|
||||||
|
|
@ -64,7 +70,11 @@ func (s *noopSender) SendResetEmail(toAddress string, data ResetData) error {
|
||||||
if err := s.template.ExecuteTemplate(buf, resetTemplate, data); err != nil {
|
if err := s.template.ExecuteTemplate(buf, resetTemplate, data); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
resetBody := buf.String()
|
|
||||||
|
resetBody, err := text.MinifyHTML(buf.String())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
msg := assembleMessage(resetSubject, resetBody, toAddress, "test@example.org")
|
msg := assembleMessage(resetSubject, resetBody, toAddress, "test@example.org")
|
||||||
s.sendCallback(toAddress, string(msg))
|
s.sendCallback(toAddress, string(msg))
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ package email
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"net/smtp"
|
"net/smtp"
|
||||||
|
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/text"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -33,7 +35,11 @@ func (s *sender) SendResetEmail(toAddress string, data ResetData) error {
|
||||||
if err := s.template.ExecuteTemplate(buf, resetTemplate, data); err != nil {
|
if err := s.template.ExecuteTemplate(buf, resetTemplate, data); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
resetBody := buf.String()
|
|
||||||
|
resetBody, err := text.MinifyHTML(buf.String())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
msg := assembleMessage(resetSubject, resetBody, toAddress, s.from)
|
msg := assembleMessage(resetSubject, resetBody, toAddress, s.from)
|
||||||
return smtp.SendMail(s.hostAddress, s.auth, s.from, []string{toAddress}, msg)
|
return smtp.SendMail(s.hostAddress, s.auth, s.from, []string{toAddress}, msg)
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ func (suite *UtilTestSuite) TestTemplateConfirm() {
|
||||||
|
|
||||||
suite.sender.SendConfirmEmail("user@example.org", confirmData)
|
suite.sender.SendConfirmEmail("user@example.org", confirmData)
|
||||||
suite.Len(suite.sentEmails, 1)
|
suite.Len(suite.sentEmails, 1)
|
||||||
suite.Equal("Subject: GoToSocial Email Confirmation\r\nFrom: GoToSocial <test@example.org>\r\nTo: user@example.org\r\nMIME-version: 1.0;\nContent-Type: text/html;\r\n<!DOCTYPE html>\n<html>\n </head>\n <body>\n <div>\n <h1>\n Hello test!\n </h1>\n </div>\n <div>\n <p>\n You are receiving this mail because you've requested an account on <a href=\"https://example.org\">Test Instance</a>.\n </p>\n <p>\n We just need to confirm that this is your email address. To confirm your email, <a href=\"https://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\">click here</a> or paste the following in your browser's address bar:\n </p>\n <p>\n <code>\n https://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\n </code>\n </p>\n </div>\n <div>\n <p>\n If you believe you've been sent this email in error, feel free to ignore it, or contact the administrator of <a href=\"https://example.org\">Test Instance</a>.\n </p>\n </div>\n </body>\n</html>\r\n", suite.sentEmails["user@example.org"])
|
suite.Equal("Subject: GoToSocial Email Confirmation\r\nFrom: GoToSocial <test@example.org>\r\nTo: user@example.org\r\nMIME-version: 1.0;\nContent-Type: text/html;\r\n<!doctype html><html></head><body><div><h1>Hello test!</h1></div><div><p>You are receiving this mail because you've requested an account on <a href=\"https://example.org\">Test Instance</a>.</p><p>We just need to confirm that this is your email address. To confirm your email, <a href=\"https://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\">click here</a> or paste the following in your browser's address bar:</p><p><code>https://example.org/confirm_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa</code></p></div><div><p>If you believe you've been sent this email in error, feel free to ignore it, or contact the administrator of <a href=\"https://example.org\">Test Instance</a>.</p></div></body></html>\r\n", suite.sentEmails["user@example.org"])
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *UtilTestSuite) TestTemplateReset() {
|
func (suite *UtilTestSuite) TestTemplateReset() {
|
||||||
|
|
@ -52,7 +52,7 @@ func (suite *UtilTestSuite) TestTemplateReset() {
|
||||||
|
|
||||||
suite.sender.SendResetEmail("user@example.org", resetData)
|
suite.sender.SendResetEmail("user@example.org", resetData)
|
||||||
suite.Len(suite.sentEmails, 1)
|
suite.Len(suite.sentEmails, 1)
|
||||||
suite.Equal("Subject: GoToSocial Password Reset\r\nFrom: GoToSocial <test@example.org>\r\nTo: user@example.org\r\nMIME-version: 1.0;\nContent-Type: text/html;\r\n<!DOCTYPE html>\n<html>\n </head>\n <body>\n <div>\n <h1>\n Hello test!\n </h1>\n </div>\n <div>\n <p>\n You are receiving this mail because a password reset has been requested for your account on <a href=\"https://example.org\">Test Instance</a>.\n </p>\n <p>\n To reset your password, <a href=\"https://example.org/reset_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\">click here</a> or paste the following in your browser's address bar:\n </p>\n <p>\n <code>\n https://example.org/reset_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\n </code>\n </p>\n </div>\n <div>\n <p>\n If you believe you've been sent this email in error, feel free to ignore it, or contact the administrator of <a href=\"https://example.org\">Test Instance</a>.\n </p>\n </div>\n </body>\n</html>\r\n", suite.sentEmails["user@example.org"])
|
suite.Equal("Subject: GoToSocial Password Reset\r\nFrom: GoToSocial <test@example.org>\r\nTo: user@example.org\r\nMIME-version: 1.0;\nContent-Type: text/html;\r\n<!doctype html><html></head><body><div><h1>Hello test!</h1></div><div><p>You are receiving this mail because a password reset has been requested for your account on <a href=\"https://example.org\">Test Instance</a>.</p><p>To reset your password, <a href=\"https://example.org/reset_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa\">click here</a> or paste the following in your browser's address bar:</p><p><code>https://example.org/reset_email?token=ee24f71d-e615-43f9-afae-385c0799b7fa</code></p></div><div><p>If you believe you've been sent this email in error, feel free to ignore it, or contact the administrator of <a href=\"https://example.org\">Test Instance</a>.</p></div></body></html>\r\n", suite.sentEmails["user@example.org"])
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUtilTestSuite(t *testing.T) {
|
func TestUtilTestSuite(t *testing.T) {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ func postformat(in string) string {
|
||||||
s = html.UnescapeString(s)
|
s = html.UnescapeString(s)
|
||||||
|
|
||||||
// 3. minify html to remove any trailing newlines, spaces, unnecessary elements, etc etc
|
// 3. minify html to remove any trailing newlines, spaces, unnecessary elements, etc etc
|
||||||
mini, err := minifyHTML(s)
|
mini, err := MinifyHTML(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// if the minify failed, just return what we have
|
// if the minify failed, just return what we have
|
||||||
return s
|
return s
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@ import (
|
||||||
|
|
||||||
var m *minify.M
|
var m *minify.M
|
||||||
|
|
||||||
// minifyHTML runs html through a minifier, reducing it in size.
|
// MinifyHTML runs html through a minifier, reducing it in size.
|
||||||
func minifyHTML(in string) (string, error) {
|
func MinifyHTML(in string) (string, error) {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
m = minify.New()
|
m = minify.New()
|
||||||
m.Add("text/html", &html.Minifier{
|
m.Add("text/html", &html.Minifier{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue