Hoi

Ik gebruik de folgende functie voor foto winkel waar klanten meerdere foto's kunnen uloaden en die dienen verzonden te worden naar de winkel eigenaar:


	public function upload_fotosAction()
	{
		if ($_SERVER['REQUEST_METHOD'] == 'POST')
		{
			$vNaam       = filter_input(INPUT_POST, 'vNaam', FILTER_SANITIZE_STRING);
			$aNaam       = filter_input(INPUT_POST, 'aNaam', FILTER_SANITIZE_STRING);
			$adres       = filter_input(INPUT_POST, 'adres', FILTER_SANITIZE_STRING);
			$postcode    = filter_input(INPUT_POST, 'postcode', FILTER_SANITIZE_STRING);
			$woonplaats  = filter_input(INPUT_POST, 'woonplaats', FILTER_SANITIZE_STRING);
			$email       = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
			$telefoon    = filter_input(INPUT_POST, 'telefoon', FILTER_SANITIZE_STRING);

			$uploader_id = $this->page->uploader_toevoegen($vNaam,$aNaam,$adres,$postcode,$woonplaats,$email,$telefoon);
			
			if ($uploader_id)
			{
				$ontvangers = array(
				    "[email protected]",
                );
				
				$aan         = implode(',', $ontvangers);
				$onderwerp   = 'Afdruk bestelling via de website';
				$mail_aanhef = 'De volgende persoon heeft een afdruk bestelling geplaatst';
				$naam        = $vNaam . '  ' .$aNaam; 
				
				$bericht     = '';
				$bericht    .= 'De volgende persoon heeft een afdruk bestelling geplaatst';
				$bericht    .= "\n\n";
				$bericht    .= "Naam: ";
				$bericht    .= $naam;
				$bericht    .= "\n";
				$bericht    .= "Adres: ";
				$bericht    .= $adres;
				$bericht    .= "\n";		 
				$bericht    .= "Woonplaats: ";
				$bericht    .= $postcode;
				$bericht    .= "\n";		 
				$bericht    .= "Email: ";
				$bericht    .= $email;
				
				$strSid = md5(uniqid(time()));
				
				$headers = "";  
				$headers .= "From: [email protected]";       
				$headers .= "MIME-Version: 1.0\n";  
				$headers .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";  
				$headers .= "This is a multi-part message in MIME format.\n";       
				$headers .= "--".$strSid."\n";  
				$headers .= "Content-type: text/html; charset=utf-8\n";  
				$headers .= "Content-Transfer-Encoding: 7bit\n\n";

				for($i=0;$i<count($_FILES["file"]["name"]);$i++)  
				{  
					if($_FILES["file"]["name"][$i] != "")  
					{  
						$filesName = $_FILES["file"]["name"][$i];  
						$strContent = chunk_split(base64_encode(file_get_contents($_FILES["file"]["tmp_name"][$i])));  
						$headers .= "--".$strSid."\n";  
						$headers .= "Content-Type: application/octet-stream; name=\"".$filesName."\"\n";  
						$headers .= "Content-Transfer-Encoding: base64\n";  
						$headers .= "Content-Disposition: attachment; filename=\"".$filesName."\"\n\n";  
						$headers .= $strContent."\n\n";  
					}  
				}
				$flgSend = mail($aan,$onderwerp,$bericht,$headers);
			}      			
		}
	}


Het versturen gaat prima, alleen krijg ik het niet voor elkaar om de bericht gegevens (naam, adres, postcode etc) ook in het bericht te vertonen. Wat doe ik hier fout?

Alvast bedankt
Wat zit er in $_POST['vNaam']?
Wat zit er in $vNaam?
Wat geeft een echo $naam op regel 25 (zelf toevoegen dus)?
Hoi Eddy $vNaam is voornaam, $aNaam is achternaam en $naam is dus een combinatie van die twee
Maar, wat geeft een echo daarvan dan? Is die wel gevuld?
Probeer in eerste instantie eens:

if!empty($_POST['vNaam']))
{
$vNaam = $_POST['vNaam'];
echo 'vNaam = '.$_POST['vNaam'];
exit();
}
else
{
echo 'vNaam is leeg.';
exit();
}
Ja, dat $vNaam je voornaam moet bevatten, snap ik. Maar doet het dat ook daadwerkelijk?
Kortom: wat zit er in $vNaam? Is die leeg? Is dat inderdaad de voornaam zoals jij hem ingevuld heb? Is het een "false"?
Hoi Ben, Joni en Eddy. Bedankt voor de reacties. Als ik echo of var_dump gebruik net na $naam geeft het me de juiste waarde! (voor- en achternaam)
Als $vNaam, $aNaam en $naam gewoon waardes hebben is er geen reden dat deze niet in de email terug zouden komen, op basis van deze code.
De code die je hebt zou ik zooo graag willen refactoren.
Netjes met PHPmailer en een nette image upload api
De opbouw van je MIME mail klopt volgens mij niet.

Als je je mail achter elkaar zet dan krijg je nu het volgende:

(eerste de headers...)
multipart/mixed (regel 46)
text/html (regel 49) <-- hier kondig je in feite aan dat de content die volgt HTML is
en nu volgen alle images (regel 52 t/m 64) want deze maken nog deel uit van je headers!
---
(...en dan de body)
hier wordt $bericht afgedrukt, deze bevat geen content type!

Het mag nog een klein wonder heten dat deze mailtjes deels doorkomen want in wezen klopt er niets van de structuur. Waarschijnlijk is het mailprogramma nog zo tolerant dat deze de foto's hier uit kan vissen, maar $bericht beschouwt als "rotzooi aan het einde van het bericht", deze heeft immers geen boundary noch een content type...
EDIT: ook is het zo dat alles buiten boundaries simpelweg wordt genegeerd.

Bonus: chunk_split laat regeleindes intact, deze zou je moeten rtrimmen, anders bevatten je base64-encoded blokken teveel regelovergangen (witregels). Bekijk de bron van je e-mail bericht maar eens, waarschijnlijk bevatten je base64-encoded blokken witregels.

Rectificatie: mogelijk alleen aan het eind van de ge-chunk_split-te tekst, maar een regelovergang teveel of te weinig in een MIME-mail kan vervelend zijn, kijk dit dus na!

Dit laatste (bron van e-mailbericht bekijken) heb je waarschijnlijk nog niet gedaan, anders had je deze fouten al gespot.
Hoi Rickert en Thomas. Bedankt voor de reactie.

@Rickert Twee zielen een gedachte. Ik heb uiteindelijk ook voor PHPMailer gekozen :) Ik ben er alleen nog niet uit hoe ik de attachements als image kan late zien in de email i.p.v. text

@Thomas Dacht misschien te makkelijk. Had dit klakkeloos over genomen uit een tutorial met wat aanpassingen, vandaar dus nu phpMailer zoals boven beschreven.

Reageren