Nefunguje odesílání emailu z kontaktního formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
spiider
Člen | 162
+
0
-

Ahoj mám jednoduchý kontaktní formulář po jehož vyplnění bych ho chtěl odeslat pomocí emailu. Používám přesně stejný příklad jako je v dokumentaci:

if ($form['send']->isSubmittedBy()){
            $data = $form->getValues();
            $body = "Zpráva od: $data[name]
                     Email: $data[email]
                     Zpráva: $data[message]
                    ";
            $mail = new Message;
            $mail->setFrom('Franta <franta@example.com>')
                ->addTo('mujemail@seznam.cz')
                ->setSubject('Zpráva z kontaktního formuláře')
                ->setBody($body)
                ->send();

            $this->flashMessage('Děkujeme za zaslání zprávy');
            $this->redirect('Contact:default');

        }

Jak jsem zjistil vše zkolabuje na send(); hlásí to chybu 500, nevíte kde je problém. Jinak vše na stránkách funguje v pořádku. Díky

Jan Endel
Člen | 1016
+
0
-

500 znaci obecnou chybu, takze klidne to muzou byt erupce na slunci. Slozka log by mela napovedet vice.

spiider
Člen | 162
+
0
-

A co přesně z logu mám hledat je tam toho docela dost, ale log s dnesnim datem tam teda neni

Jan Endel
Člen | 1016
+
0
-

Log by si mel udrzovat prubezne cisty, ale budiz. Nette se chova pri logovani tak, ze kdyz chyba nastane opakovane, tak vygeneruje ladenku pro dannou chybu jen co par dnu. Tedy zazalohuj si veskere vygenerovane ladenky (a posleze je vyres) z logu ladenky smaz a refreshni stranku. Mela by se v logu objevit nova ladenka s chybou co shanis.

spiider
Člen | 162
+
0
-

Aha, takže to hlasí chybu že to nemůže najít ErrorPresenter, píše to cestu že ho hledá v app/Presenters, ale já ho mám v app/FrontModule/Presenters/ErrorPresenter.php co teda teď? Lze nějak změnit cestu kde má error presenter hledat? díky

davidm
Člen | 81
+
0
-

Třeba změnit error presenter v bootstrapu …

$application->errorPresenter = 'Front:Error';
spiider
Člen | 162
+
0
-

Diky teď mi to už píše zase toto: mail(): SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE

Koukal jsem na fóru, ale nenašel jsem co s tím. Díky

Semik
Backer | 135
+
0
-

spiider napsal(a):

Diky teď mi to už píše zase toto: mail(): SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE

Koukal jsem na fóru, ale nenašel jsem co s tím. Díky

Ideálně vypnout SAFE mode.

spiider
Člen | 162
+
0
-

Toto mě můj hosting neumožňuje, to se divým že prostý odeslání emailu dělá takový problémy, neexistuje jiné řešení?

Jan Endel
Člen | 1016
+
0
-

jde o funkci send defaultně používá interní funkci php mail(), které se nelíbí pátý argument, v tomto případě public property $commandArgs objektu SendmailMailer. A nějak z api nedokážu vyčíst, jak se tam ten $coomandArgs dostane a hlavně odkud. Zkus si bud tedy dumpnout:

$mail->mailer->commandArgs;

a nebo (což rozhodně doporučuju) vytvoř SMTP mailer a napoj se na existující smtp přes které posílej (pokud není šikovně nakonfigurovaný stroj totiž, tak to stejně bude chodit do spamu a třeba na seznam vůbec nedojde v defaultní konfiguraci debianu).

Editoval pilec (14. 11. 2011 22:31)

spiider
Člen | 162
+
0
-

Tak sem to zkusil podle návodu i podle ruzných vlánek na fóru ale pořád nic, teď to mám takto:

if ($form['send']->isSubmittedBy()){
            $data = $form->getValues();

            $body = "Zpráva od: $data[name] \n
                     Email: $data[email] \n
                     Zpráva: $data[message] \n
                    ";
            $mail = new Mail();
            $mail->setFrom('info@stranky.cz')
                   ->addTo('email@example.cz')
                   ->setSubject('Zpráva z webu')
                   ->setBody($body);

            $mailer = new Mailer((array) \Nette\Environment::getConfig('mailer'));
            $mail->setMailer($mailer);
            $mail->send();

            $this->flashMessage('Děkujeme za zaslání zprávy');
            $this->redirect('Contact:default');

        }

a v config.neon mam toto:
mailer:
host: smtp.server.cz
port: 465
username: „info@stranky.cz"
password: "*****“
transport: ssl
takhle sem to tu někde našel, ale píše to Class ‚Nette\Mail‘ not found

Díky za rady

Jan Endel
Člen | 1016
+
0
-
Mail -> \Nette\Mail\Message
spiider
Člen | 162
+
0
-

Ted to zase píše Class ‚FrontModule\Mailer‘ not found zkoušel jsem i

$mailer = new \Nette\Mail\SmtpMailer((array)....atd

ale nic díky

Editoval spiider (17. 11. 2011 18:46)

Jan Endel
Člen | 1016
+
0
-

Bud doplnit do use Nette\Mail\SmtpMailer a pak používat jen SmtpMailer nebo to vypsat pěkně ručo. Ale důrazně doporučuju si něco prostudovat o namespace pro PHP. Tohle jsou totiž základy.

spiider
Člen | 162
+
0
-

use sem tam měl, nicméně už to jede, díky za trpělivost a rady