Tutorials

Mailing lists

Steeds meer providers treden steeds vaker en vooral harder op tegen spam. En terecht wie heeft er nu geen hekel aan al die spam?

Pagina 1

Waarom deze tutorial?

Bijna 1 jaar geleden is bij mijn hosting provider een nieuwe anti spam regeling in gegaan. Om zo op deze manier overlast van spam voor personen zoveel op enige wijze beperkt. En ach ja alle beetjes helpen.

Wat wil ik je leren in deze tutorial?

In deze tutorail zal ik uit leggen wat de exacte eisen zijn van die nieuwe antispam voorwaarden en hoe je dat in PHP moet oplossen. En natuurlijk hoe je email bestand op een legale manier verkrijgt…

[color=red]Deze tutorial gaat niet over het verzenden van nieuws brieven! En al helemaal niet over het niet laten herkenen van spam… [/color]
Pagina 2

Wat houden die anti spam voorwaarden vaak in?

Wat is spam?

Spam wordt gedefinieerd als unsolicited bulk e-mail (UBE), oftewel: e-mail die ongevraagd (unsolicited) en in grote hoeveelheden (bulk) wordt verzonden. Ongevraagd betekent dat de ontvanger van de e-mail niet vooraf aantoonbare, expliciete en op elk moment intrekbare toestemming voor de verzending van de mailing heeft verleend. Bulk houdt in dat de e-mail deel uitmaakt van een grotere hoeveelheid e-mails die elk substantieel identiek zijn. Een e-mail is pas spam als aan beide criteria wordt voldaan.

bron: Spamvrij.nl


Opzich duidelijk maar wat gaat ons dit nu aan?

Heel erg simpel als wij een nieuwsbrief versturen versturen wij een email in bulk en wanneer het als de gebruiker als ongewenst is dan valt het meteen onder spam. Is dit op te lossen? Ja…
Pagina 3

Aanmelden voor een maling list.

Het aanmelden op een mailing list kan op meerdere manieren:
  • [li]Opt in[/li]
    [li]Opt in - Opt out[/li]
    [li]Confirmed opt in[/li]



Wat houden deze 3 termen in.

Opt in is zeer simpel. Ik meld me aan voor een mailing list en kan me daarna niet meer afmelden. Dus wanneer persoon X de email van [email protected] op geeft zal persoon y de rest van zijn leven een nieuws brief ontvangen. Dit is uiteraard niet echt handig.

Opt in – Opt out: Werkt eigelijk het zelfde als opt in. Met een klein verschil namelijk de ontvanger kan zich zelf afmelden.

Confirmed opt in:
Dit systeem is een perfecte manier voor nieuws brieven hoe werkt het.

Persoon x meldt zich aan op de website voor een nieuwsbrief. Hij ontvangt even later een email met een activatie link Wanneer hij op die linkt drukt wordt er een pagina gegeven en wordt zijn aanmelding bevestigd en wordt er een ip opgeslagen. Wanneer hij niet bevestigd wordt er geen email naar hem verzonden.

Waarom slaan wij het ip op?
Heel erg simpel wanneer iemand klaagt omdat hij ongewenste email ontvangt van jou en gaat klagen bij je provider ben je vaak verplicht om bewijs te leveren dat hij zich heeft aangemeld. En dat is het beste te bewijzen via een IP adres.


Zoals je kan zien is alleen de confirmed opt in de beste methode om de identiteit van de bezoeker vast te stellen.
Pagina 4

Aan/Af meld script

<?php
//include config file
include('./paste/config.php');//omdat deze script ook bekijk baar is zal hier niet mijn login gegevens plaatsen ;)
//we hebben al een verbinding
//functie voor controleren of email geldig is: (Gehaald uit Formhandler ;))
function IsEmail($value) {
return preg_match("/^[a-z0-9_\.-]+@([a-z0-9]+([\-]+[a-z0-9]+)*\.)+[a-z]{2,7}$/i", $value);
}

