Goedemorgen,

Heb een simpel PHP mailscript aangepast IVM het "from" field wat vaak moet verwijzen naar een [email protected], IPV het emailadres wat is ingevuld door de verzender, IVM spammisbruik. Mijn script werkt bij de ene webhost maar niet bij de andere.

Dit stukje code werkt bijna goed, maar als ik dan reply in GMAIL staat mijn eigen adres in het reply field:

$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .

Dat heb ik daarom vervangen voor dit en dat werkt bij de ene maar niet bij de andere webhost, daar klopt de output niet:

$headers = "From: [email protected]";
$headers .= "Reply-To: $email_from";


Hier gaat het fout, uit de header:


From: "[email protected]:test"@test.nl

Dus daar wordt from en reply niet gescheiden, denk dat het iets heeft te maken met de opmaak, de quotes, en die puntjes maar ik weet het niet. Probleem is dat ik bij de host waar het niet werkt niet veel kan testen, de server blokkeert mijn mail als er iets niet klopt bij het from field.

Iemand een tip?

BVD!

Gr. Arno
Je kan ook phpMailer gebruiken.
Daarbuiten, je vergeet de "\r\n" achter de headers.
Dat heb ik geprobeerd maar vond het groot (12 mappen, 105 bestanden), gebruik nu een scriptje van 30 regels, het is maar voor een simpel emailformulier voor de show (naam, telefoon, email, bericht).

Bedankt, gr. Arno

[size=xsmall]Toevoeging op 24/09/2018 11:27:18:[/size]

Ben van Velzen op 24/09/2018 11:23:00

Daarbuiten, je vergeet de "\r\n" achter de headers.


Ok waar zou ik die moeten plaatsen (ben geen pro) zoiets, tussen quotes en ;

$headers = "From: [email protected]"\r\n";

Gebruik bij voorkeur ook een zender naam. en je vergeet de \r\n. dit kun je ook oplossen met PHP_EOL.
Verder lijkt er inderdaad iets fout te aan met een quote te zien aan To:test"@test.nl maar ik zie in je bericht (denk ik) niet je exacte PHP code zoals je het nu gebruikt.

<?php
$naam = 'Testnaam';
$email = '[email protected]';
$headers = 'From: xxxxx.be <[email protected]>' . PHP_EOL;
$headers .= 'Reply-To: ' . $naam . ' <' . $email . '>' . PHP_EOL;
?>
Is dat misschien waarom de ouptput mislukte?

From: "[email protected]:test"@test.nl

[size=xsmall]Toevoeging op 24/09/2018 11:36:53:[/size]

Dit is het hele script:


<?php

if(isset($_POST['email'])) {

$email_to = "[email protected]";
$email_subject = "TESTformulier";

function died($error) {

include 'headertest.inc';

echo "<b style=\"font-size: 25px;color: red\">Formulier niet verzonden</b><br /><br /><br />";

echo $error."<br /><br />";

echo "<a href=javascript:history.back() class=two>Klik hier om terug te gaan naar het formulier<br /><br />";

include 'footertest.inc';

die();

}

if(//!isset($_POST['naam']) ||

!isset($_POST['email'])) {

died('U heeft niet alle velden ingevuld.');

}

$naam = $_POST['naam']; // required
$bedrijfsnaam = $_POST['bedrijfsnaam']; // required
$adres = $_POST['adres']; // required
$postcode = $_POST['postcode']; // required
$plaats = $_POST['plaats']; // required
$email_from = $_POST['email']; // required
$telefoon = $_POST['telefoon']; // not required
$bericht = $_POST['bericht']; // required
$error_message = "";

$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';

if(!preg_match($email_exp,$email_from)) {

$error_message .= '<b>Emailadres ongeldig...</b><br />';

}

if(strlen($error_message) > 0) {

died($error_message);

}

$email_message = "Hieronder ziet u de inhoud van een ingezonden formulier.\n\n";

function clean_string($string) {

$bad = array("content-type","bcc:","to:","cc:","href");

return str_replace($bad,"",$string);

}

$email_message .= "Naam: ".clean_string($naam)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telefoon: ".clean_string($telefoon)."\n";
$email_message .= "Bericht: ".clean_string($bericht)."\n";


// create email headers

//volgende werkt bij de ene webhost wel maar bij de andere mislukt de output

$headers = "From: [email protected]";
$headers .= "Reply-To: $email_from";

//volgende werkt maar in gmail klopt reply field niet

//$headers = 'From: '.$email_from."\r\n".
//'Reply-To: '.$email_from."\r\n" .

'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
?>


<?php include 'headertest.inc'; ?>

[size=xsmall]Toevoeging op 24/09/2018 11:47:28:[/size]

"Daarbuiten, je vergeet de "\r\n" achter de headers."

Zou dat ongeveer zo moeten tussen quotes en ;

$headers = "From: [email protected]"\r\n";

want ik denk dat t probleem daar ontstaat maar weet niet waar exact...
Over je controle op een mailadres:

Gebruik filter_var() om een mailadres te controleren. Nu stel jezelf de reguliere expressie op, en sluit je [email protected] al uit.
Dat snap ik niet, heb wel enige kennis maar niet zo veel.

Hier moet ik ergens iets toevoegen ala "\r\n" meen ik maar waar? Want de output hiervan klopt niet

$headers = "From: [email protected]";
$headers .= "Reply-To: $email_from";
Frank, RFC2822 zegt specifiek dat \r\n gebruikt moet worden voor e-mail headers. PHP_EOL mag dus NIET gebruikt worden voor e-mailheaders.
Ok bedankt ik ga het uitzoeken echt, maar moet vandaag een website online zetten, kan iemand me zeggen waar in de volgende regels ik /r/n/ whatever moet toevoegen:

$headers = "From: [email protected]";
$headers .= "Reply-To: $email_from";

de output is nu verkeerd: From: "[email protected]:test"@test.nl

test"@test.nl = wat is ingevuld in het formulier maar dan als [email protected] zonder die dubbele quotes

Hoewel slechts bij bepaalde webhosters,

IIG ontzettend bedankt,

Gr. Arno

Reageren