@@ -16,6 +16,7 @@ import (
1616 "github.com/jmoiron/sqlx"
1717 "github.com/jmoiron/sqlx/types"
1818 "github.com/lib/pq"
19+ "github.com/preslavrachev/gomjml/mjml"
1920 "github.com/yuin/goldmark"
2021 "github.com/yuin/goldmark/extension"
2122 "github.com/yuin/goldmark/parser"
@@ -49,6 +50,7 @@ const (
4950 CampaignContentTypeMarkdown = "markdown"
5051 CampaignContentTypePlain = "plain"
5152 CampaignContentTypeVisual = "visual"
53+ CampaignContentTypeMJML = "mjml"
5254
5355 // List.
5456 ListTypePrivate = "private"
@@ -545,19 +547,37 @@ func (c *Campaign) CompileTemplate(f template.FuncMap) error {
545547 body = r .regExp .ReplaceAllString (body , r .replace )
546548 }
547549
550+ // Parse the base template also as MJML if the campaign content type is MJML.
551+ if c .ContentType == CampaignContentTypeMJML {
552+ htmlBody , err := mjml .Render (body )
553+ if err != nil {
554+ return fmt .Errorf ("error compiling MJML: %v" , err )
555+ }
556+ body = htmlBody
557+ }
558+
548559 baseTPL , err := template .New (BaseTpl ).Funcs (f ).Parse (body )
549560 if err != nil {
550561 return fmt .Errorf ("error compiling base template: %v" , err )
551562 }
552563
553- // If the format is markdown, convert Markdown to HTML.
554- if c .ContentType == CampaignContentTypeMarkdown {
564+ // If the campaign format is markdown, convert Markdown to HTML.
565+ switch c .ContentType {
566+ case CampaignContentTypeMarkdown :
555567 var b bytes.Buffer
556568 if err := markdown .Convert ([]byte (c .Body ), & b ); err != nil {
557569 return err
558570 }
559571 body = b .String ()
560- } else {
572+
573+ // Is it MJML? Convert to HTML.
574+ case CampaignContentTypeMJML :
575+ htmlBody , err := mjml .Render (c .Body )
576+ if err != nil {
577+ return fmt .Errorf ("error compiling MJML: %v" , err )
578+ }
579+ body = htmlBody
580+ default :
561581 body = c .Body
562582 }
563583
@@ -609,6 +629,13 @@ func (c *Campaign) ConvertContent(from, to string) (string, error) {
609629 return out , err
610630 }
611631 out = b .String ()
632+ } else if from == CampaignContentTypeMJML &&
633+ (to == CampaignContentTypeHTML || to == CampaignContentTypeRichtext ) {
634+ htmlBody , err := mjml .Render (c .Body )
635+ if err != nil {
636+ return out , fmt .Errorf ("error converting MJML: %v" , err )
637+ }
638+ out = htmlBody
612639 } else {
613640 return out , errors .New ("unknown formats to convert" )
614641 }
0 commit comments