$mijndomein = 'http://www.phpclub.nl/';;
$script = 'bevestig.php';
$naam = 'Eris';
$oemail = 'info[at]phpclub.nl';//eigelijk [at] = @
$tabel = 'email_list';
if(IsEmail($_POST['email'])){
if($_POST['do'] == 'aanmelden'){
//stel query op
$sql = 'INSERT INTO '.$tabel.'
SET email = "'.mysql_real_escape_string($_POST['email']).'",
actief = "N",
ip = "'.mysql_real_escape_string($_SERVER['REMOTE_ADDR']).'"';
//voer query uit Veld email is uniek om te voorkomen dat een email vaker dan 1 keer voorkomt
if(mysql_query($sql)){
//het is gelukt
//we stelle een email op en versturen die
//stel link op
$link = $mijndomein.$script.'?email='.$_POST['email'].'&actief=Y';
$bericht = 'Geachte bezoeker
U heeft zich zojuist aan gemeld voor de nieuwsbrief op '.$mijndomein.'. Om u aanmelding van de nieuwsbrief te activeren vragen wij u om op de volgende linkt te druken:
'.$link.'
Heeft u nooit gevraagd voor een nieuwsbrief dan zijn er 2 manieren om te voorkomen dat u geen email ontvangd van ons.
1. Negeer deze email
2. Meld u zelf af via onze website '.$mijndomein.'.
Met vriendelijke groet,
De webmaster.
';
//we gaan nu nog even de juiste headers mee sturen of we maken gebruik van phpmailer oid.
$sHeaders = "From: ".$naam." <".$oemail.">\r\n";//pas je naam aan...
$sHeaders .= "Reply-To:".$naam."<".$oemail.">\r\n";
$sHeaders .= "MIME-Version: 1.0";
//we gaan mailen
if(mail($_POST['email'],'Aanmelding nieuws brief',$bericht,$sHeaders)){
//email verzonden
echo 'We hebben zojuist een email verzonden naar '.$_POST['email'].'. Wij vragen u om de aanmeldig te bevestingen.';
}else{
echo 'Er is tijdens een het verzenden van de email een fout opgetreden. Stuur een email naar '.$oemail.' om de account handmatig te activeren';
}
}else{
//mysql error
//dit kan 2 redenen hebben 1. Ongeldige query of dat de email al in onze db bestaat die gaan we dus eerst af vangen
if(mysql_errno() == 1062){
//email bestaat al
echo 'De door u opgegeven email is al aangemeld voor de nieuwsbrief';
}else{
echo 'Er is een fout opgetreden';
}
}
}else{
$sql = 'DELETE FROM '.$tabel.' WHERE email = "'.mysql_real_escape_string($_POST['email']).'"';
if($row = mysql_query($sql)){
//email is bevestigd.
if(mysql_affected_rows() == 1){
echo 'Uw email is verwijderd van de malinglist. U zult van af nu geen email meer ontvangen van ons';
}else{
echo 'Uw email komt niet voor in de database. U zult daarom geen mail op deze email van ons ontvangen';
}
}else{
echo 'Er is een mysql error op getreden';
}
}
}else{
//geef de formulier weer
echo ' <form name="" method="post" action="">
<table border="0" cellspacing="0" cellpadding="3">
<tr>
<td valign="top">Emailadress</td>
<td valign="top">:</td>
<td valign="top"><input type="text" name="email" id="email" value="" size="20" /> </td>
</tr>
<tr>
<td valign="top"></td>
<td valign="top"></td>
<td valign="top"><input type="radio" name="do" value="aanmelden" id="am"><label for="am">Aanmelden</label> <input type="radio" name="do" value="afmelden" id="af"><label for="af">Afmelden</label></td>
</tr>
<tr>
<td valign="top"></td>

<td valign="top"></td>
<td valign="top"><input type="submit" value="Verzenden" name="button1" id="button1"/> </td>
</tr>
</table>';
}
?>
Pagina 5

Bevestiging systeem

<?php
//bevestig.php
//include config file
include('./paste/config.php');//omdat deze script ook bekijk baar is zal hier niet mijn login gegevens plaatsen ;)
//we hebben al een verbinding
//functie voor controleren of email geldig is: (Gehaald uit Formhandler ;))
function IsEmail($value) {
return preg_match("/^[a-z0-9_\.-]+@([a-z0-9]+([\-]+[a-z0-9]+)*\.)+[a-z]{2,7}$/i", $value);
}
$mijndomein = 'http://www.phpclub.nl/';;
$script = 'bevestig.php';
$naam = 'Eris';
$oemail = 'info[at]phpclub.nl';//eigelijk [at] = @
$tabel = 'email_list';
if(IsEmail($_GET['email'])){
//db update
$sql = 'UPDATE '.$tabel.' SET actief = "Y", ip = "'.mysql_real_escape_string($_SERVER['REMOTE_ADDR']).'" WHERE email = "'.mysql_real_escape_string($_GET['email']).'"';
//voer query uit
if($out = mysql_query($sql)){
if(mysql_affected_rows() == 1){
//email is bevestigd.
echo 'Uw email is bevestigd. U zult nu elke week een nieuwsbrief ontvangen';
}else{
echo 'Uw email komt niet voor in de database';
}
}else{
echo 'Er is een mysql error op getreden';
}
}else{
echo 'Email is niet geldig';
}
?>
Pagina 6

Nu heb ik de emails wat nu?

Je kunt nu een email versturen naar alle gebruikers die hun aanmelding hebben bevestigd. Dit kan via de volgende sql query
SELECT * FROM tabelnaam WHERE actief = "Y"


En zo selecteer je alle emailadress die bevestigd zijn.

Krijg je een klacht binnen van een gebruiker kun je altijd bevestigen wie die email heeft geaccepteerd.

Vergeet niet dat er nu nog een goede / betrouwbare mailing script er aan gekoppeld moet worden!

Reacties

0
Nog geen reacties.