Názory k článku
PHP okénko: Kontrola e-mailové adresy
Doplneni treti moznosti
celé vláknoV mnoha pripadech byva nacitani obrazku z jinych url zakazane, avsak BFU si je casto ze zvedavosti povoluji : )
Takova spise spamerska vec ... fuj fuj : )
Re: Doplneni treti moznosti
celé vláknoRe: Doplneni treti moznosti
celé vláknoPoužití IMG je spíše kontrolou, jestli je daná emailová schránka funkční, jenže pro to je ve většině případů vhodnější použití druhé varianty (občas může druhé řešení selhat - např. mailservery Atlas.cz vrací kód 250 i pro neexistujícího uživatele atd.).
Ke druhe moznosti
celé vlákno1) Nechavas otevrene sockety
2) SMTP konverzace by mela koncit QUITem (prip. RSET, QUIT) a ne ji proste utnout nebo nechat uhnit.
Jen tak rejpu kdyz zrovna nemam u obeda co delat ;-)
Re: Ke druhe moznosti
celé vláknoRe: Ke druhe moznosti
celé vláknoRe: Ke druhe moznosti
celé vláknob) je nutné mít (chtít) všechny informace v češtině?
Re: Ke druhe moznosti
celé vláknodruha moznost + dalsi moznost
celé vláknopak je tady moznost jeste vyuzit PEAR:
<?
require_once('PEAR.php');
require_once('Mail/RFC822.php');
$p = new PEAR();
$m = new Mail_RFC822();
if (!$p->isError($m->parseAddressList($from, NULL, false, true)) {
# mail je v poradku
}
?>
Re: druha moznost + dalsi moznost
celé vláknoRe: druha moznost + dalsi moznost
celé vláknoRe: druha moznost + dalsi moznost
celé vlákno$from = 'Name <richard> (comment)'?
Re: druha moznost + dalsi moznost
celé vlákno<?php
require_once('Mail/RFC822.php');
$x = new Mail_RFC822();
$y = $x->isValidInetAddress('lampa@root.cz', 1);
?>
vraci false kdyz je to spatne a kdyz je to dobre, tak vraci pole obsahujici cast pred a za zavinacem
Re: druha moznost + dalsi moznost
celé vláknouser%gmail.com@root.cz
user%gmail.com%seznam.cz@root.cz
:-))
vsechno spatne
celé vláknoRe: vsechno spatne
celé vláknoRe: vsechno spatne
celé vláknoRe: vsechno spatne
celé vláknoKe druhému rešení
B) Se skriptem obdobně napsaným jsem už měl i několik drobných problémů s rychlostí odezvy od serveru (což zmiňuje Lampa), ale to jde vyřešit pomocí funkce stream_set_timeout() .
regex
celé vlákno/^((?:(?:(?:[a-zA-Z0-9][\.\-\+_]?)*)[a-zA-Z0-9])+)\@((?:(?:(?:[a-zA-Z0-9][\.\-_]?){0,62})[a-zA-Z0-9])+)\.([a-zA-Z0-9]{2,6})$/
Re: regex
celé vláknoRe: regex
celé vláknoSvého času jsem se pokusil kontrolu podle RFC 2822 napsat, výsledek, který povolenou syntaxi velmi dobře aproximuje, najdete na http://www.ucw.cz/~mj/tmp/checkaddr . Zvládne i takové špeky, jako je třeba "a b"@c.d nebo x@[y z.org].
navrh na dalsi PHP okenko ...
Tedy se vsim vsudy: bezpecny kod pro placeni kartou pres internet.
ne zcela spravne
celé vláknoMaily typu a..b@neco.cz
(jeden takovy pouziva treba moje pritelkyne :)
Mozna to neni uplne dle RFC, ale v praxi to funguje ... kratke, dobre zapamatovatelne jmeno.
A co tecka na konci domeny?
xyz@neco.cz.
(trochu nestandardni pouziti, ale platna domena .... )
> "Podle RFC 2821 sice doména může poštu přijímat i bez MX záznamu, ale nebývá to zvykem."
Ve chvili kdy nemam nad svymi dns zaznamy uplnou kontrolu tak jsem rad ze se dorucuje i na A zaznam ... obvykly to sice neni, ale zas tak okrajovy pripad to nemusi byt.
Myslim ze v praxi je asi lepsi pouzit co nejjednodussi regexp asi ve stylu "[^@]+@[^@]+" a kdyz to neni platne tak holt uzivateli neprijde aktivacni email a ma smulu :)
Re: ne zcela spravne
celé vláknoTakže to budeme hodně podporovat, aby se to stalo standardem :/
Re: PHP okénko: Kontrola e-mailové adresy
A ako mam vypisat ze neplatny email z toho?
<?php
/** Odeslání příkazů SMTP serveru
* @param resource otevřený socket k SMTP serveru
* @param array příkazy k odeslání
* @return bool false v případě, že některý příkaz nevrátí 250
*/
function smtp_commands($fp, $commands) {
foreach ($commands as $command) {
fwrite($fp, "$command\r\n");
$s = fgets($fp);
if (substr($s, 0, 3) != '250') {
return false;
}
while ($s[3] == '-') {
$s = fgets($fp);
}
}
return true;
}
/** Ověření funkčnosti e-mailu
* @param string adresa příjemce
* @param string adresa odesílatele
* @return bool na adresu lze doručit zpráva, null pokud nejde ověřit
* @copyright Jakub Vrána, http://php.vrana.cz/
*/
function try_email($email, $from) {
if (!function_exists('getmxrr')) {
return null;
}
$domain = preg_replace('~.*@~', '', $email);
getmxrr($domain, $mxs);
if (!in_array($domain, $mxs)) {
$mxs[] = $domain;
}
$commands = array(
"HELO " . preg_replace('~.*@~', '', $from),
"MAIL FROM: <$from>",
"RCPT TO: <$email>",
);
$return = null;
foreach ($mxs as $mx) {
$fp = @fsockopen($mx, 25);
if ($fp) {
$s = fgets($fp);
while ($s[3] == '-') {
$s = fgets($fp);
}
if (substr($s, 0, 3) == '220') {
$return = smtp_commands($fp, $commands);
}
fwrite($fp, "QUIT\r\n");
fgets($fp);
fclose($fp);
if (isset($return)) {
return $return;
}
}
}
return false;
}
?>
skusal som if(try_email == true)... ale nejde ta

