Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

contactformulier en PHPmailer, instellingen voor Gmail en Live

bewerkt za 14 dec 2013 in Tutorials (Develop) Posts: 879
---Gegevens uit contactformulier versturen met behulp van PHPmailer---

Woord vooraf:
Voor het verzenden van gegevens vanuit een contactformulier op je website heb je een mailserver nodig. Als je een website onderbrengt bij een host krijg je bijna altijd toegang tot hun mailserver.
Je kunt dan via de reguliere weg emails verzenden door middel van het contactformulier.
In php is daar een fuctie voor, de mailfunctie ???mail();???.
Maar wat nu als je je eigen webserver draait op je lokale computer thuis en je hebt geen mailserver ter beschikking?

We zullen dan zelf een mailserver moeten uitkiezen waar we toegang tot krijgen. Of, je kunt natuurlijk ook een mailserver installeren op jouw computer.
Er even vanuit gaande dat het laatste niet het geval is zullen we een mailserver moeten kiezen waarvan we weten dat we er toegang tot kunnen krijgen.
Aangezien iedereen met een internetverbinding een ISP heeft, zal ook eenieder gebruik kunnen maken van de mailserver van je internet service provider.
We moeten nu 2 dingen te weten komen:
-wat is de naam van de uitgaande (smtp) server
-verleent die server ons toegang op basis van IP adres of vereist ie authenticatie. (username en password).
Beiden kun je achterhalen door op de website van je ISP te zoeken naar de naam van de smtp server en of ie authenticatie vereist.

Ik zal me nu beperken tot 2 alombekende webmailservers: Gmail en Live
Beiden vereisen authenticatie natuurlijk. Anders zou iedereen van hun mailserver gebruik kunnen maken. Als je bij een van deze twee een webaccount hebt, kun je gebruik maken van hun mailserver.

Aan de hand van PHPmailer zullen we nu de instellingen in je contactform suk voor stuk doornemen.

Wat is PHPmailer?
PHPmailer is een in PHP geschreven verzameling van bestanden die geavanceerde mailverzendingen mogelijk maakt. Denk hierbij aan een bijlage toevoegen aan je contactform, een tekstgedeelte die verzonden wordt en in elke emailcli??nt perfect weergegeven moet worden, het verzenden van een inline image e.d. Deze uitgebreidere mogelijkheden zijn bij het gebruik van PHP mailer eenvoudig in te stellen maar vergt behoorlijk wat aanpassingen als je het met de reguliere mail(); functie doet.
Ook als een server authenticatie vereist is dit eenvoudig met PHP mailer in te stellen.

Een bijkomend voordeel is als we zelf een webserver draaien thuis je geen aanpassingen hoeft te maken in je php.ini bestand.

Werkwijze gebruik PHPmailer:
Allereerst zullen we de PHPmailer bestanden moeten downloaden.
Download link: https://github.com/Synchro/PHPMailer
Aande re kant beneden kun je de .zip downloaden waarin alle bestanden staan.
Eenmaal uitgepakt hernoem de map ???PHPMailer-master??? voor het gemak ???phpmailer???.
In deze map zitten alle benodigde bestanden. Upload deze map naar je webserver. Het makkelijkste is als je hem gewoon in de root zet.
Het enige wat we nu nog moeten doen is het belangrijkste bestand, genaamd ???class.phpmailer.php??? aanroepen in ons contactformulier. Afhankelijk waar jouw contactformulier staat, zul je dus het pad moeten aangeven naar dit bestand.

Hieronder een eenvoudig contactformulier waarbij we de mailserver van Gmail gebruiken:

<?php

// functie spamcheck
function spamcheck($field)
{
//filter_var() sanitizes de email
$field=filter_var($field, FILTER_SANITIZE_EMAIL);

//filter_var() valideert de email
if(filter_var($field, FILTER_VALIDATE_EMAIL))
{
return true;
}
else
{
return false;
}
}

