Autor Zpráva
Hanz
Profil
Mám problém. Chci posílat emaily z PHP, ale problém je v tom že SMTP server je na jiném počítači. Jak to mám v PHP nastavit?
thingwath
Profil
SMTP = localhost
smtp_port = 25

v php.ini, místo localhost samozřejmě nějaké lepší hostname
Hanz
Profil
thingwath
No to jo, ale já nemám k php.ini přístup. Potřebuju to nastavit nějak v PHP souboru, kde je script na odeslání emailu.
thingwath
Profil
Hm, některé nastavení PHP se dá změnit přímo ze skriptu, ale nevím jestli to je právě tohle.

V nejhorším by se dal napsat jednoduchý SMTP klient přímo v PHP.
Hanz
Profil
thingwath
No tak jak to zatím vidím tak nezbyde nic jiného než ten SMTP klient v PHP, to ale v žádném případě nedokáže :o)
Nedá se to někde stáhnout?
thingwath
Profil
Prvním pohledem možná tohle: http://freshmeat.net/projects/smtpclass/
Hanz
Profil
thingwath
Takže po delším skoumání jsem si stáhl nakonec tohle.
Ale netuším co teď s tím. Vím že bych to mněl v tom souboru "example.php" nastavit. ALe nevím jak to mám spojit s tím mým formulářem. Mohl byses na to podívat. Úplně nejlepší by bylo kdybys mi to celé udělal. Styčí mi formulář do kterého se zadá jméno a nějaký text a potom se to odešle.

Takže pokud se na to podíváš tak předem díky.
thingwath
Profil
Tenhle vypadá skutečně jednoduše (ve smyslu, že má skutečně jenom základní funkcionalitu). Example.php je ukázkový skript, který odesílá e-mail. Ty ho chceš přepsat do obsluhy svého formuláře.

Potřebuješ si vytvořit pole s parametry, takové jako v té ukázce. Většina z položek je asi jasná sama o sobě, zkusím vysvětlit ty, které by jasné být nemusely. Do položky 'helo' chceš dát jméno pod kterým se ohlásíš onomu SMTP serveru. 'auth' a heslo se jménem použiješ, pokud chceš přihlašování, nevím, jestli to ten konkrétní server vyžaduje, tipuju spíš ne.

'recipients' je pole příjemců (nevím proč je v ukázce IP adresa, ale normálně tam samozřejmě budeš chtít dát doménu).

Pak po tobě v 'headers' chtějí pole s položkama do hlavičky, to je celkem opruz, to by si mohlo generovat samo. Nicméně význam jednotlivých položek je asi jasný, do From dáš odesílatele, To příjemce, Subject je předmět zprávy.

Pak vyplníš 'from' (třeba stejně jako From v hlavičce).

Zbývá už jenom 'body', kam vložíš právě text e-mailu.

Ten závěr s vytvořením objektu a odesláním už je celkem jasný a i když ne, tak stačí jenom opsat a případně nahradit hlášky.
thingwath
Profil
Tedy, není mi úplně jasné, proč to v té ukázce neřeší přes konstruktor ale takhle. Bylo by to tak IMHO hezčí...
Hanz
Profil
thingwath
No teď jsem už všechno udělal. Teď bych potřeboval vyřešit už jen poseldní věc. A to je že já mám formulář v jiném PHP souboru a script pro odeslání v jiném. Když kliknu na odeslat tak se mi otevře ten PHP soubor se scriptem k odeslání. A poté tam má aby se to po odeslání vrátilo na původní stránku. A teď přijde ten problém. Já chci mít ten formulář na všech stránkách ale když tam zadám určitou stránku na kterou se to má vrátit tak to nezjistí na kterou. Napadají mně 3. řešení. Ale nevím jak na to.
1) Nejlepší by bylo kdyby se to odeslalo v tichosti --> neotvíral by se ten soubor.
2) Také by nebylo špatné kdyby byl jen jeden script v tom souboru a nic by se nevolalo. --> u toho nevím jak udělat nějakou podmínku aby se ten email odeslal až po kliknutí
3) Nejhorší možnost, ale taky přijatelná by byla kdyby se nějak předala adresa na kterou se to má po odeslání vrátit.


Takže kdybys mohl tak mi aspoň jednu popiš.
thingwath
Profil
Tohle se dá udělat tak, že klienta vrátíš na referer odkaď přišel. Já řešil na stránkách návrat ze skriptu na odesílání formuláře tímhle:

header("HTTP/1.1 302 Redirect");
header("Location: ".$_SERVER['HTTP_REFERER']);
thingwath
Profil
Vlastně to funguje i bez toho prvního headeru, je tam docela nadbytečný.
Hanz
Profil
thingwath
Začínám si připadat jako úplný blb :o(
Má ten formulář a z něj předám přez POST hodnoty "jmeno" a "text"
A to chci potom odeslat a píšu to takhle:
$send_params['body'] = "Jmeno: $jmeno";

Email mi přijde, ael ta hodnota nikde :o( --> kde je problém?
thingwath
Profil
Nemáš zapnuté Register_globals, což stejně nechceš.

$send_params['body'] = 'Jmeno: '.$_POST['jmeno'];

:-)
Hanz
Profil
thingwath
Dík! Sice netuším co to Register_globals je, ale už to jede.
thingwath
Profil
Prohledej diskusi nebo se mrkni do dokumentace k PHP, tam je to vysvětlené.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0