mail

MJML

MJML sablonozás mailhez.

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; default true.
  • mjml.ValidationLevel("strict" | "soft" | "skip"): MJML-validáció szigorúsága; default soft.

A WASM-költség

A 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 Mailer interfész, a Message builder és a többi törzs-típus.
  • SMTP: a driver, ami ténylegesen elküldi az ezen az oldalon fordított HTML-t.
Copyright © 2026