Hallo,

Had een script gevonden voor die mail checkt maar ik kan nu wel domain blocken maar niet wat voor de @ staat.
Ik heb gezocht hoe dat kan oplossen maar kon niet zo vinden. Via het systeem waar mail wordt verzonden typen somsige mensen mail voor @ niet goed en als dan op mail checker.net kijk bestaat die wel maar eigenlijk is die mail niet in gebruik.

Een voorbeeld iemand typt woongroepmeerkoet@...nl
Maar woongroep hoor er niet voor te staan hoe kan ik dat blocken via php.

Dit is het script dat ik gevonden heb en nu gebruikt.

<?php
/*
* This script was writed by Setec Astronomy - [email protected]
*
* This script is distributed under the GPL License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* http://www.gnu.org/licenses/gpl.txt
*
*/
define ('DEBUG_OK', false);
class CCheckMail
{
var $timeout = 10;
var $domain_rules = array ("live.nl", "hotmail.nl");

function _is_valid_email ($email = "")
{ return preg_match('/^[.\w-]+@([\w-]+\.)+[a-zA-Z]{2,6}$/', $email); }

function _check_domain_rules ($domain = "")
{ return in_array (strtolower ($domain), $this->domain_rules); }

function execute ($email = "")
{
if (!$this->_is_valid_email ($email))
{ return false; }

$host = substr (strstr ($email, '@'), 1);

if ($this->_check_domain_rules ($host))
{ return false; }

$host .= ".";

if (getmxrr ($host, $mxhosts[0], $mxhosts[1]) == true)
{ array_multisort ($mxhosts[1], $mxhosts[0]); }
else
{
$mxhosts[0] = $host;
$mxhosts[1] = 10;
}
if (DEBUG_OK) { print_r ($mxhosts); }

$port = 25;
$localhost = $_SERVER['HTTP_HOST'];
$sender = 'info@' . $localhost;

$result = false;
$id = 0;
while (!$result && $id < count ($mxhosts[0]))
{
if (function_exists ("fsockopen"))
{
if (DEBUG_OK) { print_r ($id . " " . $mxhosts[0][$id]); }
if ($connection = fsockopen ($mxhosts[0][$id], $port, $errno, $error, $this->timeout))
{
fputs ($connection,"HELO $localhost\r\n"); // 250
$data = fgets ($connection,1024);
$response = substr ($data,0,1);
if (DEBUG_OK) { print_r ($data); }

if ($response == '2') // 200, 250 etc.
{
fputs ($connection,"MAIL FROM:<$sender>\r\n");
$data = fgets($connection,1024);
$response = substr ($data,0,1);
if (DEBUG_OK) { print_r ($data); }

if ($response == '2') // 200, 250 etc.
{
fputs ($connection,"RCPT TO:<$email>\r\n");
$data = fgets($connection,1024);
$response = substr ($data,0,1);
if (DEBUG_OK) { print_r ($data); }

if ($response == '2') // 200, 250 etc.
{
fputs ($connection,"data\r\n");
$data = fgets($connection,1024);
$response = substr ($data,0,1);
if (DEBUG_OK) { print_r ($data); }

if ($response == '2') // 200, 250 etc.
{ $result = true; }
}
}
}

fputs ($connection,"QUIT\r\n");
fclose ($connection);
if ($result) { return true; }
}
}
else
{ break; }
$id++;
}
return false;
}
}
?>
Dan zou jou je een extra var aan moeten maken voor domein-aliassen.
In je script kan je deze dan opvragen met $alias = explode("@",$email), en dan het eerste element uit $alias.
Met in_array controleer je of deze overeenkomt, en in dat geval blokkeer je de alias.

Tevens raad ik wel aan om je reguliere expressie aan te passen naar, want nu kan iemand met een .amsterdam tld zich niet aanmelden:

filter_var($email, FILTER_VALIDATE_EMAIL))

Bedankt ga naar kijken

[size=xsmall]Toevoeging op 18/01/2018 13:29:49:[/size]

Ik heb naar gekeken maar ik snap nog niet echt hoe ik die $alias = explode("@",$email), moet toe passen in de code.
Ik zou dan bij voorkeur een nieuwe functie (method) aanmaken:

