PHP script draait niet.
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
87
88
89
90
91
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
87
88
89
90
91
<?php
//mail formulier voor bijlage
$email ='******';
//geneer boundary
DEFINE('bound',md5(uniqid(time())));
//check request method
if($_SERVER['REQUEST_METHOD'] == 'POST')
if($from == "" || $email == "" || $subject == "" || $file == "" || $bericht == "")
{
echo "<center><small><font face=\"Arial\">Gelieve alle velden correct in te vullen.<br><a href=\"javascript:history.back(-1)\">Probeer het opnieuw</a></font></small></center>";
}
elseif(!eregi("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+", $email))
{
echo "<center><small><font face=\"Arial\">Gelieve een geldig e-mailadres in te vullen.<br><a href=\"javascript:history.back(-1)\">Probeer het opnieuw</a></font></small></center>";
}
else
{
//if file upload send with email as mixed
if(!empty($_FILES['file']['name']))
{
//check filesize
if($_FILES['file']['size'] < 1024*1024)
{
$headers = "From: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "Reply-To: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
//email bestaat uit meerdere bestanden dus vertel wat de scheidings teken is en dat het een multipart is
$headers .= "Content-Type: multipart/mixed; boundary=\"".bound."\"\r\n";
//we zenden een attachment mee
$headers .= "Content-Disposition: attachment\r\n";
//readfile
$fp = fopen($_FILES['file']['tmp_name'],'r');
$bestand = fread($fp,$_FILES['file']['size']);
fclose($fp);
//create body
//generenen een body. Dit is een multi part gezeik
$body.= "This is a multi-part message in MIME format.\r\n";
$body.= "\r\n";
//boundary
$body.= "--".bound."\r\n";
//content type + charater set (iso in dit geval)
$body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
//codering (7 bit)
$body.= "Content-Transfer-Encoding: 7bit\r\n";
$body.= "\r\n";
//het bericht
$body.= $_POST['bericht'] ."\r\n";
//boundary
$body.= "--".bound."\r\n";
//content type + naam bestand (database.sql)
$body .= "Content-Type: application/octet-stream; name=".$_FILES['file']['name']."\r\n";
//codering
$body .= "Content-Transfer-Encoding: base64\r\n";
//als bijlage toegevoegd
$body.= "Content-disposition: attachment\r\n";
$body .= "\n";
//de inhoud van het bestand
$body .= chunk_split(base64_encode($bestand )) . "\r\n";
mail($email,$_POST['subject'],$body,$headers);
echo 'Email (Met een bijlage) is verzonden';
}
else
{
echo 'Bestands groote is te groot';
}
}
else
{
$headers = "From: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "Reply-To: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$bericht = $_POST['bericht'];
mail($email,$_POST['subject'],$bericht,$headers);
echo 'Email (Zonder een bijlage) is verzonden';
}
}
else
{
//mail formulier je moet zelf het fomullier maken
echo "<form action=\"" . $_SERVER['PHP_SELF'] . "\" method=\"POST\" enctype=\"multipart/form-data\">";
echo "Naam: <input type='text' name='from'><br>";
echo "Email:<input type='text' name='email'><br>";
echo "Onderwerp:<input type='text' name='subject'><br>";
echo "Bestand:<input type='file' name='file'><br>";
echo "Bericht:<textarea name='bericht'></textarea><br />";
echo "<input type=\"submit\" value=\"Verzenden\">";
}
?>
//mail formulier voor bijlage
$email ='******';
//geneer boundary
DEFINE('bound',md5(uniqid(time())));
//check request method
if($_SERVER['REQUEST_METHOD'] == 'POST')
if($from == "" || $email == "" || $subject == "" || $file == "" || $bericht == "")
{
echo "<center><small><font face=\"Arial\">Gelieve alle velden correct in te vullen.<br><a href=\"javascript:history.back(-1)\">Probeer het opnieuw</a></font></small></center>";
}
elseif(!eregi("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+", $email))
{
echo "<center><small><font face=\"Arial\">Gelieve een geldig e-mailadres in te vullen.<br><a href=\"javascript:history.back(-1)\">Probeer het opnieuw</a></font></small></center>";
}
else
{
//if file upload send with email as mixed
if(!empty($_FILES['file']['name']))
{
//check filesize
if($_FILES['file']['size'] < 1024*1024)
{
$headers = "From: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "Reply-To: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
//email bestaat uit meerdere bestanden dus vertel wat de scheidings teken is en dat het een multipart is
$headers .= "Content-Type: multipart/mixed; boundary=\"".bound."\"\r\n";
//we zenden een attachment mee
$headers .= "Content-Disposition: attachment\r\n";
//readfile
$fp = fopen($_FILES['file']['tmp_name'],'r');
$bestand = fread($fp,$_FILES['file']['size']);
fclose($fp);
//create body
//generenen een body. Dit is een multi part gezeik
$body.= "This is a multi-part message in MIME format.\r\n";
$body.= "\r\n";
//boundary
$body.= "--".bound."\r\n";
//content type + charater set (iso in dit geval)
$body.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
//codering (7 bit)
$body.= "Content-Transfer-Encoding: 7bit\r\n";
$body.= "\r\n";
//het bericht
$body.= $_POST['bericht'] ."\r\n";
//boundary
$body.= "--".bound."\r\n";
//content type + naam bestand (database.sql)
$body .= "Content-Type: application/octet-stream; name=".$_FILES['file']['name']."\r\n";
//codering
$body .= "Content-Transfer-Encoding: base64\r\n";
//als bijlage toegevoegd
$body.= "Content-disposition: attachment\r\n";
$body .= "\n";
//de inhoud van het bestand
$body .= chunk_split(base64_encode($bestand )) . "\r\n";
mail($email,$_POST['subject'],$body,$headers);
echo 'Email (Met een bijlage) is verzonden';
}
else
{
echo 'Bestands groote is te groot';
}
}
else
{
$headers = "From: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "Reply-To: ".$_POST['from']." <".$_POST['email'].">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$bericht = $_POST['bericht'];
mail($email,$_POST['subject'],$bericht,$headers);
echo 'Email (Zonder een bijlage) is verzonden';
}
}
else
{
//mail formulier je moet zelf het fomullier maken
echo "<form action=\"" . $_SERVER['PHP_SELF'] . "\" method=\"POST\" enctype=\"multipart/form-data\">";
echo "Naam: <input type='text' name='from'><br>";
echo "Email:<input type='text' name='email'><br>";
echo "Onderwerp:<input type='text' name='subject'><br>";
echo "Bestand:<input type='file' name='file'><br>";
echo "Bericht:<textarea name='bericht'></textarea><br />";
echo "<input type=\"submit\" value=\"Verzenden\">";
}
?>
Gewijzigd op 14/07/2023 18:49:16 door - Ariën -
En aan het eind van het script ontbreekt de afsluitende }
Ik raad je aan om je mailadres weg te halen.
De tags font en center zijn verouderd in html5
Kijk ook eens naar uw spelling
E-mail en grootte i.p.v. email en groote
Bestandsgrootte is 1 woord.
Hoofdletter na een haakje?
Punt na een zin.
Ik raad aan om mail(....) in een if-else te gieten. Want nu ga je ervan uit dat het altijd lukt, terwijl mail() ook kan falen.
Op de eerste plaats bedankt voor jullie inzet en raad.
Nu ik ging kijken zag ik het ook dat de Nederlanse taal in het script te wensen overlaat. Zoals ik al had aangegeven, heb ik het scirpt enkele jaren geleden ergens gedownload, maar omdat het niet werkte heb ik het ergens geparkeerd. Ik denk dat ik dan toch maar ergens anders iets moet gaan zoeken wat wel werkt, omdat ik er geen verstand van heb. Luitjes, nogmaals bedankt.
Dank voor uw inzendingen.
Neemt u alstublieft contact op met het dichtstbijzijnde internetbureau in uw omgeving.
Daar is de vereiste kennis en tijd aanwezig om genoemde functionaliteit werkend te krijgen.
U kunt daar meteen advies krijgen over het versturen van (bulk) e-mail.
Met vriendelijke groet,
Ad
Ton, had je nog naar de uitleg van Adoptive Solution gekeken?
Op de eerste plaats iedereen bedankt voor de inzet en goede raad. Wat ik al eerder aangegeven heb in voorgaande berichten is dat ik totaal geen verstand heb van het programmeren in welke scripttaal dan ook. Ik was er vanuit gegaan dat één van jullie het script wel draaiende zou krijgen. Helaas was het dus een illusie. Maar ik heb daar vrede mee. Ik ben 74 jaar en heb geen interesse meer om me echt in die programmeertechnieken te verdiepen. Dus lieve mensen, nogmaals bedankt allemaal, en ik laat het hierbij. Ik zou wel graag van iemamd horen hoe ik nu deze topic moet sluiten.
Adoptive Solution op 14/07/2023 17:01:53:
Aan het eind van regel 9 ontbreekt {
En aan het eind van het script ontbreekt de afsluitende }
En aan het eind van het script ontbreekt de afsluitende }
Misschien dat het dan wel goed werkt. Dus geef het een kans, en probeer het eens.
Misschien ben je dus al voor 99,99% bij de oplossing i.p.v. op te geven. Hier is geen programmeerkennis voor nodig.
Voor de rest sluiten we geen topics, tenzij ze de huisregels overtreden. Ze zinken vanzelf omlaag.
Gewijzigd op 15/07/2023 15:46:20 door - Ariën -
Even // ervoor zetten.
Verder geen intentie om de rest uit te vlooien.
Een foutmelding zou nuttig zijn.
Daarvoor zouden de regels
error_reporting(E_ALL);
ini_set('display_errors', true);
nuttig zijn bovenin het script. Bijvoorbeeld op regel 2 direct.
Daarnaast denk ik dat de functie eregi "iets" verouderd is: hij is niet eens meer te vinden op php.net, maar nog wel op
http://php.adamharvey.name/manual/en/function.eregi.php
Sinds php 5.3 Deprecated en sinds 7.0 verwijderd uit php.
Daarnaast:
het script vertrouwt er zo te zien op dat de velden uit een formulier, zoals te vinden in $_POST['from'] op magische wijze in $from terecht komen. Ook dat is in een grijs verleden al afgeschaft.
Dus voorbij regel 10 kom je al niet.
Ik zou een ander (actueler) script zoeken. Het liefst iets met phpmailer.
even uit de losse pols:
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
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
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$ontvanger = '[email protected]';
include 'file_met_php_mailer.php';
$from = filter_input(INPUT_POST, 'from', FILTER_VALIDATE_EMAIL);
$bericht = filter_input(INPUT_POST, 'bericht');
$subject = filter_input(INPUT_POST, 'sunject');
if ($from && $bericht && $subject) {
$mail = new phpmailer();
$mail->setFrom($from, $from . ' via website');
$mail->addReplyTo($from);
$mail->addAddress($ontvanger);
$mail->Subject = $subject;
$mail->Body = $bericht';
if($_FILES['file']['size'] < 1024*1024 && $_FILES['file']['size'] > 0) {
$mail->addAttachment($_FILES['file']['tmp_name']
}
if ($mail->send()) {
echo 'mail is verstuurd';
}
else {
echo 'versturen van mail ging niet goed';
}
}
}
// en ELSE het formulier tonen.
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$ontvanger = '[email protected]';
include 'file_met_php_mailer.php';
$from = filter_input(INPUT_POST, 'from', FILTER_VALIDATE_EMAIL);
$bericht = filter_input(INPUT_POST, 'bericht');
$subject = filter_input(INPUT_POST, 'sunject');
if ($from && $bericht && $subject) {
$mail = new phpmailer();
$mail->setFrom($from, $from . ' via website');
$mail->addReplyTo($from);
$mail->addAddress($ontvanger);
$mail->Subject = $subject;
$mail->Body = $bericht';
if($_FILES['file']['size'] < 1024*1024 && $_FILES['file']['size'] > 0) {
$mail->addAttachment($_FILES['file']['tmp_name']
}
if ($mail->send()) {
echo 'mail is verstuurd';
}
else {
echo 'versturen van mail ging niet goed';
}
}
}
// en ELSE het formulier tonen.
?>
PHPMailer neemt je heel wat werk uit handen.
Toevoeging op 17/07/2023 09:53:22:
En dan kan het nog steeds zo zijn dat je mail niet ontvangen wordt, omdat het FROM adres niet klopt.
FROM definieert wie de mail zegt te versturen. Daar kan ik dus een mailadres als [email protected] invullen.
De mail wordt vervolgens door jouw mailserver / webserver verstuurd.
De ontvangende kant ziet dan "er komt een mail binnen van server X maar die is niet gemachtigd om mails te versturen namens phphulp.xyz." En grote kans dat die dus als spam / fake geweigerd wordt.
Daarom zou je bij FROM ook iets moeten zetten als $mail-setFrom('[email protected]', 'website formulier');
Want DAAR komt de mail vandaan.
REPLY-TO definieert waarheen een eventueel antwoord verstuurd moet worden.
Gewijzigd op 17/07/2023 09:49:13 door Ivo P