Jump to content
php.lv forumi

E - mail pārbaude


Klez

Recommended Posts

Uztaisīju vienu maziņu skriptiņu, kas pārbauda e-mail, vai ir valīds un vai domēns eksistē, ar iespēju bloķēt noteiktus domēnus

Kapēc šit rakstu. Man liekas ka šī ir aktuāla problēma pie reģistrācijām.

<?php
ini_set('display_errors',0); //lai fsockopen nebljaustas ja nau pareizs hosts
//šajā masīvā savadām email adreses, ar kurām nav iespējams veikt reģistrāciju
//šie trīs domēni ir temporarie email servisi
$blocked_domain = array("pookmail.com","mailinator.com","dodgeit.com");
function validate_email($email_address)
{
//atgriezham FALSE ja ir kljuuda, ja viss ok atgriezham TRUE
global $blocked_domain;
if (preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._-]+\.[A-Z]{2,6}$/i", $email_address)){
	/*E - mail adreses formāts ir OK, {2,6} vaig jo ir  .museum*/
	$m = explode('@',$email_address);
	$host = $m[1];
	unset($m);
	if (in_array($host,$blocked_domain)) return FALSE;
	$fp = fsockopen($host, 80, $errno, $errstr, 1); 
	/*piekonektējams pie hosta. Parasti uz visiem mail domēniem 80 ports ir atvērts , griežas kāds WEBs vai arī WEB mails. */
	if (!$fp) {/* hosts neexistee */ fclose($fp); return FALSE; }
	return TRUE;
}else return FALSE; //Nav OK E - mail formāts
}

if (validate_email('manspasts@kautkas.lv')) echo 'Emails pareizs'; else echo 'Nepareiz emails!';
?>

Manuprāt daudz maz normāls :), lai izķerstītu tādus kas regojas ar bla@tralalaa.lv un bloķētu noteiktus domēnus. Vēl vienīgi varētu te piemest klāt adreses, kurās ir iespējams reģistrēt temporary emailus, kā http://www.pookmail.com

vēl ir te bik http://www.zend.com/zend/spotlight/ev12apr.php

Te ir jāiet manuprāt pie katra servera runāties. Respektīvi ja ir inbox.lv tad pop.inbox.lv one.lv ir one.lv, lab, kko sacepināšu :) pagaidām itais

Link to comment
Share on other sites

/*piekonektējams pie hosta. Parasti uz visiem mail domēniem 80 ports ir atvērts , griežas kāds WEBs vai arī WEB mails. */

apstrīdams, tad jau labāk uz 110/25

 

tieši tā, man draugam piem. mājās nemētājas webs, bet mailserveris griežās ...

 

kā arī jautājums kapēc aizveram socket ja atbildes nav, bet kad ir atbilde tad neaizveram socket ?

Edited by [Ya]
Link to comment
Share on other sites

tods te: http://paste.php.lv/2892

Skripts paarbauda vai e-pasta adrese eksistē!

Bet gljuki ira. Nevarēju atrast tvnet.lv serveri, kas atbildeetu uz 25 porta, ja nu vieniigi tas mails vinjiem staav uz latnet serveriem ..

ar inbox probleema ...

220 smtp.inbox.lv ESMTP

HELO inbox.lv

250 smtp.inbox.lv

MAIL FROM: <xxxxx@inbox.lv>

250 ok

RCPT TO: <xxxxx@inbox.lv>

553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

kur varētu būt proba ?

emails ir pareizs un iists.

Edited by Klez
Link to comment
Share on other sites

1. es domaaju, ka paarsvaraa tev atgrieziis shaadu kljuudu, jo open relay serveri tiek blacklisteeti un visi no taa izvairaas. deelj spama protams.

2. var meegjinaat ar finger noteikt vai ir taads juuzers uz servera, bet biezji vien arii no personiigaas pieredzes skatoties tas serviss parasti tiek atsleegts viens no pirmajiem

3. ko tu tur ciinies, ja jau ir php core funkcijas, kas cheko domainus.

4. http://lv.php.net/eregi

Link to comment
Share on other sites

es laikam esmu īpaši stulbs padevies, bet joprojām neredzu vajadzību pēc meila čekošanas caur hosta konekcijas esamību. ievadīt var tur dajebko un viņš vienalga rāda, ka meils ir OK. un ja nav aktivizācijas tad es ievadu blahblahblah@inbox.lv un tu vari kaut izlekt pa logu - viņš tāpat nav valīds lai gan funkcija atgriež OK.

tātad secinājumi:

 

1) ja meils ir tikai ķeksīša pēc (obligātais fields, bez aktivizācjas) tad pietiek tika ar regexpu - nu nafig taisīt liekas konekcijas un lieki resursus tērēt, ja tā funkcija tāpat aiziet pa pieskari ierakstot jebkuru feikotu meilu ar reālu domēnu galā?!

 

2) ja ir aktivizācija, tad lietotājs principā rakstīs iekšā kādu reālu meilu, lai varētu aktivizāciju apstiprināt (dooh). ja negribēs tad skatīt pirmo punktu - pārbaudam pēc regexpa un smtp tāpat atmetīs atpakaļ, ja nebūs valīds meils (jebkurā gadījumā)

 

3) ja taisa maillistes - skat. otro un pirmo punktu.

 

tātad galvenā problēma ir tāda, ka tu NEKAD nevarēsi (atskaitot izmantojot aktivizācijas mailus) noteikt vai meils tiešām ir valīds vai nav. un līdz ar ko visa šī reģistrācijas jezga tiek novesta līdz pašam elementārākajam - pārbaudam ar regexpu un metam aktivizācijas meilu (pirmstam jāpabrīdina lietotājs, tas uzreiz stimulē pareiza meila ievadi). blahblahblah@inbox.lv tev jebkurā gadījumā atnāks atpakaļ maildelivery error.

Link to comment
Share on other sites

+ protams tādi sīkumi kā:

 

if (isset($_POST['m'])){
if (validate_email($_POST['m'])) echo $_POST['m'].' - ir OK'; else echo $_POST['m'].' - Nepareiza adrese';
}

 

aizstājami ar:

if ( isset($_POST['m']) ) {
 echo $_POST['m'].( validate_email($_POST['m']) ? ' OK' : ' BAD');
}

Link to comment
Share on other sites

performance (hāhā sekundes miljardā daļa - sīkums, bet patīkami) + pārskatāmāk + glītāk.

 

+ kāda hera pēc skriptā vēl tiek explodēts kkas?

regexpā nogrupē domēna regus un pēctam vienkārši izmanto matchu domēnam.

 

preg_match ( string pattern, string subject [, array &matches [, int flags [, int offset]]] )

Link to comment
Share on other sites

Ju tas ka var iedot blaaa@inbox.lv tas jaa.

Vieniigaa sisteem jau ir registraacija ar paarbaudes mailu.

Bet nu parasti jau "pareizie" lietotaaji ievad blaaa@lalalala.lv vai kkaa taaa.

Bus laiks uztaisiishu skriptu, kas suuta autorizacijas kodu. Domaju ka taads noderees kaadam :) turmaak :) es ceru :)

Link to comment
Share on other sites

×
×
  • Create New...