e-mailfunctie
allereerst, Het nieuwe PHPhulp is geweldig,
Fijn dat het terug is, dan kan ik eindelijk weer eens normaal een vraag stellen. =D
Ik heb op mijn website een functie dat ik iedereen kan mailen.
Hierin werken 2 dingen niet:
- %naam% en %llnr% worden niet vervangen door degene aan wie het gemaild word.
- Hij mailt niet.
Alvast bedankt voor je hulp :)
Hier is de code, met een aantal textjes die niet belangrijt zijn ge xxx't :)
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
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
<? session_start();
if($_GET['act'] == "all"){
echo 'Verzenden...';
$dbhost = "xxx";
$dbuser = "xxx";
$dbpass = "xxx";
$dbname = "xxx";
//verbinding
$db = mysql_pconnect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$db);
$result1 = mysql_query("SELECT * FROM leerlingen WHERE activ = 'test'");
$row1 = mysql_fetch_assoc($result1)
$result2 = mysql_query("SELECT * FROM mentoruur");
$row2 = mysql_fetch_assoc($result2);
$mss = $_POST['berricht'];
$rpl = array(
'%naam%' => $row1['naam'],
'%llnr%' => $row1['lln'],
'%mentdat%' => $row2['datum'],
'%mentleerl%' => $row2['leerlingen']
);
$mailmessage1 = strtr($mss,$rpl);
$mailmessage = nl2br($mailmessage1);
$message = '
<html>
<head>
</head>
<body>
'.$mailmessage.'<br>
<br>
Deze mail is verstuurd via <A HREF="www.xxx.nl">MijnH3E</A> door '.$_SESSION['llnaam'].'.
</body>
</html>
';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: '.$row1['naam'].' <'.$row1['lln'].'>' . "\r\n";
$headers .= 'From: xxx <[email protected]>';
mail("$row1['mail']", $_POST['onderwerp'], $mailmessage, $headers);
echo 'Verzonden!';
}
}elseif($_GET['act'] == "select"){
//DEZE FUNCTIE MOET IK NOG MAKEN
}else{
echo 'Er is iets fout gegaan, of er is geen opdracht binnengkomen';
?>
[/CODE]
if($_GET['act'] == "all"){
echo 'Verzenden...';
$dbhost = "xxx";
$dbuser = "xxx";
$dbpass = "xxx";
$dbname = "xxx";
//verbinding
$db = mysql_pconnect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$db);
$result1 = mysql_query("SELECT * FROM leerlingen WHERE activ = 'test'");
$row1 = mysql_fetch_assoc($result1)
$result2 = mysql_query("SELECT * FROM mentoruur");
$row2 = mysql_fetch_assoc($result2);
$mss = $_POST['berricht'];
$rpl = array(
'%naam%' => $row1['naam'],
'%llnr%' => $row1['lln'],
'%mentdat%' => $row2['datum'],
'%mentleerl%' => $row2['leerlingen']
);
$mailmessage1 = strtr($mss,$rpl);
$mailmessage = nl2br($mailmessage1);
$message = '
<html>
<head>
</head>
<body>
'.$mailmessage.'<br>
<br>
Deze mail is verstuurd via <A HREF="www.xxx.nl">MijnH3E</A> door '.$_SESSION['llnaam'].'.
</body>
</html>
';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: '.$row1['naam'].' <'.$row1['lln'].'>' . "\r\n";
$headers .= 'From: xxx <[email protected]>';
mail("$row1['mail']", $_POST['onderwerp'], $mailmessage, $headers);
echo 'Verzonden!';
}
}elseif($_GET['act'] == "select"){
//DEZE FUNCTIE MOET IK NOG MAKEN
}else{
echo 'Er is iets fout gegaan, of er is geen opdracht binnengkomen';
?>
[/CODE]
Gewijzigd op 25/05/2010 17:26:47 door Maestro Roboroads
Je mist wat accolades bij je while loop van regel 14.
Zo dus, als het ware..?
Ofwel moet je in de while loop van regel 14 dus een nieuwe array aanmaken en die gebruiken om $rpl te vormen. Ofwel, en dat is nu zo te zien makkelijker, die hele while loop verwijderen. Nu ik nog eens goed kijk, heb je die helemaal niet nodig...
Zou het zo horen te kunnen, of moet er meer in veranderen.
Ik dacht dat je met while meerdere namen uit de database kon halen,
En volgens mij mailt hij nu alleen 1 iemand, waar 9op het moment) 3 de bedoeling is.
Maar goed, dat is toch een kwestie van uitproberen? Vervang desnoods de mail() eerst eens door een echo waarin je bijvoorbeeld de geaddresseerde en het bericht weergeeft. Dan weet je direct of de goede informatie de mail functie in gaat...
Nu stuit ik op een 2e probleem:
wss door de headers krijg ik dit bovenaan de mail, en word de mail niet met HTML verstuurd.
dit krijg ik bovenaan mn mail. wat ik niet wil:
Quote:
Content-type: text/html; charset=iso-8859-1
To: xxx <xxx>
From: xxx <xxx>
Message-Id: <[email protected]>
Date: Tue, 25 May 2010 19:05:54 +0200 (CEST)
Return-Path: xxx
X-OriginalArrivalTime: 25 May 2010 17:05:57.0205 (UTC) FILETIME=[8ADE1050:01CAFC2C]
To: xxx <xxx>
From: xxx <xxx>
Message-Id: <[email protected]>
Date: Tue, 25 May 2010 19:05:54 +0200 (CEST)
Return-Path: xxx
X-OriginalArrivalTime: 25 May 2010 17:05:57.0205 (UTC) FILETIME=[8ADE1050:01CAFC2C]
Gewijzigd op 25/05/2010 19:15:57 door Maestro Roboroads
email injections hebt.
Let wel effe op dat je Ik heb er een wachtwoord opstaan.
(als ik begrijp zijn dat ongewenste mails, die injections)
Gewijzigd op 25/05/2010 19:53:48 door Maestro Roboroads
Nouw, je stopt gewoon data (weliswaar uit de db, maar toch, gaat om het principe) in de email headers. Die data valideer je niet. Dat betekend dus dat je scriptje misbruikt kan worden om spam te sturen.
is er een manier om ervoor te zorgen dat hij wel gevalideerd word?
Gewijzigd op 25/05/2010 20:03:53 door Maestro Roboroads
swiftmailer te gebruiken. Kan je ook makkelijkere batch sendings doen.
De makkelijkste manier is om bijvoorbeeld of ik begrijp het niet xD
Gewijzigd op 25/05/2010 20:13:34 door Maestro Roboroads
En het scheelt heel veel werk en problemen. En het is nog gratis ook, wat wil je nog meer?
Of je kunt filter_var doen, maar die regex die erachter zit is niet helemaal correct.
Wat wil je dan met die var_dump doen?
die eritante text staat nogsteeds bovenaan,
En het stukkie met "deze mail is verstuurd met <a hhref..." komt er ook niet in..
Gewijzigd op 25/05/2010 20:50:25 door Maestro Roboroads
Leesvoer
Gewijzigd op 25/05/2010 21:13:49 door - SanThe -