Pro odeslání obsahu formuláře na email slouží control <f:emailForm>. Ten je vlastně takový rozšířený <f:collectionForm>. Jeho chování je velmi podobné. <f:emailForm> umí vše, co umí <f:collectionForm>. Navíc kromě ukládání do kolekce dovede i odesílat upozornění na email, včetně obsahu formulářových polí. V takovém případě naopak nemusí mít atribut targetCollection uvedený – data z formuláře pak jen odesílá na email a nikam je neukládá (u controlů jednotlivých polí se pak pochopitelně neuvádí atribut targetField).
Zprovoznění formuláře <f:emailForm> se vám bude možná zdát nějaké složité. Nepropadejte panice, ve skutečnosti jde spíše o pár otravných drobností, jako například určení mailerserverů, účtů apod., které je potřeba udělat. Pojďme se na ně postupně podívat.
Formulář
Upravíme kontaktní formulář, který jsme vyrobili v předchozím kroku, tak, aby autorovi blogu zároveň chodilo upozornění na nové zprávy ze stránky „O autorovi“.
...
<form method="post" runat="server">
<f:EmailForm runat="server"
id="contact"
targetCollection="message"
emailTemplate="Forms/Contact">
<!-- sem přijde formulář -->
</f:EmailForm>
</form>
...
Control <f:collectionForm> jsme tedy vyměnili za <f:emailForm> a přibyl nám atribut emailTemplate, který určuje šablonu emailu.
Šablona emailu
Šablona emailu se umísťuje do textového souboru. Hodnota atributu emailTemplate obsahuje cestu k uzlu, analogicky k atributu textNode controlu <je:text>. Do textového souboru zapíšeme šablonu emailu takto:
...
<Forms>
<Contact>
<Subject>Můj cvičný blog – někdo napsal</Subject>
<Body>
Gratuluji autore, píše ti čtenář tvého blogu.
Jméno: {name}
Email: {email}
Zpráva: {message}
</Body>
</Contact>
</Forms>
...
Element <Subject> obsahuje předmět posílaného emailu, <Body> jeho tělo. Výrazy ve složených závorkách – např. {name} – odpovídají atributům id formulářových polí ve stránce.
Email příjemce a mailserver
Poslední nezbytností je říct systému JellyPot, odkud a komu má notifikační email poslat. To se dělá jednoduše přidáním následujícího kódu do souboru Runtime.config.
<JellyPotDef xmlns="urn:Bet:ns:JellyPot:RuntimeConfig">
...
<EmailForms>
<EmailServer name="primaryServer"
from="john.smith@example.org"
smtp="..."
userName="..." pwd="..." />
<EmailForm name="contact"
server="primaryServer"
to="admin@example.org" />
</EmailForms>
...
</JellyPotDef>
Sekce EmailForms obsahuje dva elementy. <EmailServer> obsahuje konfiguraci mail serveru – tj. adresu pro SMTP, email odesílatele, jméno uživatele a jeho heslo. Ten pak uvedeme v konfiguraci konkrétního formuláře v elementu <EmailForm>. Jeho atribut name obsahuje id formuláře ve stránce (v našem případě to je contact). Atribut server představuje výše definovaný emailový server. A konečně atribut to obsahuje emailovou adresu, na kterou se má email poslat. Adresu nemusíme uvádět v Runtime.config, můžeme uvést i odkaz na pole přístupné v administraci, tedy např.:
<EmailForm name="company"
server="primaryServer"
toVar="contact.adminEmail" />