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" />