Diskuze: Odeslání e-mailu v PHP
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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
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_encoding(), 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.
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ě.
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.
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.
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.
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íš.
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
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
Tak bavíme se v rámci PHP samozřejmě . 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
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.
Zobrazeno 12 zpráv z 12.