Ik probeer een web bestand als bijlage toe te voegen aan een email.
Lokaal bestand uploaden (van de eigen computer) lukt wel.
Maar zodra ik een bestand van de website toevoeg, dan wordt het bestand toegevoegd met de naam .dat

<?php
DEFINE('bound',md5(uniqid(time())));
$map = $_SERVER['CONTEXT_DOCUMENT_ROOT'] . "/afrekenen/Export/2024/";
$bst = "CSV_A_accounts_20230114_20240121.csv";
$bst2 = $map . $bst;

$fp = fopen($bst2,'r');
$bestand = fread($fp, filesize($bst2));
fclose($fp);

$headers = "From: ".$from." <".$email.">\r\n";
$headers .= "Reply-To: ".$from." <".$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";
$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.= $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);
?>

[size=xsmall]Toevoeging op 31/03/2024 03:20:11:[/size]

Ik heb één regel verkeerd weergegeven:

$body .= "Content-Type: application/octet-stream; name=".$bestand."\r\n";


Wat is de reden dat je dit handmatig doet, en niet via een standaard mailer die volgens de juiste RFC-regels mailt?

Denk bijvoorbeeld aan phpMailer of SwiftMailer. Dan hoef je het wiel in ieder geval niet opnieuw uit te vinden.
En je kan het ook eenvoudig installeren met Composer als je wilt.
Hieronder heb ik de naam van het bestand in de mail kunnen instellen.
$body .= "Content-Type: application/octet-stream; name=" . $weergavenaam . "\r\n";

Hiermee is het probleem opgelost !!

Reageren