Autor Zpráva
Rudolf
Profil *
Mám takový problém. Když použiju funkci mail()v php k odeslání, tato funkce sice vrátí OK, tedy vše v pořádku, ale ve skutečnosti žádnou zprávu neodešle. Mám dvě schránky. Jedna je na Tiscali a druhá na IOL. Server smtp.tiscali.cz nevyžaduje ověření, smtp.iol.cz ano. V obou případech je kontakt úspěšný ale k odeslání pošty nedojde. Používám XP, IE7, firewall AVG. Měl jsem původně spadeno právě na firewall, protože Apache má povolení komunikovat na portu 80, ale smtp vyžaduje port 25 a ten asi v tomto pravidle není povolen (PHP je za běhu součástí Apache). Zkusmo jsem tedy firewall vypnul ovšem bez výsledku. Zkusil jsem použít i třídu EXpertMailer, přesně totéž. Vzhledem k tomu, že funkce mail() je evidentně funkční, musím se už pouze dohadovat.. Možná, že je problém v php.ini. Základní nastavení je evidentně v pořádku jako SMTP = smtp.tiscali.cz a port smtp_port = 25. Není zapotřebí k odesílání pošty nějaký modul Apache? Děkuji za radu.
stradivarius
Profil *
Zkus se kouknout do schranky SPAM..
peta
Profil
http://www.volny.cz/peter.mlich/www.htm#msub11
# peter-mlich.wz.cz PHP mail form (3k) (POST)
# peter-mlich.wz.cz (zdroj: mailform.txt)

"mail()v php k odeslání, tato funkce sice vrátí OK, tedy vše v pořádku"
Znamena to jen, ze pri vykonavani funkce nenastal zadny problem, ze funguje treba tvuj SMTP a vse po nem. Z toho vyplyva, ze v PHP zrejme problem nebude.
- nastaveni SMTP
- odesilani ze SMTP ven, tez ten tvuj firewall
- vis jiste, ze tiscali i iol prijimaji maily s anonymniho uzivatele, maileru a pod? Zkusil bych se zeptat, jake HEAD vyzaduji u nich. Mne treba mail na volny.cz prijde z wz.cz s urcitym spozdenim asi 2 minuty, kdy to brzdi zrejme antispam PHP wz.cz a antispam volny.cz. Dohad. Ale prijdou mi.
Treba by stacilo pridat nejakou hlavicku do mail() funkce
- ucpany mailbox ? :)

Zkus to poslat treba na gmail.com , ten vetsinou prijima vse. Tez je to tezce prespamovane :) aspon tak 50 denne mam ve slozce spam

---

Ja ocekavam, ze v nejblizsi dobe konecne se nekdo nastve a udela MAIL protokol typu

typ: registrovany/neregistrovany
odesilatel: nazev + sifra odesilatele
prijemce: nazev + sifra prijemce
nejake hlavicky (mailova adresa a pod)

kde by sis nastavil, ze registrovane prijimat vsechny, neregistrovane jen ty, co si nastavi sam uzivatel, ze si je prida do seznamu.

kody registrovanych by byli ulozeny na nejakem serveru a menili by se treba kazdy den. aktualni by sis mohl stahnout pres el.podpis, ktery dostane kazdy registrovany.
Tim by bylo zabezpeceno, ze pokud by chtel spamer kody, musel by se registrovat nebo je vykradat na nekterem z registrovnych serveru. A tato dira by se dala pak snadneji najit nez ted, kdy si muze kazdy na free server hodit spambota a hltit net nesmysly jen pod vyhtuskou smazani stranky.

Samozrejme to neresi problem odchytavani transakci pres vzduch. Jenze pri spravne sifre si rozkoduje odesilatele a jeho "sifra" text (=kontrolni soucet, sifrovan) a jestli se neshoduje se zbytkem zpravy, tak mail zahodi.
Rudolf
Profil *
Ještě jednou na téma funkce mail() v PHP. Předně bych chtěl poděkovat všem, kteří měli snahu mi pomoci. Už to chodí!

Problémů bylo hodně. Nejsem v těchto síťových záležitostech příliš doma, takže nedokážu přesně odhadnout situaci. Předně, pokud máte několik schránek ,jako já, musí se upravit v účtech připojení smtp. Kupř. mám nyní nové připojení ADSL od O2, ale starou schránku u Tiscali. Správné nastavení tohot účtu je POP3.tiscali.cz , ale smtp.iol.cz!!!! a v menu servery zatrhnout položku Server požaduje ověření, dále vyplnit jméno a heslo od IOL!!!. Jinak nepůjde email ani z Outloku. Nevím, jestli IOl blokuje jiné smtp servery, každopádně je však nepodporuje a komunikace s nimi se nezdaří.

Samotná funkce mail() si evidentné neporadí s autorizací. Nepomáhají ani takové tahy jako nastavit v PHP.INI SMTP= jméno:heslo@smtp.iol.cz. Bylo mi tedy jasné, že jediná cesta je zvládnout smtp s autorizací přes smtp.iol.cz jiným prográmkem. Nakonec skutečně zabrala až třída XPertMailer, je nutné použít až příklad číslo 3. Definice této třídy má bohužel přes tisíc řádků, takže režie je značná!