if($_SERVER['REQUEST_METHOD'] == 'POST')
{


// PHP mailer settings instellen voor GMAIL
require_once ('../phpmailer/class.phpmailer.php'); // het pad vanaf dit fomulier naar "class.phpmailer.php"

$mail = new PHPMailer(true);

$mail->CharSet = 'utf-8'; //character set utf-8

$mail->IsSMTP(); // smtp protocol gebruiken voor de email te verzenden

$mail->Host = "smtp.gmail.com"; // smtp servernaam van gmail

$mail->Port = "465"; // smtp poort voor gmail

$mail->SMTPSecure = "ssl"; //gmail authenticeert door ssl ( andere optie is tls )

$mail->SMTPAuth = true;

// account gegevens voor authenticatie Gmailserver
$mail->Username = "jouw@gmail.com";

$mail->Password = "jouwpassword";


$mail->From = $_POST['email'];

$mail->FromName = $_POST['naam'];

$mail->AddAddress("jouw@email.com", "Jouw Naam"); // emailadres ontvanger en de naam die in email verschijnt

$mail->Subject = "Contactformulier";

// variabelen voor de body en body email opmaken
$naam = $_POST['naam'];
$achternaam = $_POST['achternaam'];
$email = $_POST['email'];
$bericht = $_POST['bericht'];

// body opmaken
$body = "";
$body .= "Naam: ";
$body .= $naam;
$body .= "<br />";
$body .= "Achternaam: ";
$body .= $achternaam;
$body .= "<br />";
$body .= "Email: ";
$body .= $email;
$body .= "<br />";
$body .= "Bericht: ";
$body .= $bericht;
$body .= "<br />";


$mail->WordWrap = 80;

$mail->MsgHTML($body, dirname(__FILE__), true); // genereren van bodybericht



// check of submitter een robot is en of er geldige input is geleverd
$mailcheck = spamcheck($_POST['email']);

if($_POST['robot'] != "test_spambot") {
die();
}
//check of email geldig is
elseif ($mailcheck == false) {
echo "Ongeldige input van emailadres";
}
else {

// email verzenden
$formsent = $mail->Send();

// echo's als verzenden goed of fout is gegaan
if ($formsent){
echo 'Uw bericht is successvol verstuurd!';
}
else{
echo 'Sorry, maar er is iets misgegaan met het versturen van het formulier; probeer het later nog eens.';
}
}

} // eind request method
?>

<form action="" method="post" name="" id="">
<input type="hidden" name="robot" value="test_spambot" /><br />
Naam: <br />
<input type="text" name="naam" /><br />
Achternaam: <br />
<input type="text" name="achternaam" /><br />
Email: <br />
<input type="text" name="email" /><br />
Bericht: <br />
<textarea name="bericht" /></textarea>
<br /><br />
<input type="reset" value="Reset" />
<input type="submit" value="Verzenden" />
</form>

Voor het gebruik van de mailserver van Live zien de instellingen er als volgt uit:

<?php
// PHP mailer settings instellen voor LIVE
require_once ('../phpmailer/class.phpmailer.php'); // het pad vanaf dit fomulier naar "class.phpmailer.php"

$mail = new PHPMailer(true);

$mail->CharSet = 'utf-8'; //character set utf-8

//$mail->IsSMTP(); // deze regel uitschakelen als je Live mailserver gebruikt

$mail->Host = "smtp.live.com"; // smtp servernaam van gmail

$mail->Port = "25"; // smtp poort voor connectie op Live mailserver

$mail->SMTPSecure = "tls"; //live authenticeert door tls ( andere optie is ssl )

$mail->SMTPAuth = true;

// account gegevens voor authenticatie Gmailserver
$mail->Username = "jouw@live.com";

$mail->Password = "jouwpassword";


$mail->From = $_POST['email'];

$mail->FromName = $_POST['naam'];

$mail->AddAddress("jouw@live.com", "Jouw Naam"); // emailadres ontvanger en de naam die in email verschijnt

$mail->Subject = "Contactformulier";

// variabelen voor de body en body email opmaken
$naam = $_POST['naam'];
$achternaam = $_POST['achternaam'];
$email = $_POST['email'];
$bericht = $_POST['bericht'];

// body opmaken
$body = "";
$body .= "Naam: ";
$body .= $naam;
$body .= "<br />";
$body .= "Achternaam: ";
$body .= $achternaam;
$body .= "<br />";
$body .= "Email: ";
$body .= $email;
$body .= "<br />";
$body .= "Bericht: ";
$body .= $bericht;
$body .= "<br />";


$mail->WordWrap = 80;

$mail->MsgHTML($body, dirname(__FILE__), true); // genereren van bodybericht
?>
Getagd:
Login of Registreer om te reageren.