Gemaild zip bestand leeg bij aankomst

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Peter van Kroonenburg

Peter van Kroonenburg

04/01/2017 09:48:59
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?PHP
$fileatt_name
="backup.zip";
$fileatt_type = "application/octet-stream";

$file = fopen($filedir,'rb');
$data = fread($file,filesize($filedir));
fclose($file);

$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";

$email_message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$email_message . "\n\n";

$data = chunk_split(base64_encode($data));

$email_message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .

"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";

$ok = @mail($email_to, $email_subject, $email_message, $headers);

if($ok) {
echo "<font face=verdana size=2>Verzonden!</font>";
}
else {
die("Niet verzonden");
}

?>
 
PHP hulp

PHP hulp

27/04/2024 06:15:54
 
- Ariën  -
Beheerder

- Ariën -

04/01/2017 10:12:21
Quote Anchor link
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.
 
Ivo P

Ivo P

04/01/2017 10:15:08
Quote Anchor link
Bevat $data na regel 7 inderdaad inhoud?

Ik mis een beetje de betekenis van $filedir in de eerste 7 regels van je script.
Wat bevat nu het path naar het bestand (incl. bestandsnaam)?


Zelf vind ik het wel eenvoudig om PHPMailer te gebruiken en dan te kunnen volstaan met

$mail->addAttachment($file)

Toevoeging op 04/01/2017 10:27:37:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$file = fopen($filedir,'rb');
$data = fread($file,filesize($filedir));
fclose($file);


volgens mij bedoel je daar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$file = fopen($filedir.$fileatt_name,'rb');
$data = fread($file,filesize($filedir.$fileatt_name));
fclose($file);


of mogelijk
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$data = file_get_contents($filedir.$fileatt_name);
 
- Ariën  -
Beheerder

- Ariën -

04/01/2017 11:40:49
Quote Anchor link
En die zip-bestanden zijn handmatig gemaakt? In dat geval mag je mijn opmerking over 'de classes voor het maken van een zip-file' negeren.
 
Peter van Kroonenburg

Peter van Kroonenburg

04/01/2017 11:55:11
Quote Anchor link
$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.
 
Ivo P

Ivo P

04/01/2017 11:57:54
Quote Anchor link
maar in je huidige script lees je de file toch helemaal niet in?

fopen moet een filename als input hebben. Niet een directory

Toevoeging op 04/01/2017 12:12:43:

en mocht $filepath wel het path incl. de bestandsnaam bevatten:

Als de backup niet gemaakt is door Apache/PHP, dan kan die file zo maar staan op een plek die niet bereikbaar is (door de rechten) voor je PHP scipt.

is_readable() zou je dat kunnen vertellen.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/01/2017 15:59:13
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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?
Gewijzigd op 04/01/2017 17:13:54 door Thomas van den Heuvel
 
Ivo P

Ivo P

05/01/2017 21:34:45
Quote Anchor link
Maar ook die functie zal niet werken als je daar niet de filename ingooit.

Dat is namelijk wat in het oorspronkelijke script ook niet gebeurt.
 
Peter van Kroonenburg

Peter van Kroonenburg

06/01/2017 11:15:48
Quote Anchor link
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

Content-Type: application/octet-stream; name=database.sql

Content-Transfer-Encoding: base64

Content-disposition: attachment


DQojQ3JlYXRlIHRhYmxlIGFjdGllZg0KDQpDUkVBVEUgVEFCTEUgYGFjdGllZmAgKAogIGBhY3Rp

ZWZfaWRgIGludCgxKSBOT1QgTlVMTCwKICBgYWN0aWVmX29tc2AgdmFyY2hhcigxNSkgTk9UIE5V

TEwKKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7DQoNCiNEdW1wIGRhdGEN

Cg0KSU5TRVJUIElOVE8gYWN0aWVmIFNFVCBhY3RpZWZfaWQ9JzAnLGFjdGllZl9vbXM9J25pZXQg

YWN0aWVmJzsNCklOU0VSVCBJTlRPIGFjdGllZiBTRVQgYWN0aWVmX2lkPScxJyxhY3RpZWZfb21z

PSdhY3RpZWYnOw0KDQojQ3JlYXRlIHRhYmxlIGJhY2t1cA0KDQpDUkVBVEUgVEFCTEUgYGJhY2t1

cGAgKAogIGBiYWNrdXBfaWRgIGludCgxMSkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgYGRh

dHVtX2xhc3RfYnVgIGRhdGUgTk9UIE5VTEwsCiAgYGRhdHVtX25leHRfYnVgIGRhdGUgTk9UIE5V

TEwsCiAgYGtsYW50X2lkYCBpbnQoMTEpIE5PVCBOVUxMLAogIGBidV9uYW1lYCB2YXJjaGFyKDYw

KSBOT1QgTlVMTCwKICBgYnVfcGFkYCB2YXJjaGFyKDYwKSBOT1QgTlVMTCwKICBgYnVfbWFpbF90

b2AgdmFyY2hhcig2MCkgTk9UIE5VTEwsCiAgYGRhdHVtYCB0aW1lc3RhbXAgTk9UIE5VTEwgREVG

QVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICBQUklNQVJZIEtFWSAoYGJhY2t1cF9pZGApCikgRU5H

SU5FPUlubm9EQiBBVVRPX0lOQ1JFTUVOVD0yIERFRkFVTFQgQ0hBUlNFVD1sYXRpbjE7DQoNCiNE
 
