IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Odeslání e-mailu v PHP

Aktivity
Avatar
Honza
Člen
Avatar
Honza:12.2.2018 21:05

Ahoj všichni,
chci poprosit o radu. Přecházím z ASP na PHP a mám před sebou první challenge potřebuju odeslat data formuláře mailem. Zkoušel jsem funkci mail() i PHPmailer a vždycky to na něčem ztroskotá (mail() například na kódování - přijde rozsypaný čaj a asi neumí posílat html zprávy) Phpmailer píše: Fatal error: Class 'PHPMailer' not found in... přitom tam mám příslušný soubor nahraný.

Poradíte někdo nějaký zaručený skript, který spustím a poběží (tedy odešle zprávu po zadání příslušných parametrů)?

Díky za rady.

 
Odpovědět
12.2.2018 21:05
Avatar
Hando
Člen
Avatar
Odpovídá na Honza
Hando:12.2.2018 21:13

Ahoj.
Mail() vyžaduje dobře nastavené hlavičky odesílané zprávy, mít soubory uložené v utf-8 (nikdo snad nic jiného ani nepoužívá)...
PhpMailer je oproti tomu jednodušší na běžné používání. To, co píšeš, je chyba v samotném scriptu, ne v phpmaileru. Nestačí mít soubor pouze nahraný, ale je potřeba vytvořit instanci dané třídy před použitím. Viz PhpMailer - first time

Editováno 12.2.2018 21:13
 
Nahoru Odpovědět
12.2.2018 21:13
Avatar
Honza
Člen
Avatar
Honza:12.2.2018 21:59

Díky za tip, ale nefungovalo to. Zkusil jsem to podle tutoriálu. Vyhledal jsem na síti soubor PHPMailerAuto­load.php, nahrál ho na web. vytvořil jsem si odesílací script a skončilo to naprosto stejnou chybou, jako předtím.

 
Nahoru Odpovědět
12.2.2018 21:59
Avatar
Odpovídá na Honza
Michal Šmahel:12.2.2018 23:20

Když ti dělá problém předávání závislostí a PHPMaileru nerozumíš, raději zůstaň u funkce mail().

Tato funkce má určité nedostatky, je potřeba dávat pozor na správné složení hlavičky (jak již psal Hando). Problémy s kódováním ti pomůže vyřešit nahrazení za obalovou funkci mb_send_mail(). Pokud si před jejím použitím nastavíš mb_internal_en­coding(), neměl by být problém.

Více o mb_send_mail() nalezneš např. v PHP dokumentaci. Správné nastavení hlavičky se řeší např. na Stack Overflow.

Nahoru Odpovědět
12.2.2018 23:20
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Michal Šmahel
Petr Čech:12.2.2018 23:53

S tím si dovolím nesouhlasit, to je špatný přístup.
Něco jako umět si přidat autoloader a rozumět tomu, kde se ty třídy berou je napro základní znalost pro kohokoliv, kdo nechce věci prasit v čistém PHP, což je zcela objektivně špatně.

Nahoru Odpovědět
12.2.2018 23:53
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Honza
Petr Čech:12.2.2018 23:58

Zkus si najít něco na téma autoloading tříd v PHP, to by ti mělo říct, proč ti to nefunguje a budeš vědět, jak to skládat z objektů.
V zásadě jde o to, že PHP je interpretované, takže vyloženě vleze na jeden konkrétní soubor a o zbytku projektu vůbec neví. Proto se musí každá třída vložit pomocí require_once. To je ale otrava psát všude, tak existují autolodery, co na základě většinou namespace umí všechny ty třídy, co používáš najít a vložit samy.
Oproti tomu ASP.NET je kompilované, takže se jasně ví, co se má kde hledat, je jasně dané, kde začíná a končí projekt a pod.

Nahoru Odpovědět
12.2.2018 23:58
the cake is a lie
Avatar
Odpovídá na Petr Čech
Michal Šmahel:13.2.2018 16:37

Omlouvám se, asi to vyznělo špatně. Určitě s tebou plně souhlasím. Každopádně zajisté projekt nedělá objektově (když tohle neví), takže ho potřebuje primárně dokončit.

Dělat to směsicí neobjektového kódu s částmi objektového mi přijde také nic moc. Každopádně oceňuji, že jsi tento (a další) příspěvek napsal, neboť mu zajisté pomůže minimálně v budoucnu.

Určitě preferuji čistý, objektový kód postavený na pevných základech, který je rozvíjen po vzoru zarytých dobrých praktik s přihlédnutím k různým architekturám. Na tuto úroveň se však člověk potřebuje postupně propracovat, málo kdo píše hned takovým stylem.

Editováno 13.2.2018 16:39
Nahoru Odpovědět
13.2.2018 16:37
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Honza
Člen
Avatar
Honza:13.2.2018 16:51

Díky za komentáře. Nakonec jsem opustil myšlenku phpMaileru a našel hotové jednoduché řešení s mb_send_mail(), které posílá v utf-8 a je do cca 10 řádků kódu. Potřeboval jsem posílat mail s přílohou. To jsem prozatím vyřešil uploadem na server a do těla mailu vkládám odkaz. Objektové .NET skutečně nepoužívám, doteď jsem vystačíl s klasickým ASP (formuláře, databáze, e-mail bez příloh). Až bude víc času zkusím se prohrabat třídami v PHP.

 
Nahoru Odpovědět
13.2.2018 16:51
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Honza
Petr Čech:13.2.2018 17:11

Pokud jsi nedělal s objektovým ASP.NET, doporučil bych začít se okamžitě učit objektové PHP a MVC/MVP architekturu, jinak získáš hromadu špatných návyků, kterých se těžko zbavíš.

Nahoru Odpovědět
13.2.2018 17:11
the cake is a lie
Avatar
Odpovídá na Petr Čech
Marian Benčat:13.2.2018 18:02

Přesně tak, třeba začít s operátory pole, to je třeba perfektní OOP přístup, to když se od PHP nauci, tak se špatným návykům vyhne :D

Zajimalo by me jak by se mel v PHP naucit dobrym navykum, kdyz samotny jazyk a hlavně STDLIB je sbírka antipatternu a špatných návrhu

Editováno 13.2.2018 18:04
Nahoru Odpovědět
13.2.2018 18:02
Totalitní admini..
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Marian Benčat
Petr Čech:13.2.2018 19:46

Tak bavíme se v rámci PHP samozřejmě :D . A v PHP se dají dělat i hezké věci, jen tě k tomu ten jazyk nedonutí, no. Stdlib je strašlivá, ale tak to ti právě často zabalí framework do něčeho použitelného ;)

Nahoru Odpovědět
13.2.2018 19:46
the cake is a lie
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:2.3.2018 15:35

Musíš nahrát všechny soubory na server, nejen autoload, také class.phpmailer, class.smtp atd. Také musíš tento soubor vložit do skriptu pomocí include nebo require.

 
Nahoru Odpovědět
2.3.2018 15:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.