contactformulier keuze bestemming

Status
Niet open voor verdere reacties.
Ik zou expliciet $_POST gebruiken i.p.v. $_REQUEST, en controleren of een formulier netjes GEPOST is:

Code:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// hier je afhandeling van je formulier
}

Je clean_string() functie kan je schrappen omdat phpMailer daarvoor alle veiligheden al aan boord heeft.

Verder kan je in HTML met <br> een nieuwe regel starten. Met plain tekst is dit \n
 
Laatst bewerkt:
Ik heb getracht deze aanbevelingen aan te brengen, maar nu gebeurt er iets merkwaardigs, of eigenlijk er gebeurt iets niet: ik krijg netjes de melding dat het bericht verzonden is, maar er komt geen bericht binnen.

PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_REQUEST['naam'] ;
$email = $_REQUEST['email'] ;
$bericht = $_REQUEST['bericht'] ;
$aan = $_REQUEST['aan'] ;

require("../phpmailer/PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = "webmaster@domein.nl";
$mail->FromName = "webmaster domein";

if ($aan == "g") {
	$aanmail = "secretaris@domein.nl";
    $mail->AddAddress($aanmail, "secretaris domein");
}
if ($aan == "ge") {
	$aanmail = "webmaster@domein.nl";
    $mail->AddAddress($aanmail, "webmaster domein");
}

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->setFrom($result["email"], $result["naam"]);

$email_message = "Details van het ingestuurde bericht.<br><br>";
$email_message .= "Aan: ".$aan."<br>";
$email_message .= "Van: ".$naam."<br>";
$email_message .= "Email: ".$email."<br>";
$email_message .= "Bericht: ".$bericht."<br>";


$mail->Subject = "Reactie vanaf de website";

$mail->Body    = $email_message;
$mail->AltBody = $email_message;

if(!$mail->Send())
{
   echo "Bericht kan niet verzonden worden. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Bericht is verzonden.";
}
?>

Wat doe ik nu fout?

Vriendelijke groet,
Guido
 
Lijn 40 kan je aanpassen in een if-else waar je kijkt of het wel of niet gelukt is. Let op dat een ! een 'false' afdwingt.

Zorg ervoor dat je in je formulier ook POST als method gebruikt.
 
Lijn 40 kan je aanpassen in een if-else waar je kijkt of het wel of niet gelukt is. Let op dat een ! een 'false' afdwingt.

Dat is gelukt. Door de veelheid aan testmail vermoed ik dat ik een ontvangen testmail over het hoofd heb gezien. Nogmaals geprobeerd (maar toen had ik ook al het e.e.a. in het script veranderd) en toen lukte het wel.

Zorg ervoor dat je in je formulier ook POST als method gebruikt.

Misschien begrijp ik het verkeerd, maar dat heb ik toch gedaan? Zie mijn HTML-bestand op http://www.helpmij.nl/forum/showthr...e-bestemming?p=5951399&viewfull=1#post5951399.

Ik heb het php-script daarna nog verder uitgebreid. Na het verzenden van het contactformulier aan de gekozen geadresseerde, krijgt de verzender ook een mail met een soort van bevestiging.
Ik meende dat ik met
Code:
$mail = new PHPMailer();
een soort van nieuwe sessie zou starten, maar het ligt wellicht toch iets gecompliceerder.
Hoe componeer ik nu een mail aan de afzender? De bevestiging wordt nu ook bij de geadresseerde bezorgd i.p.v. bij de afzender.
Dit is mijn nieuwe samengestelde script:
PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_REQUEST['naam'] ;
$email = $_REQUEST['email'] ;
$bericht = $_REQUEST['bericht'] ;
$aan = $_REQUEST['aan'] ;

require("../phpmailer/PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = "webmaster@domein.nl";
$mail->FromName = "webmaster domein.nl";

if ($aan == "g") {
  $aanmail = "secretaris@domein.nl";
  $mail->AddAddress($aanmail, "secretaris domein.nl");
}
if ($aan == "ge") {
  $aanmail = "webmaster@domein.nl";
  $mail->AddAddress($aanmail, "webmaster domein.nl");
}

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->setFrom($result["email"], $result["naam"]);

$email_message = "Details van het ingestuurde bericht.<br><br>";
$email_message .= "Aan: ".$aan."<br>";
$email_message .= "Van: ".$naam."<br>";
$email_message .= "Email: ".$email."<br>";
$email_message .= "Bericht: ".$bericht."<br>";

$mail->Subject = "Reactie vanaf de website";

$mail->Body    = $email_message;
$mail->AltBody = $email_message;


if(!$mail->send()) 
{
    echo "Bericht kan niet verzonden worden. <p>";
    echo "Mailer Error: " . $mail->ErrorInfo;
} 
else 
{
    echo "Bericht is verzonden. Wij nemen zo spoedig mogelijk contact met u op.";
}

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = "webmaster@domein.nl";
$mail->FromName = "Domein.nl";

if ($aan == "g") {
  $mail->AddAddress($aanmail, "Secretaris");
}
if ($aan == "ge") {
  $mail->AddAddress($aanmail, "Webmaster");
}

$aanmail = $naam;

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->setFrom("Domein.nl", "webmaster@domein.nl");

$email_message = "Via het contactformulier op de website van de Raad van Kerken Leusden heeft u zojuist een bericht verstuurd.<br><br>";
$email_message .= "Aan: ".$aanmail."<br>";
$email_message .= "Bericht: ".$bericht."<br>";

$mail->Subject = "Verzonden bericht via website";

$mail->Body    = $email_message;
$mail->AltBody = $email_message;

if(!$mail->send()) 
{
    echo "Bericht kan niet verzonden worden. <p>";
    echo "Mailer Error: " . $mail->ErrorInfo;
} 
else 
{
    echo "Bericht is verzonden. Wij nemen zo spoedig mogelijk contact met u op.";
}


}
?>
 
Laatst bewerkt:
Waarom ga je twee keer een phpMailer uitvoeren? Je kan de bevestiging toch ook via CC meesturen?
Een stuk makkelijker.

Die REQUEST's kan je aanpassen in POST.

Maar werkt het verder?
 
Laatst bewerkt:
Een vraagsteller stuurt een bericht via de website. Hij (zij) geeft naam en e-mailadres op. De ontvanger (in mijn voorbeeld secretaris of webmaster) ontvangt naam, e-mailadres en bericht. Maar de vraagsteller mag wel het berichtje en de naam zien, maar niet het e-mailadres. Daarom koos ik voor een nieuwe "sessie".

Voor de rest werkt het prima. Het huidige script stuurt dus twee e-mails naar de geadresseerde, terwijl de tweede mail verzonden moet worden naar de vraagsteller.
 
Dan voldoet een CC ook prima. :)

