Požadavek send-email
Účel a dopady
Odešle jednu nebo více e-mailových zpráv prostřednictvím poštovního profilu (SMTP nastavení uloženého v x_mail_profile), volitelně uloží kopii odeslané zprávy do IMAP schránky. Vedlejší efekty: skutečné odeslání e-mailu přes SMTP, případně zápis zprávy do IMAP složky poštovního serveru.
Tato stránka popisuje jen chování platné pro send-email; drop-email je mimo rozsah této revize.
Dostupnost, kontext, oprávnění apod.
- Dostupné každému přihlášenému uživateli; přístup ke konkrétnímu mailovému profilu (
profile) je dále omezen obecným mechanismem admin-filtrů podle efektivní role volajícího – ne pevnou rolí typur_admin. - Vyžaduje běžící mailovou službu serveru; je-li zastavená, požadavek vždy skončí chybou bez ohledu na oprávnění.
- Podléhá standardnímu transakčnímu zpracování obálky
<request>(transactional/přeskočení při odvolané transakci) – viz obálka požadavku.
XML požadavek (syntax + popis)
<request>
<send-email
profile="{number}"
opt-roles="{string}"
all-or-nothing="{bool}"
verbose="{bool}"
folder="{string}"
flags="{string}"
>
<email ... /> *
</send-email>
</request>
Parametry a pravidla (atributy, potomci)
profile- Profil odesílatele - Číselný identifikátor záznamu vx_mail_profile. Je-li vynechán nebo prázdný, použije se výchozí mailový profil přihlášeného uživatele (pokud jej má nastaven). (typ:number; nepovinný; výchozí: výchozí mailový profil volajícího)opt-roles- Volitelná role - Přepíše efektivní roli použitou při ověření přístupu k profilu oproti roli přihlášení. (typ:string; nepovinný)all-or-nothing- Přerušit při první chybě příjemce - Je-li jiné než"false"(tedy i bez uvedení), přeruší odesílání dané zprávy ostatním příjemcům, jakmile selže odeslání jednomu z nich; týká se jen dané jednotlivé zprávy, ne ostatních potomkůemailv témže požadavku. (typ:bool; nepovinný; výchozí:true)verbose- Detailní odpověď - Je-li"true", ke každémuemailv odpovědi (úspěšnému i neúspěšnému) se přidá výpis jednotlivých příjemců a jejich stavu. (typ:bool; nepovinný; výchozí:false)folder- Cílová IMAP složka - Je-li uvedena, server se po odeslání pokusí uložit kopii zprávy do této IMAP složky poštovní schránky profilu (např./Sent Items); při vynechání se kopie neukládá. (typ:string; nepovinný)flags- IMAP příznaky uložené kopie - Použije se jen společně sfolder; řetězec IMAP příznaků (např.\Seen) nastavených na uloženou kopii zprávy. Tento atribut dosavadní dokumentace vůbec nezmiňovala. (typ:string; nepovinný)
Potomek: email (0 a vícekrát) – jedna odesílaná zpráva. Přesná syntaxe obsahu uzlu email na vstupu (hlavičky, příjemci, tělo, přílohy, případné operace nad dokumenty) není v tomto rozsahu dokumentována; dosavadní odkaz na „asi:email“ neodpovídá žádné existující stránce dokumentace.
Závislosti
flagsmá smysl jen společně sfolder.all-or-nothingovlivňuje jen odesílání v rámci jedné zprávy (email), ne zpracování ostatníchemailpotomků v témže požadavku – ty se zpracují vždy všechny bez ohledu na výsledek předchozích.
Příklady požadavku
(Zatím bez ověřeného příkladu.)
Zpracování a vedlejší účinky
- Server nejprve ověří platnost
profile(číselná hodnota nebo výchozí profil uživatele); nelze-li jej určit, vrátí chybu bez pokusu o odeslání. - Poté ověří přístup k danému profilu pro efektivní roli (
role/opt-roles); selže-li samotné vyhodnocení filtru (chyba databáze), vrátí chybu s vnořeným diagnostickým uzlem; zamítne-li filtr přístup, vrátí chybu oprávnění. - Dále ověří, že mailová služba běží a že pro daný
profileexistuje aktivní synchronizační profil; jinak vrátí příslušnou chybu. - Kořenový uzel odpovědi
<send-email status="ok">se zapíše hned na začátku zpracování jednotlivých zpráv a už se dál nemění – ani selhání jednotlivýchemailpotomků nezměnísend-email/@statuszpět na"error". Celkový neúspěch je signalizován jen jednotlivými uzly<email status="error">a interním příznakem výsledku požadavku (ovlivňujícím např. odvolání transakce), ne atributemsend-email/@status. - Pro každý potomek
email(v pořadí, bez namespace) server: (1) zpracuje jeho XML obsah (parseMailFromXML) – při selhání vrátí<email status="error" detail="Zpracovani XML mailu se nezdarilo">s vnořeným diagnostickým uzlem a pokračuje dalšímemail; (2) při úspěchu zprávu odešle (sendMail, respektujeall-or-nothing) – při selhání vrátí<email status="error" detail="Pri odesilani mailu doslo k chybe">s vnořeným diagnostickým uzlem (a přiverbose="true"i výpisem příjemců), jinak vrátí<email status="ok" .../>smsg-id/mkeya případněstore, je-li uvedenfolder. - Atribut
dkeyz requestového uzluemail(pokud je uveden) se echoem vrací zpět ve všech třech větvích (úspěch i obě chyby). - Zpracování jednoho
emailNEPŘERUŠÍ zpracování dalších potomkůemailv témže požadavku (na rozdíl např. odsql-query) – server se pokusí odeslat všechny.
XML odpověď (syntax + popis)
<response>
<send-email
status="ok|error"
detail="{string}"
>
<email ... /> *
</send-email>
</response>
Parametry a pravidla (atributy, potomci) – odpověď
status- Výsledek -"ok"u prvotních úspěšných kroků a vždy u kořenového uzlu, jakmile začalo zpracování jednotlivých zpráv (viz „Zpracování“ výše);"error"jen u chyb nastalých před zahájením tohoto zpracování (neplatný profil, chybějící oprávnění, zastavená služba, chyba admin-filtru). (typ:enum; povolené hodnoty:ok,error)detail- Popis chyby - Přítomen jen u chyb nastalých před zahájením zpracování zpráv. (typ:string; nepovinný)
Uzel email
<email
status="ok|error"
msg-id="{string}"
mkey="{number}"
dkey="{string}"
store="append|stored|failed"
detail="{string}"
>
<recipient ... /> *
</email>
status- Výsledek zprávy -"ok"nebo"error". (typ:enum; povolené hodnoty:ok,error)msg-id- Id zprávy - Alfanumerický identifikátor zprávy sdílený s IMAP uložištěm; přítomen jen přistatus="ok". (typ:string)mkey- Interní klíč zprávy - Celočíselný identifikátor zprávy ve flexideu; přítomen jen přistatus="ok". (typ:number)dkey- Klíč dokumentu z požadavku - Echo hodnotydkeyz requestového uzluemail, je-li uvedena; přítomno při úspěchu i obou chybových větvích. (typ:string; nepovinný)store- Výsledek uložení kopie do IMAP - Přítomen jen byl-li v požadavkusend-emailuvedenfolder, a jen ve větvistatus="ok":"append"/"stored"při úspěšném volání ukládací funkce (rozlišení dvou dílčích výsledků tohoto volání),"failed"při jeho selhání. (typ:enum; nepovinný; povolené hodnoty:append,stored,failed)detail- Popis chyby -"Zpracovani XML mailu se nezdarilo"nebo"Pri odesilani mailu doslo k chybe"; přítomen jen přistatus="error". Obě tyto chybové větve jsou otevírací/uzavírací dvojice s možností vnořeného uzlu error. (typ:string; nepovinný)
Potomek recipient (0 a vícekrát), jen při verbose="true" na requestu: <recipient email="{string}" status="ok|error"/> – status="error" znamená odmítnutého příjemce. Tento uzel dosavadní dokumentace vůbec nezmiňovala.
Příklady odpovědi
(Zatím bez ověřeného příkladu.)
Chyby a reakce
<send-email status="error" detail="Atribut profile neobsahuje platnou hodnotu, nebo uzivatel nema predvoleny profil"/>–profilechybí/je neplatný a volající nemá výchozí mailový profil.<send-email status="error" detail="Pri zpracovani admin-filteru doslo k chybe">+ vnořenýerror+</send-email>– selhání admin-filtru na úrovni databáze.<send-email status="error" detail="Nemate patricna opravneni"/>– admin-filtr zamítl přístup k danému profilu pro efektivní roli.<send-email status="error" detail="Pozadovany profil neexistuje"/>– zadanýprofilenemá odpovídající aktivní synchronizační profil v mailové službě.<send-email status="error" detail="Mailova sluzba je zastavena"/>– mailová služba serveru neběží.<send-email status="error" detail="Transakce byla odvolana"/>/status="skip" detail="Transakce byla preskocena"– standardní transakční vyřazení obálky.- Uvnitř úspěšně zahájeného zpracování:
<email status="error" detail="Zpracovani XML mailu se nezdarilo">…</email>a<email status="error" detail="Pri odesilani mailu doslo k chybe">…</email>– viz „Zpracování“ výše; tyto chyby NEMĚNÍsend-email/@status, které zůstává"ok". - Výraz pro identifikaci chyb v odpovědi serveru musí kontrolovat obě úrovně:
send-email[@status='error'] | send-email/email[@status='error'].