Čtrnácté cvičení – Databáze řízená emailem (velký příklad)

MSD – Moje Skvělá Databáze

Zadání ve formě PDF

Úkolem je napsat databázi MSD – Moje Skvělá Databáze, která si bude pamatovat emailové adresy, jména a popisky osob a bude řízená přes emailové příkazy.

Disclaimer: Jedná se o starý lehce upravený, ale jinak originální a nefalšovaný Forstův příklad ze zkoušky v červnu 2012 :-)

Struktura databáze

Databáze by si měla pamatovat následující položky:

Jak bude databáze uložené je čistě na vás.


Ovládání

Databáze se bude ovládat příkazy přes email. Váš skript bude zavolán tak, že mu na vstupu bude předán celý email včetně hlaviček, a on na něj musí odpovídajícím způsobem zareagovat a odeslat výsledek operace emailem nazpět.

Z hlavičky emailu nás zajímá pouze hlavička From:, která obsahuje emailovou adresu odesílatele emailu. V těle každého emailu (tedy za prvním prázdným řádkem) pak bude právě jeden MSD příkaz (ale před i za MSD příkazem může být nějaký balast, třeba podpis nebo jiný text).

MSD příkaz bude zapsaný jako MSD <příkaz> <parametr> na samostatném řádku (příkaz je uvedený vždy, parametr když ho příkaz potřebuje). Pod příkazem pak mohou být zapsané jednotlivé klíče, viz následující ukázka:


From: emailova@adresa.cz
Subject: Nějaký subject, nezajímá nás
Hlavička: Jiná nezajímavá hlavička

Balast okolo, který nás nezajímá

MSD ADD
:NAME Tomáš Novák
:EMAIL tomas@novak.cz
:PHONE 777666555
:DESCR Nějaký slovní popis, který může být
 i víceřádkový, dokud jsou navazující řádky uvozeny mezerou.
 Takže tento řádek do popisu ještě patří.
Ale tento už do popisu nepatří a je to zase nějaký balast.

Pokud pod příkazem není zapsaný klíč EMAIL, tak se vezme email odesílatele. Zbylé položky (NAME, PHONE a DESCR) jsou nepovinné. Někde se ještě může vyskytnout položka KEY.


Podporované příkazy


Bonusové věci


Odesílání emailů

Odesílání emailů je velmi jednoduché, stačí k tomu použít příkaz {\tt mail} a předat mu na standardním vstupu tělo emailu (hlavičky si vytvoří sám):

echo "Moje zprava" | mail -s "Predmet" nejaky@adresat.cz

Ukázkové řešení

Skryto pro možnost znovupoužití příkladu v dalším roce.