Anders is het nog toffer om dit in een functie te bouwen, of nog mooier, een extend op de PHPmailer classe.
Dubbele code die hetzelfde doet moet je altijd vermijden.
 
Ik wil graag een opmerking vooraf maken: Ik heb de code een klein beetje herschreven om het anonimiseren (t.b.v. dit forum) te vergemakkelijken.

Ik vraag me af waarom ik nu deze foutmelding krijg:
Code:
Mailer Error: SMTP Error: The following recipients failed: guido@website.nl: authentication required

De php-code ziet er nu als volgt uit:

PHP:
<?php
$afzendermailnaam  = "Mijn testorganisatie";
$afzendermailadres = "webmaster@domein.nl";
$keuzecode1        = "g";
$keuzenaam1        = "secretaris";
$keuzeadres1       = "secretaris@domein.nl";
$keuzecode2        = "ge";
$keuzenaam2        = "webmaster";
$keuzeadres2       = "webmaster@domein.nl";
//$keuzecode3        = "";
//$keuzenaam3        = "";
//$keuzeadres3       = "";

if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'] ;
$email = $_POST['email'] ;
$bericht = $_POST['bericht'] ;
$aan = $_POST['aan'] ;

require("../phpmailer/PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = $afzendermailadres;
$mail->FromName = $afzendermailnaam;
$mail->AddCC($email, $naam);

if ($aan == $keuzecode1) {
  $mail->AddCC($keuzeadres1, $keuzenaam1);
}
if ($aan == $keuzecode2) {
  $mail->AddCC($keuzeadres2, $keuzenaam2);
}

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->setFrom($result["email"], $result["naam"]);

$email_message = "Details van het ingestuurde bericht.<br><br>";
$email_message .= "Aan: ".$aan."<br>";
$email_message .= "Van: ".$naam."<br>";
$email_message .= "Email: ".$email."<br>";
$email_message .= "Bericht: ".$bericht."<br>";

$mail->Subject = "Reactie vanaf de website";

$mail->Body    = $email_message;
$mail->AltBody = $email_message;

if(!$mail->send()) 
{
    echo "Bericht kan niet verzonden worden. <p>";
    echo "Mailer Error: " . $mail->ErrorInfo;
} 
else 
{
    echo "Bericht is verzonden. Wij nemen zo spoedig mogelijk contact met u op.";
}

}
?>

