Odesílání emailu z kontaktního formuláře
- Sveet
- Člen | 55
Dobrý den.
Po té co jsem zde včera řešil otázku na ikonku do tlačítka submit mám
další problém, nikoliv se vzhledem formuláře, ani nic podobného, ale
s odesláním formuláře na emailovou adresu. Nevíte jak tohle vyřešit?
Mám funkci pro odesílání, ale je zde problém, jelikož mi to píše chybu
na řádku číslo 46
36:
37: return $form;
38: }
39:
40: public function sendMailForm($form) {
41:
42: $values = $form->getValues();
43:
44: $mail = new Message;
45: $mail -> setSubject('Zpráva z kontaktního formuláře')
46: $mail -> setFrom('Kodujeme web <info@kodujemeweb.cz>')
47: $mail -> addTo('Kodujeme web <info@kodujemeweb.cz>')
48: $mail -> setBody($values['zprava'])
49: $mail -> send()
50: $this -> flashMessage("E-mail byl odeslán!", "alert alert-success")
Editoval Sveet (14. 3. 2014 9:44)
- sKopheK
- Člen | 207
nejak ti tam vsude chybi stredniky…
na localu si muzes dat dummy mail server, ktery ven nic neposle, ale php ti
nehodi chybu – napr. http://smtp4dev.codeplex.com/
- Pavel Macháň
- Člen | 282
Sveet napsal(a):
Pardon omlouvám se moje blbost, na serveru to běží, na localu hází chybu. Zkrátka zřejmě nepůjde odesílat email z localu, a stejně by mi to na localu bylo k ničemu
Na testování emailu používám Test mail server tool
- Sveet
- Člen | 55
Stejně bych na Vás pár otázku měl, aby mé téma nebylo zbytečné
- Nevíte náhodou jak nastavit barvy pozadí flashMessage? Zobrazuje se jen jedna zpráva, na bílem pozadí, a nevypadá to moc dobře
- Proč mi script odesílá mail s emailem který jsem nastavil pro zasílání? Příklad přijde email od uživatele info@kodujemeweb.cz, i když v input uvedu jiný email
- Proč flashMessage nevypisuje chyby i pro input, dovolí klidně odeslat prázdný formulář
Zde je kompletní script:
use Nette\Application\UI\Form;
use Nette\Mail\Message;
abstract class BasePresenter extends Nette\Application\UI\Presenter {
protected function createComponentMailForm() {
$form = new Form();
$form -> addText('mail', 'Text')
-> setAttribute('placeholder', 'E-mailová adresa')
-> getControlPrototype()
-> flashMessage("Uveďte e-mailovou adresu", "alert alert-success")
-> class('contact_input');
$form -> addText('phone', 'Text')
-> setAttribute('placeholder', 'Telefonní číslo')
-> getControlPrototype()
-> flashMessage("Uveďte telefonní číslo", "alert alert-success")
-> class('contact_input');
$form -> addTextArea('zprava', 'Text')
-> setAttribute('placeholder', 'Text zprávy')
-> getControlPrototype()
-> flashMessage("Uveďte text zprávy")
-> class('contact_textarea');
$form -> addSubmit('submit')
-> getControlPrototype()
-> setName('button')
-> setHtml('Odeslat <img class="contact_all" src="images/all.png" alt="">')
-> class('contact_submit');
$form -> onSuccess[] = $this -> sendMailForm;
return $form;
}
public function sendMailForm($form) {
$values = $form->getValues();
$mail = new Message;
$mail -> setSubject('Zpráva z kontaktního formuláře');
$mail -> setFrom('Kodujeme web <info@kodujemeweb.cz>');
$mail -> addTo('Kodujeme web <info@kodujemeweb.cz>');
$mail -> setBody($values['zprava']);
$mail -> send();
$this -> flashMessage("E-mail byl odeslán", "alert alert-success");
$this -> redirect("default");
}
}
- David Matějka
- Moderator | 6445
Flash message se volaji na presenteru, ne na elementu inputu. Precti si dokumentaci, jak validovat formular (addRule, setRequired…)
Nevíte náhodou jak nastavit barvy pozadí flashMessage?
css?
Editoval matej21 (14. 3. 2014 14:06)
- Sveet
- Člen | 55
Jakou třídu class má mít flashMessage? Například takto?
.flashMessage{
background: #číslo barvy
color: #číslo barvy
}
Ovšem pak netuším jak udělat aby chybový a správný měli dvě odlišné barvy. Odpověď proč mi chodí email z adresy info@kodujemeweb.cz i když zadám do formuláře jiný email asi nedostanu, že?
- Mysteria
- Člen | 797
FlashMessage třeba takhle (přes CSSka si pak jednotlivým typům nastavíš jakou barvu chceš).
<div n:foreach='$flashes as $flash' class='flash {$flash->type}'><img src='{$basePath}/images/{$flash->type}.png' alt='{$flash->type}' />{$flash->message}</div>
Proč ti chodí email pořád z jedné adresy je jasné, když ji tam máš natvrdo a nebereš to z inputu:
$mail -> setFrom('Kodujeme web <info@kodujemeweb.cz>');
$mail -> addTo('Kodujeme web <info@kodujemeweb.cz>');
Editoval Mysteria (14. 3. 2014 20:26)
- Sveet
- Člen | 55
Tímto zápisem přece nastavím email na který se mají odesílat emaily.
$mail -> setFrom('Kodujeme web <info@kodujemeweb.cz>');
A tímto přeci přidám dalšího příjemce. Takže nevidím kde to mám zapsáno natvrdo
$mail -> addTo('Kodujeme web <info@kodujemeweb.cz>');
No jo jenže zatím ještě netuším jaké jsou druhy flashMessage. Ovšem myslím, že error, info, success. Pletu se?
- Mysteria
- Člen | 797
->setFrom() je email odesílatele a ->setTo() je email příjemce, takže tak jak to máš ty znamená, že pošleš email sám sobě (stejnej odesílatel i příjemce).
Druhy flashMessage jsou jaký ty chceš, ve $flash->type je druhý parametr metody, když vezmu co tam máš ty:
$this -> flashMessage("E-mail byl odeslán", "alert alert-success");
tak typ je alert alert-success, takže když použiješ můj způsob zobrazování, tak ti z toho vznikne <div class=‚flash alert alert-success‘>…</div>.
- Sveet
- Člen | 55
V tom případě nechápu co mám napsat do → setForm() když je i v dokumentaci uvedeno
-> setForm('Franta <franta@example.com>')
Když závorku nechám prázdnou píše mi to chybu, na řádku → setForm když tam dám $form taky nejde. Takže co bych tam měl dát když se to v dokumentaci uvádí takhle?
Tak nic taky jsem tento problém vyřešil tímto zápisem:
-> setForm('$values['mail']')
Editoval Sveet (16. 3. 2014 9:49)