MJML
Ez az alcsomag akkor kell, ha a levél törzsét MJML-ből akarod fordítani, nem sima HTML-ből vagy html/template-ből.
import "github.com/gp-system/mail/mjml"
A mail/mjml MJML jelölést fordít responsive, email-kliens-barát HTML-lé, és maga is mail.Body: pontosan úgy illeszkedik a Message.WithBody-ba, mint egy sima plain text vagy HTML törzs. A forrás előbb html/template-ként renderelődik (a behelyettesített adat escape-elve), majd MJML-ből fordul. Tisztán Go-ban fut (Boostport/mjml-go, wazero WASM runtime). Nem kell Node.js se buildhez, se futáshoz.
Template és String
body := mjml.Template(tmpls, "templates/order_confirmation.mjml.tmpl", data).
WithTextTemplate("templates/order_confirmation.txt.tmpl")
// vagy inline forrásból:
body := mjml.String(`<mjml><mj-body>...</mj-body></mjml>`, data)
Az mjml.Template egy fs.FS-ből olvas (jellemzően egy //go:embed könyvtárból), ugyanazzal a szignatúrával, mint a mail.Template; az mjml.String egy inline forrás-stringet fordít. Mindkettő bővíthető WithFuncs(template.FuncMap)-pel parse előtt, a WithTextTemplate pedig a text-alternatívát csatolja (nincs automatikus text-generálás, lásd a Levéltörzs-típusok szakaszt).
Kidolgozott példa
Egy minimális rendelés-visszaigazoló sablon (templates/order_confirmation.mjml.tmpl):
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text font-size="20px" color="#333333">Szia, {{.CustomerName}}!</mj-text>
<mj-text>A rendelésed (#{{.OrderID}}) megérkezett, hamarosan indul.</mj-text>
<mj-button href="{{.OrderURL}}" background-color="#2563eb">Rendelés megtekintése</mj-button>
</mj-column>
</mj-section>
</mj-body>
</mjml>
A mjml.Template(tmpls, "templates/order_confirmation.mjml.tmpl", data) hívás ezt a fájlt először html/template-ként rendereli: a {{.CustomerName}}, {{.OrderID}} és {{.OrderURL}} helyekre a data mezői kerülnek, escape-elve. Az így kapott MJML-t a Boostport/mjml-go fordítja tovább: a <mj-section>/<mj-column> egy <table>-alapú, fix szélességű elrendezéssé lesz, a <mj-button>-ból egy VML-fallbackkel ellátott, Outlookban is helyesen megjelenő gomb, a <mj-text>-ből egy olvasható betűméretre és sortávra beállított bekezdés, mindezt kézzel írt media query vagy táblázat-tördelés nélkül. A mail.Body-vá csomagolt eredmény pontosan úgy megy a Message.WithBody-ba, mint egy sima HTML törzs (lásd Áttekintés a teljes hívási láncért).
Opciók
mjml.Minify(bool): a lefordított HTML minifikálása; defaulttrue.mjml.ValidationLevel("strict" | "soft" | "skip"): MJML-validáció szigorúsága; defaultsoft.
A WASM-költség
mail/mjml importja egy WASM runtime-ot linkel a binárisba, és az első renderelés fizeti meg a WASM-modul betöltését. A további hívások olcsóbbak. Csak az a bináris viseli ezt a költséget, amelyik ténylegesen importálja a csomagot: a mail gyökér és az smtp driver nem tud az mjml létezéséről. Tipikusan csak a cmd/worker importálja.A kittel
A shop mintaalkalmazás sendOrderConfirmation listenere így renderel egy rendelés-visszaigazolást; lásd az áttekintő oldal kidolgozott példáját. Egy ilyen sablon köré modul-szintű notifiert generálni az add mail feladata; a pontos generált alakért lásd a referenciáját.
Kapcsolódó oldalak
- Áttekintés: a
Mailerinterfész, aMessagebuilder és a többi törzs-típus. - SMTP: a driver, ami ténylegesen elküldi az ezen az oldalon fordított HTML-t.