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