Zkoušel jsem něco mnohem jednoduššíhi. Uvádím výpis programu.

function authSendEmail($from, $namefrom, $to, $nameto, $subject, $message)
{
//SMTP + SERVER DETAILS
/* * * * CONFIGURATION START * * * */
$smtpServer = "smtp.iol.cz";
$port = "25";
$timeout = "30";
$username = "name@iol.cz";
$password = "pass";
$localhost = "localhost";
$newLine = "\r\n";
/* * * * CONFIGURATION END * * * * */

//Connect to the host on the specified port
$smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
$smtpResponse = fgets($smtpConnect, 515);
if(empty($smtpConnect))
{ echo"Fail";
$output = "Failed to connect: $smtpResponse";
return $output;
}
else
{ echo "Connected to smtp.iol.cz";
$logArray['connection'] = "Connected: $smtpResponse";
}
//Say EHLO to ESMTP
fputs($smtpConnect, "EHLO $localhost" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['heloresponse'] = "$smtpResponse";
echo "<br>Response to Say EHLO to smtp => ".$smtpResponse;

//Request Auth Login
fputs($smtpConnect,"AUTH LOGIN" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authrequest'] = "$smtpResponse";
echo "<br>Request Auth login => ".$smtpResponse;

//Send username
fputs($smtpConnect, base64_encode($username) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authusername'] = "$smtpResponse";
echo "<br>Send username => ". $smtpResponse;

//Send password
fputs($smtpConnect, base64_encode($password) . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['authpassword'] = "$smtpResponse";
echo "<br>Send password => ". $smtpResponse ;

//-------------------------------------------------------------------- ------------
//Tad už měl server vracet dva kódy 334 a jeden 235
//První kód 334 však vrátil, až těsně před ukončením relace.
//viz výpis dole
//-------------------------------------------------------------------- ------------

//Email From
fputs($smtpConnect, "mail from:<name@iol.cz>\r\n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailfromresponse'] = "$smtpResponse";
echo "<br>Response email from => ".$smtResponse;
//Email To
fputs($smtpConnect, "rcpt to:<name@tiscali.cz>\r\n");
$smtpResponse = fgets($smtpConnect, 515);
$logArray['mailtoresponse'] = "$smtpResponse";
echo "<br>Response email to => ".$smtResponse;

//The Email
fputs($smtpConnect, "data". $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['data1response'] = "$smtpResponse";
echo"<br>Response to data => ".$smtResponse;

//Construct Headers
$headers = "MIME-Version: 1.0" . $newLine;
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
$headers .= "To: $nameto <$to>" . $newLine;
$headers .= "From: $namefrom <$from>" . $newLine;
$content = "To: $to\nFrom: $from\nSubject: $subject\n$headers\n\n$message\n.\n";
//echo "<br> Content - ". $content;
fputs($smtpConnect,$content);

$smtpResponse = fgets($smtpConnect, 515);
$logArray['data2response'] = "$smtpResponse";
echo "<br>Po odeslani emailu => ". $smtpResponse.

// Say Bye to SMTP
fputs($smtpConnect,"QUIT" . $newLine);
$smtpResponse = fgets($smtpConnect, 515);
$logArray['quitresponse'] = "$smtpResponse";
echo "<br>QUITE Probehlo to => ".$smtpResponse;
}

//-------------------------------------------------------------------- -----------------

Výsledek výpisu předkládám:

Connected to smtp.iol.cz
Response to Say EHLO to smtp => 250-smtp-out4.iol.cz
Request Auth login => 250-PIPELINING
Send username => 250-SIZE 13721600
Send password => 250-ETRN
Response email from =>
Response email to =>
Response to data =>
Po odeslani emailu => 334 VXNlcm5hbWU6 6
QUITE Probehlo to =>

//-------------------------------------------------------------------

Ta hláška od serveru uvozená 334, má být správně hned za Send password. Připadá mi to, jako by smtp.iol.cz nestíhal. Nebyl jsem schopen s tím nic udělat. Dávám to jenom jako námět.

Rudolf.
Boner
Profil *
Tenhle scpipt funguje jen na portu 25 protoze nepodporuje sifrovani.
Ale jinak funguje paradne....
Anonymní
Profil *
Je to zajimave. Mohl byste napsat kod na odesilani mailu s anonymnim odesilatelem?
nightfish
Profil
Anonymní
mail("komu@poslat.email.cz", "Predmet e-mailu", "Nejaky text", "From: anonymni@odesilatel.cz ");
adresu v hlavičce From je možno libovolně měnit, pokud bude platnou e-mailovou adresou

ale pozor, i v tomto případě lze odesílatele správy většinou vystopovat
Anonymní
Profil *
Chci posilat SMS na Eurotel pomoci funkce mail() v PHP, jenze Eurotel povoluje jen 60 znaku a kdyz v te zprave objevuje i adresa odesilatele, to zabere jiz asi 15 az 20 znaku. Muze nekdo v tom poradit, aby v zprave neobjevil odesilatel? Dekuji.
Toto téma je uzamčeno. Odpověď nelze zaslat.