@@ -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,38 @@ 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+ body = c .Body
566+ switch c .ContentType {
567+ case CampaignContentTypeMarkdown :
555568 var b bytes.Buffer
556569 if err := markdown .Convert ([]byte (c .Body ), & b ); err != nil {
557570 return err
558571 }
559572 body = b .String ()
560- } else {
573+
574+ // Is it MJML? Convert to HTML.
575+ case CampaignContentTypeMJML :
576+ htmlBody , err := mjml .Render (c .Body )
577+ if err != nil {
578+ return fmt .Errorf ("error compiling MJML: %v" , err )
579+ }
580+ body = htmlBody
581+ default :
561582 body = c .Body
562583 }
563584
@@ -609,6 +630,13 @@ func (c *Campaign) ConvertContent(from, to string) (string, error) {
609630 return out , err
610631 }
611632 out = b .String ()
633+ } else if from == CampaignContentTypeMJML &&
634+ (to == CampaignContentTypeHTML || to == CampaignContentTypeRichtext ) {
635+ htmlBody , err := mjml .Render (c .Body )
636+ if err != nil {
637+ return out , fmt .Errorf ("error converting MJML: %v" , err )
638+ }
639+ out = htmlBody
612640 } else {
613641 return out , errors .New ("unknown formats to convert" )
614642 }
0 commit comments