Vriendelijke groet,
Guido
 
Je SMTP-server waarmee je connect wil weten wie je bent ;)
Als je even verdiept in de werking van SMTP, dan wordt het wel duidelijk.

Tevens zie ik niet waar je met je SMTP-server verbindt? Als je de boel fingeert/anonimiseert, gebruik dan dummy-hostnames ofzo (example.org) en ga geen dingen wegknippen.
 
Laatst bewerkt:
Je SMTP-server waarmee je connect wil weten wie je bent ;)

Ik miste ook opeens die regels. Maar na deze weer toegevoegd te hebben, werkte het nog niet.

sendmailpreset.php
PHP:
<?php
$mail = new PHPMailer;

$mail->isSMTP();
$mail->Host = 'mail.axc.nl';
$mail->SMTPAuth = true;
$mail->Username = 'guido@domein.nl';
$mail->Password = 'geheim';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
?>

en na regel 20 heb ik ingevoegd:
require("./sendmailpreset.php");

Echter, dit geeft nog steeds dezelfde foutmelding.
 
Ga ook even na op welke manier de mailserver van Versio/AXC je authenticatie regelt, en of de poort klopt etc.
Soms wil het wel eens anders zijn dan standaard.
 
Ga ook even na op welke manier de mailserver van Versio/AXC je authenticatie regelt, en of de poort klopt etc.
Soms wil het wel eens anders zijn dan standaard.

Volgens mij hebben ze het bij Versio toch weer over de standaard mail-functie...

De mailcommunicatie met Versio:
Guido:
Ik probeer een PHP-scriptje te schrijven voor het versturen van een mail via PHPMailer.
Het struikelblok voor nu is de mailauthenticatie. Zijn daaraan voor Versio nog instellingen anders.
Mijn huidige script ziet er nu (gedeeltelijk) zo uit:

<?php
$mail = new PHPMailer;

$mail->isSMTP();
$mail->Host = 'mail.axc.nl';
$mail->SMTPAuth = true;
$mail->Username = 'guido@domein.nl';
$mail->Password = 'geheim';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
?>

Versio:
Hartelijk bedankt voor uw bericht.
U dient dan aan het script toe te voegen:
'auth' => true,
'username' => $username,
'password' => $password));

Voorbeeldscript:
require_once "Mail.php";
$username = 'guido@domein.nl';
$password = 'password';
$smtpHost = 'mail.axc.nl';
$smtpPort = '587';
$to = 'mail@to.com';
$from = 'user@mail.com';

$subject = 'Contact Form';
$successMessage = 'Message successfully sent!';


$replyTo = '';
$name = '';
$body = '';


$headers = array(
'From' => $name . " <" . $from . ">",
'To' => $to,
'Subject' => $subject
);
$smtp = Mail::factory('smtp', array(
'host' => $smtpHost,
'port' => $smtpPort,
'auth' => true,
'username' => $username,
'password' => $password
));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
echo($mail->getMessage());
} else {
echo($successMessage);
}