<?php // kleurtjes tonen
function _check_alias_rules($email= "") { 
	/* Hier je controle op $email waarop je explode. Waarbij je de alias ophaalt, en met in_array controleert of deze in de array staan. */
}
?>


In die functie haal je met explode op de @ de alias op: $alias[0]
Vervolgens roep in execute() de functie aan, net als je ook al doen met de _check_domain_rules() functie.
Ik kom er nog niet helemaal uit want heb dit ook nog nooit gedaan. Maar heb wat dingen toegevoegd zo wat jij zei wat moet doen begreep ik dit er uit. Maar denk dat nog niet helemaal begrepen heb.

<?php var $alias_rules = array ("woongroep", "ronald1999");



function _check_alias_rules($email= "")
{return in_array (strtolower ($email), $this->alias_rules);}

function _is_valid_email ($email = "")
{ return filter_var($email, FILTER_VALIDATE_EMAIL);}


function _check_domain_rules ($domain = "")
{ return in_array (strtolower ($domain), $this->domain_rules); }

function execute ($email = "")
{

if (!$this->_is_valid_email ($email))
{ return false; }

$host = substr (strstr ($email, '@'), 1);

if ($this->_check_domain_rules ($host))
{ return false; }

$host .= ".";

$alias = explode("@",$email);

if ($this->_check_alias_rules ($alias))
{ return false; }
?>

[size=xsmall]Toevoeging op 18/01/2018 14:44:42:[/size]

Ik snapte niet helemaal waar ik de $alias moet toepassen
Maak er eens $alias[0] van. Want je wilt de alias pakken, en niet de hele array van $alias.

let er wel op dat dit naar de hele alias kijkt, en niet een deel!
Anders moet je met [php]strpos[/php] aan de slag.
Thanks, ja het is de [0] bij toevoegen en hij werkt! =-)

[size=xsmall]Toevoeging op 18/01/2018 15:15:26:[/size]

Maar heb nu 1 dingtje ik wil het woord "woongroep" blocken maar ook als het al voor komt in mail hoe kan dat het beste doen.
Gebruik de strpos() functie, zoals ik net beschreef. Daar staat een mooi voorbeeld achter de URL.
- Ronald - op 18/01/2018 11:10:27
Via het systeem waar mail wordt verzonden typen somsige mensen mail voor @ niet goed

Hoe ontstaat die situatie dan? Los daarvan, is je mail dan zo geconfigureerd dat deze alles accepteert?

Enne, je hebt nu een script dat mail uitleest ofzo? Kun je niet beter mail-instellingen beheren op de mailserver/via een controlepaneel waarbij je de toegestane/geldige adressen inperkt? Dit lijkt mij een beetje dweilen met de kraan open.

EDIT: je wilt waarschijnlijk ook niet specifieke adressen blokkeren (blacklist) maar slechts enkele toestaan (whitelist)? Een blacklist werkt alleen als je alle gevallen opneemt in de blacklist. Als iemand iets compleet anders invult ([email protected]) dan ben je met een blacklist-aanpak nog steeds nat... (oftewel, deze aanpak biedt geen soelaas)
Ik maak uit de topicstart op dat sommige mensen in een organisatie een verkeerd mailadres invullen. En dat deze mail bij de verkeerde partij aankomt.

Om hen niet op te zadelen bedacht de TS dus dat deze alias geblokkeerd wordt.

Als Ronald dit kan bevestigen, dan weten we het zeker.
- Ariën - op 18/01/2018 20:28:44
dat sommige mensen in een organisatie een verkeerd mailadres invullen.

Mja, tijd voor wat eenvoudige automatisering ingrepen? Retourneer fout geadresseerde e-mail gewoon, zorg dat medewerkers contactgegevens opslaan in een adresboek? In plaats van hemel en aarde te bewegen om toch recht te buigen wat krom is? Pak het probleem bij de bron aan. Zoals ik al zei: dweilen met de kraan open. Repareer de kraan ipv het dweilen te optimaliseren :p.

Reageren