Ik heb een script waarmee ik een zip bestand van een backup naar mezelf wil sturen. Het zip bestand is oke voor de verzending maar bij aankomst zit er geen data mee in. Waarschijnlijk iets met de instellingen maar ik kom er niet uit.
Peter
<?PHP
$fileatt_name="backup.zip";
$fileatt_type = "application/octet-stream";
Waarom gebruik je geen kant en klare class om zip-bestanden te maken?
Als ik de code bekijk stuur je volgens mij alleen bestanden als attachment mee, zonder ze in te pakken en alleen met de .zip extensie erachter. Zo werkt dat niet.
$filedir is inderdaad het path. De zipt bestanden zijn inderdaad handmatig gemaakt. Als ik ze unzip zien ze er goed uit. Op het moment dat ik als bijlage verstuur ontvang ik zo ook alleen met 0 bytes.
Ziet er in eerste opzicht goed uit, maar waarom heb je Content-Disposition uitgecomment?
EDIT: weet trouwens niet of je op die manier een hele directory kunt grijpen.
Je kunt ook trouwens eenvoudig controleren of het bestand goed is overgekomen door de rauwe source van de e-mail te bekijken. Vervolgens zou je dat base64 blok kunnen copypasten en via een testscriptje ter download aan kunnen bieden om te kijken of deze mogelijk corrupt is geraakt.
EDIT: als er witregels tussen de base64 regels zitten dat moet je mogelijk de "line ending sequence" (derde parameter chunk_split) expliciet instellen op "\n". Default is dit namelijk "\r\n" wat voor teveel regelovergangen kan zorgen op sommige platformen.
En om te voorkomen dat je een regelovergang teveel aan het einde hebt wil je het resultaat van chunk_split wellicht nog trimmen. En als je slim bent vang je dit soort dingen in een functie:
<?php
function get_attachment($filename) {
clearstatcache();
if (file_exists($filename)) {
$fp = fopen($filename, 'rb');
$contents = fread($fp, filesize($filename)); // @todo remember to fix zero-length files
// note that chunk_split also adds an "end" character sequence at the end of the string, hence rtrim
return rtrim(chunk_split(base64_encode($contents), 76, "\n")); // @todo 3rd parameter might depend on platform
} else {
return false;
}
}
?>
Je zou een tussenstap kunnen inbouwen waarin je de directory eerst ergens zipt, en dan als attachment toevoegt?
Filename heb ik aangepast. Door jullie hulp heb ik de zaak nu werkend. De mail wordt verzonden alleen in het format zoals hierna wordt getoond. Ik moet nog uitzoeken hoe ik dat in het juiste formaat krijg.
Vast bedankt voor al jullie opmerkingen en hulp. Weer veel van geleerd. ;).
Peter
EDIT: als er witregels tussen de base64 regels zitten dat moet je mogelijk de "line ending sequence" (derde parameter chunk_split) expliciet instellen op "\n". Default is dit namelijk "\r\n" wat voor teveel regelovergangen kan zorgen op sommige platformen.