Thomas van den Heuvel

Thomas van den Heuvel

06/01/2017 14:21:47
Quote Anchor link
Dat zeg ik dus:
Quote:
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.
 
Peter van Kroonenburg

Peter van Kroonenburg

10/01/2017 21:00:23
Quote Anchor link
Dank voor alle info.
Peter
 
Thomas van den Heuvel

Thomas van den Heuvel

11/01/2017 00:57:43
Quote Anchor link
Peter van Kroonenburg op 10/01/2017 21:00:23:
Dank voor alle info.
Peter

Wat betekent dat? Zijn de problemen opgelost? Wat was de oplossing? Of heb je gekozen voor een andere aanpak (bijvoorbeeld PHPMailer)?
 
Peter van Kroonenburg

Peter van Kroonenburg

11/01/2017 21:36:39
Quote Anchor link
Inderdaad overgeschakeld naar PHP mailer.
 
- Ariën  -
Beheerder

- Ariën -

11/01/2017 21:51:26
Quote Anchor link
Let er wel op dat je de nieuwste versie gebruikt, dit vanwege een veiligheidslek in eerdere versies.
 
Peter van Kroonenburg

Peter van Kroonenburg

14/01/2017 15:14:04
Quote Anchor link
Het blijft toch een probleem om het werkend te krijgen. Ik heb PHPmailer geinstalleerd. Alle variabelen ingesteld en ja, het werkt lokaal. Bijlage wordt keurig meegezonden.
De zaak geupload naar HOSTNET.
Ik krijg daar nu onderstaande foutmelding;
Message could not be sent.Mailer Error: SMTP connect() https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Op de betreffende site gezocht maar kom er niet uit ;(.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
require '../PHPMailer-master/PHPMailerAutoload.php';
$username="[email protected]";
$password='******';
$from="[email protected]";
$name="peter";
$email="[email protected]";
$subject="test";
$message="inhoud";
$to="[email protected]";
$att="../backupdata_zip/backup_6.zip";
        
$mail = new PHPMailer;
$mail->isSMTP();/*Set mailer to use SMTP*/
$mail->Host = 'smtp.gmail.com';/*Specify main and backup SMTP servers*/
$mail->Port = 587;
$mail->SMTPAuth = true;/*Enable SMTP authentication*/
$mail->Username = $username;/*SMTP username*/
$mail->Password = $password;/*SMTP password*/
$mail->SMTPSecure = 'tls';*//*Enable encryption, 'ssl' also accepted*/
$mail->From = $from;
$mail->FromName = $name;
$mail->addAddress($to, 'Recipients Name');/*Add a recipient*/
$mail->addReplyTo($email, $name);
/*$mail->addCC('[email protected]');*/
/*$mail->addBCC('[email protected]');*/

$mail->WordWrap = 70;/*DEFAULT = Set word wrap to 50 characters*/
$mail->addAttachment($att);/*Add attachments*/
$mail->isHTML(false);/*Set email format to HTML (default = true)*/
$mail->Subject = $subject;
$mail->Body    = $message;
$mail->AltBody = $message;
if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
//} else {
   // header("Location: ../php/start.php");

}
?>


- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 14/01/2017 15:35:30 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

14/01/2017 15:37:03
Quote Anchor link
Je zou nauwkeuriger kunnen kijken naar wat er misgaat door debugging aan te zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$mail->SMTPDebug = 3; // verbose

EDIT: het commentaar op regel 20 ziet er niet ok uit, er staat een asterisk na de puntkomma.

EDIT: wild guess: je host staat het gebruik van sockets niet toe.
Gewijzigd op 14/01/2017 15:42:34 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

14/01/2017 15:37:22
Quote Anchor link
Zet je debugging eens aan?

$mail->SMTPDebug = 1;
 
Peter van Kroonenburg

Peter van Kroonenburg

14/01/2017 15:56:27
Quote Anchor link
asterisk na de puntkomma weggehaald.

Debugger:

2017-01-14 14:55:20 SMTP ERROR: Failed to connect to server: Netwerk is onbereikbaar (101) 2017-01-14 14:55:20 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
 
- Ariën  -
Beheerder

- Ariën -

14/01/2017 18:22:23
Quote Anchor link
Ik gok op een firewall-issue. Wat zegt je hosting?
Gewijzigd op 14/01/2017 18:28:23 door - Ariën -
 
Peter van Kroonenburg

Peter van Kroonenburg

14/01/2017 18:36:08
Quote Anchor link
Die verwijzen me naar:
https://www.hostnet.nl/helpdesk/webhosting/e-mail-versturen-vanaf-uw-website

Het emailadres heb ik aangepast met het adres dat ook daar bekend is. Ook heb ik -f voor het from adres geplaatst. Heeft helaas geen resultaat gehad.

Toevoeging op 14/01/2017 18:37:37:

Het script zoals dat daar staat werkt wel. Alleen het toevoegen van de bijlage?
 
- Ariën  -
Beheerder

- Ariën -

14/01/2017 19:07:35
Quote Anchor link
Regel 14 t/m 20 uitschakelen. Dan moet je via sendmail op hun server zelf kunnen mailen.
Wel vreemd dat ze SMTP niet toestaan, ik zou het zelf appreciëren als ze dat wel deden.
Gewijzigd op 14/01/2017 19:07:55 door - Ariën -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.