From/Reply field probleem
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
Gewijzigd op 24/09/2018 10:58:15 door Arno Veers
Je kan ook phpMailer gebruiken.
Daarbuiten, je vergeet de "\r\n" achter de headers.
Bedankt, gr. Arno
Toevoeging op 24/09/2018 11:27:18:
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";
Gewijzigd op 24/09/2018 11:28:49 door Arno Veers
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.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$naam = 'Testnaam';
$email = '[email protected]';
$headers = 'From: xxxxx.be <[email protected]>' . PHP_EOL;
$headers .= 'Reply-To: ' . $naam . ' <' . $email . '>' . PHP_EOL;
?>
$naam = 'Testnaam';
$email = '[email protected]';
$headers = 'From: xxxxx.be <[email protected]>' . PHP_EOL;
$headers .= 'Reply-To: ' . $naam . ' <' . $email . '>' . PHP_EOL;
?>
Gewijzigd op 24/09/2018 11:32:13 door Frank Nietbelangrijk
From: "[email protected]:test"@test.nl
Toevoeging op 24/09/2018 11:36:53:
Dit is het hele script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?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);
?>
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);
?>
Toevoeging op 24/09/2018 11:47:28:
"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...
Gewijzigd op 24/09/2018 12:45:24 door Arno Veers
Gebruik filter_var() om een mailadres te controleren. Nu stel jezelf de reguliere expressie op, en sluit je [email protected] al uit.
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";
Gewijzigd op 24/09/2018 13:09:24 door Ben van Velzen
$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
Gewijzigd op 24/09/2018 13:29:08 door Arno Veers
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
BVD,
Gr. Arno
Als je nou even rustig op de gegeven link kijkt zie je hoe het moet. :-)
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
Code (php)
1
2
3
4
2
3
4
<?php
$headers = "From: [email protected]". "\r\n";
$headers .= "Reply-To: $email_from". "\r\n";
?>
$headers = "From: [email protected]". "\r\n";
$headers .= "Reply-To: $email_from". "\r\n";
?>
Dit komt dus uit het script waarnaar ik linkte. Als je die nogmaals bekijkt, dan zou je een stabiel script moeten hebben die in 99% van de gevallen moet werken.
Frank Nietbelangrijk op 24/09/2018 11:27:34:
dit kun je ook oplossen met PHP_EOL.
Maar dat is platform-afhankelijk, en heeft betrekking op PHP, en niet op het proces dat e-mail verzorgt. En deze kunnen dus ook van elkaar verschillen, het lijkt mij dan ook onverstandig om die op deze manier aan elkaar te koppelen...
If anything, maak hier een aparte constante van, zodat deze apart (en op één plaats) aangepast kan worden.
Maar dan heb je wel PHP 7.2 nodig.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$to = '[email protected]';
$subject = 'the subject';
$message = 'hello';
$headers = array(
'From' => '[email protected]',
'Reply-To' => '[email protected]',
'X-Mailer' => 'PHP/' . phpversion()
);
mail($to, $subject, $message, $headers);
?>
$to = '[email protected]';
$subject = 'the subject';
$message = 'hello';
$headers = array(
'From' => '[email protected]',
'Reply-To' => '[email protected]',
'X-Mailer' => 'PHP/' . phpversion()
);
mail($to, $subject, $message, $headers);
?>
Het voordeel is dat PHP zelf bepaalt wat de juiste manier is om deze CRLF te gebruiken.
Gewijzigd op 24/09/2018 14:34:44 door - Ariën -
Maar er is wel iets aan de hand, ik zie bij de ene webhost in het Naam/van veld in Gmail het emailadres wat is ingevuld in het formulier, maar via andere webhost zie ik in gmail het gedeelte vóór de apestaart, dus in dit geval info, in het van/from veld? Hoe krijg ik daar de naam of het email uit het formulier?
Dit heb ik geprobeerd maar werkte niet:
//$headers .= 'Reply-To: ' . $naam . ' <' . $email_from . '>' . "\r\n";
dit is wat ik nu heb:
$email_to = "[email protected]";
$email_subject = "Emailformulier via actamasa.be";
$headers = "From: [email protected]". "\r\n";
$headers .= "Reply-To: $email_from". "\r\n";
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
IIG heel erg bedankt voor de hulp!
Ik raad aan om in zowel From als Reply-to de vissenhaakjes ( < en > ) te gebruiken, waarmee je onderscheid maakt in je naam en mailadres.
Bedankt, tussen de quotes? Hoe precies?