mail

SMTP

SMTP transzport konfiguráció a mailhez.

Ez az az alcsomag, amit egy projekt akkor importál, amikor ténylegesen levelet akar küldeni, nem csak a mail-ben definiált interfészt használni.

import "github.com/gp-system/mail/smtp"

A mail/smtp a konkrét driver, ami ténylegesen elhagyja a processzt: SMTP-n keresztül küld, a wneessen/go-mail-lel. Ez az egyetlen mailer a modulban, ami hálózati kapcsolatot nyit; a tesztekben és a mail nélküli környezetekben használt no-op alternatívákért lásd az áttekintő oldal Dev mailerek szakaszát.

Konstruktorok

mailer, err := smtp.New(ctx, cfg.Mail)              // hibázik üres Host vagy FromAddress esetén
mailer, err := smtp.NewIfConfigured(ctx, cfg.Mail)  // üres Host -> mail.NewDiscard(), nincs hiba
mailer := smtp.MustNewIfConfigured(ctx, cfg.Mail)    // panicol hiba esetén; a szokásos main()-konstruktor

Konfiguráció

Az smtp.Config MAIL_ prefixszel kerül a projekt configjába:

type Config struct {
    // ...
    Mail smtp.Config `envPrefix:"MAIL_"`
}
VáltozóDefaultJelentés
MAIL_HOST(üres = nincs transport)SMTP szerver címe
MAIL_PORT587SMTP port
MAIL_USERNAME / MAIL_PASSWORDüresüresen: nincs auth (Mailpit, belső relay)
MAIL_AUTHautoauto | plain | login | cram-md5 | none
MAIL_TLSstarttlsstarttls | starttls-opportunistic (dev, TLS nélküli szerver) | tls (implicit TLS, 465) | none
MAIL_FROM_ADDRESSkötelező, ha MAIL_HOST be van állítvadefault feladó cím
MAIL_FROM_NAMEüresdefault feladó megjelenített neve
MAIL_TIMEOUT15sdial/send timeout

A teljes lista a konfiguráció-referenciában.

TLS- és auth-módok

A MAIL_TLS négy mód közül választja ki a kapcsolat titkosítását: a starttls egy plaintext kapcsolatot frissít a kezdeti handshake után (a szokásos 587-es port beállítása, és itt a default); a starttls-opportunistic ugyanezt próbálja, de eltűri, ha a szerver nem ajánlja fel, hasznos egy plain SMTP-t beszélő dev relay (Mailpit) ellen; a tls implicit TLS-sel tárcsáz az első bájttól (465-ös port); a none nyílt szövegben küld, kizárólag megbízható belső hálózathoz.

A MAIL_AUTH a SASL-mechanizmust választja: az auto a szerver által hirdetett legerősebb mechanizmust egyezteti, és ez a helyes default bármi éleshez. A plain és a login explicit fallback szűkebb hirdetésű szerverekhez; a cram-md5 egy legacy challenge-response mechanizmus régebbi relay-ekhez. A none teljesen kihagyja az authot, ugyanaz a "nincs credential" álláspont, amit az üres MAIL_USERNAME/MAIL_PASSWORD már úgyis jelez, hasznos, ha maga a relay hálózati hely alapján, nem credentiallel korlátoz.

Timeoutok és az indulási kapcsolat-ellenőrzés

A New konstruáláskor egy dial+close-lal ellenőrzi a kapcsolatot, ugyanaz a konvenció, mint a pg.NewPool/queue.NewClient pingje: a hibás konfig induláskor bukik, nem az első levélnél. A MAIL_TIMEOUT mind ezt az induláskori ellenőrzést, mind minden további dial/send-et korlátoz. Minden Send saját OTel spant nyit (smtp.send), címzett-darabszámmal; címekkel soha.

NewIfConfigured: a dev/prod kapcsoló

A Host és a FromAddress nem required env-tag: az üres Host azt jelzi, hogy a projektnek nincs mail-transportja beállítva (jellemzően devben, vagy egy olyan service-ben, ami sosem küld levelet ténylegesen). A NewIfConfigured (és a panicoló párja, a MustNewIfConfigured) ezt mail.NewDiscard()-ra fordítja hiba helyett; a New továbbra is hibázik üres FromAddress-re, ha a Host be van állítva, mert az néma módon félrecímezné minden üzenetet. A NewIfConfigured-t köti be az add mail egy generált projektbe.

Egy new project-tel generált projekt compose.yml-je már futtat egy mailpit service-t (SMTP-t fogad, a UI-ja a MAILPIT_HOST-on érhető el), a .env.example pedig a hozzá illő MAIL_* sorokkal, de az smtp.Config bekötése a projekt configjába, és az smtp.NewIfConfigured/MustNewIfConfigured hívása egyszer, az első add mail hívásakor történik meg.

Kapcsolódó oldalak

  • Áttekintés: a Mailer interfész, a Message builder és a dev mailerek.
  • MJML: az az MJML template-fordítás, aminek a HTML-jét ez a driver küldi.
  • add mail: a generátor, ami egy notifiert és ezt a drivert köti be egy modulba.
Copyright © 2026