Guido:
Ik betwijfel of hier misschien sprake is van communicatiemisverstand.
Is deze oplossing van toepassing voor PHPMailer (https://github.com/PHPMailer/PHPMailer)?

Versio:
Ja, deze oplossing is daar van toepassing:
https://www.versio.nl/artikelen/372-hoe-verstuur-ik-mail-via-de-php-functie-mail
 
Of geen $mail->isSMTP(); gebruiken zodat je automatisch in phpMailer met mail() mailt.

Net wat je wilt.
 
Laatst bewerkt:
bekijk eens volgende sample (bekijk vooral debug ... test ...)
http://phpmailer.worxware.com/index.php?pg=exampleasmtp


ik heb ook een klein mogelijkheid met nog hier en daar wat aanpassingen nodig.
gewoon om te laten zien dat je er ook een object van kan maken(niet gebruiken wel bekijken).
PHP:
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    require("../phpmailer/PHPMailerAutoload.php");
    class KindVanPHPMailer extends PHPMailer{
        private $ontvanger = 'webmaster';
        private $mijndomein = 'domein.nl';
        private $aanmail;
        public function start($aan,$vannaam,$vanemail,$bericht){
            $this->IsSMTP();
            $this->ontvanger($aan);
            $this->WordWrap = 50;
            $this->IsHTML(true);
            $this->setFrom($vanemail,$vannaam);
            $this->bericht($vannaam,$vanemail,$bericht);
        }
        private function ontvanger($aan){
            if ($aan == "g") {          $this->ontvanger ="secretaris";        }
            if ($aan == "ge") {         $this->ontvanger = "webmaster";        }
            $this->aanmail = $this->ontvanger.'@'.$this->mijndomein;
            $this->AddAddress($this->aanmail, 'secretaris '.$this->mijndomein);
        }
        private function bericht($vanemail,$vannaam,$bericht){
            $email_message = "Details van het ingestuurde bericht.<br><br>";
            $email_message .= "Aan: ".$this->aanmail."<br>";
            $email_message .= "Van: ".$vannaam."<br>";
            $email_message .= "Email: ".$vanemail."<br>";
            $email_message .= "Bericht: ".$bericht."<br>";
            $this->Subject = "Reactie vanaf de website";
            $this->Body    = $email_message;
            $this->AltBody = $email_message;
        }
    }
    $mail = new KindVanPHPMailer();
    $mail->start($_REQUEST['aan'],$_REQUEST['naam'],$_REQUEST['email'],$_REQUEST['bericht']);
    if(!$mail->send()){
        echo "Bericht kan niet verzonden worden. <p>";
        echo "Mailer Error: " . $mail->ErrorInfo;
    }else{
        echo "Bericht is verzonden. Wij nemen zo spoedig mogelijk contact met u op.";
    }
}
 
Ik hoop dat hij het snapt....
 
En, is het nog gelukt?
 
En, is het nog gelukt?

Dankjewel voor je interesse. Het projectje ligt even stil. Ik dacht het nodig te hebben voor een website, maar ga vooralsnog een CMS gebruiken (WordPress ofzo). PHP is interessant om te leren, maar voor mijn doel niet echt prettig.
Bedankt voor je hulp tot zover.

Vriendelijke groet,
Guido
 
Wordpress kan ik zeker aanraden. Ik gebruik het ook voor een aantal snel opgezette sites met voornamelijk informatieve content.
 
Dankjewel voor je interesse. Het projectje ligt even stil. Ik dacht het nodig te hebben voor een website, maar ga vooralsnog een CMS gebruiken (WordPress ofzo). PHP is interessant om te leren, maar voor mijn doel niet echt prettig.
Bedankt voor je hulp tot zover.

Vriendelijke groet,
Guido

Wordpress of wp word als minst veilig gezien bescherm je wpadmin dir met htaccess wachtwoord . zodat men niet zomaar kan binnenwandelen . vervolgens doe je er best aan om het zoveel mogelijk te verbergen dat het wp is zodat er geen pogingen tot inbraak komen . (alles in een sub path plaatsen is ook een tijdelijke oplossing ) men zal trachten het path wpadmin te vinden (ik heb geen wp maar er werd de af gelopen tijd al meer dan 100 poging ondernomen om de paden te vinden naast de vele injecties. deze laatste mag je elke drie maand wel verwachten)
 
Laatst bewerkt:
Ik denk dat het beveiligen met .htaccess niet een opperbest idee is. Er worden ook in de 'frontend' waar de gebruiker naar kijkt, volgens mij delen uit de admin-dir gebruikt.
Zoek gewoon naar de 'iThemes Security' addon, en stel deze goed in, en je bent reuze veilig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan