Levélküldés – rendszerleírás

A központi küldő form két módja, a validációs sorrend, a sorba állított, azonnali és ütemezett küldés, a csatolmány-feltöltés, a háttérfeladatok és a jogkulcsok.

Áttekintés

A küldő form két módban működik: modul-kötött (sor-akcióból, modul- és objektumazonosítóval) és szabad (Levelezés → Levél küldése). Minden küldés a Dlbtmail::dispatch() központi úton megy; modulonkénti saját küldés nincs. A táblanevek a telepítés saját előtagjával állnak az adatbázisban.

Adatmodell

TáblaSzerep
email_messagea kiküldött levél napló-sora
mail_log_itemcímzettenkénti tétel
mail_attachmenta levél csatolmányai (dokumentumtári hivatkozás)
cron_queuea sorba állított küldési feladat
mail_template, mail_template_description, mail_channelsablon és csatorna (olvasás)

A form és a keresők

  • A sablonlistát a templatesFor adja: modul módban csak a modul sablonjai, szabad módban csak a szabad sablonok. A sablon client-hatóköre ellenőrzött (error_template_scope).
  • search: címzett-kereső (felhasználók, személyek, cégek); docsearch: dokumentumtári kereső tartalmi szűréssel, a document/document::list jogot is kéri; preview: a sablon renderelése a modul változóival (collectVars, a tulajdonos modul mailVars()-a). Tulajdonos modulok: nav/taxaccount, finance/settlement, nav/ifa.
  • A csatornát a resolveChannel oldja fel a client alapján.

Küldés (mail/send.dispatch)

  1. Tárgy és törzs kötelező (a beküldött entitások dekódolva).
  2. Címzettek normalizálása (normalizeAddress); érvénytelen cím név szerint hibát ad. Csoport-címzettek feloldása tartalmi szűréssel (resolveGroup). Papír módban címzett nem kötelező.
  3. Levél-fajta: transactional vagy newsletter.
  4. Mód: alapból sorba állított (visszavonható); immediate csak a mail/send::immediate joggal, enélkül naplózva sorba kerül.
  5. Ütemezett időpont: érvényes dátum, múltbeli tiltott (1 perc tűrés).
  6. Generált mellékletek: a tulajdonos modul tervei (generatePlans); ha lehetett volna terv, de nem érkezett, hiba.
  7. Csatolmányok tartalmi szűrése (docIdsInScope), majd dlbtmail->dispatch(). A könyvtár a gmail, ms365, smtp és mail szolgáltatót, a tiltólistát és a leiratkozó linket kezeli.

Csatolmány-feltöltés

A mail/send.upload a fájlt a közös Dlbtdocstore::addDocument() úton a client dokumentumtárába tölti objektum-típussal. Üres POST-nál post_max_size hibát ad, a tárhely-szabály hiányát kimondja. Jog: canAction(upload); a client a tartalmi hatókörön belül (error_upload_client).

Háttérfeladatok

  • mail_message: egyszeri feladat, a sorba állítás hozza létre; a napló-sor payload_json-jából küld (Dlbtmail::runQueued). Visszavont sor nem küldhető; újrapróbálás a csatorna próbálkozási száma és várakozási ideje szerint.
  • mail_sweep: globális, ötpercenként fut, önfenntartó (catalog/controller/mail/batch::processSweepForCronqueue); az elveszett sor-bejegyzésű vagy beragadt (releaseStuck) leveleket a napló alapján újraindítja (dueQueuedIds).

Jogosultság

  • Szabad levél: maySend('') = canAction(mail/send, send); a form megnyitása canAction(send, list) és maySend(module).
  • Modul-kötött levél: canAction(<modul>, sendmail); az edit nem foglalja magába.
  • immediate és upload külön kulcs; a debug csak a katalógusban szerepel, a vezérlő nem ellenőrzi.
  • A kulcsok a seedekben nincsenek besorolva; a gyakorlatban UNMAPPED.