Ik heb ergens een script gevonden maar het draait helaas niet. ik heb er zelf geen verstand van. Wie kan me helpen


<?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\">";
}
?>
Het is even jammer dat niet bekend is waarom het script niet werkt.
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:
<?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.
?>

PHPMailer neemt je heel wat werk uit handen.

[size=xsmall]Toevoeging op 17/07/2023 09:53:22:[/size]

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.

Reageren