[php]mailen van doc bestanden enz via mail()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik ben bezig een functie te maken die het mogelijk maakt voor de gebruikers om mailtjes te versturen. Het versturen gaat allemaal. Maar nu wil ik het mogelijk maken dat ze een bestand kunnen meesturen als bijlage.

Ik ben wat gaan spelen met de functie mail() :*) . Ik krijg het voor elkaar dat hij een bijlage stuurd. Alleen de bijlage is leeg.
PHP:
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
41
42
43
44
45
46
47
48
$name="Jochemmol";
$emailto="Jochemmol@test.nl";
$subject="testen";
$email="Jochemmol@test.nl";
$body="Dit is een testje om te kijken of het werkt";
$fileatt_type="text/plain";
$fileatt_name="test.txt";

$bestand = fopen("test.txt","w");
$data=fread($bestand,1024);
echo $data;
fclose($bestand);


    $headers = "From: " . $name . " <" . $email . ">\r\n";

    $body = stripslashes($body);

    $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}\""; 

    $inhoud_bericht .= "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" . 
    $body . "\n\n"; 

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

    $inhoud_bericht .= "--{$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"; 

    $inhoud_bericht .= "--{$mime_boundary}\n" .
            "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n" . 
    "Content-Transfer-Encoding: 7bit\r\n" . "\r\n" . $body . 
    "--{$mime_boundary}--\n"; 
                            
    mail($emailto, $subject, $inhoud_bericht, $headers);


Mijn grotere probleem is. Als ik doc bestanden wil mee sturen. Hoe doe ik dat. Ik lees namelijk nu de content uit het bestand. Maar bij een doc bestand is dat binair. Hoe stuur ik anders het bestand mee. :? Ik kan een kopie maken maar hoe gaat die dan mee? _/-\o_

[ Voor 2% gewijzigd door Jochemmol op 12-09-2006 10:24 . Reden: Het verzenden van een txt bestand lukt ]

Jochemmol


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Heb je het al geprobeerd? Waar dacht je dat base64_encode voor was? Waarom open je je bestand om in te schrijven?

Kortom. Verander sowieso je "w" even in "rb" en je code meot gewoon ook voor binaire bestanden werken. (En natuurlijk even het contenttype en bestandsnaam aanpassen natuurlijk :). )

[ Voor 15% gewijzigd door Janoz op 12-09-2006 10:32 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik probeer de gegevens uit test.doc uit te lezen en naar het scherm te schrijven. Ik zie allemaal rare tekens. (niet raar binair).

Hij mailt nu netjes test.doc als naam mee maar als ik hem open dan geeft hij een error. het bestands pad is niet juist.

Ik snap er niks van. Je moet toch doc bestanden kunnen meesturen.

[ Voor 9% gewijzigd door Jochemmol op 12-09-2006 10:35 ]

Jochemmol


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik heb content type aangeast naar: application/msword dat stond op de site van microsoft.

Ik had er al rb van gemaakt omdat als ik er w vam maakte opende hij het bestand en gaf word een foutmelding over de bestandslayout.

Maar dat van die base64encode snap ik even niet. Dat moet ik toch doen? :?

Ik heb het eens weggehaald. Nu krijg ik geen error meer als ik het bestand open vanuit mail. Alleen het bestand is wel leeg.
8)7 ;(

[ Voor 18% gewijzigd door Jochemmol op 12-09-2006 11:05 ]

Jochemmol


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ja klopt. Dat moet je ook doen. De reden dat ik die vraag heb staan is om je er over na te laten denken en eventueel te bedenken waarom dat er staat. Je vraagt immers "met niet binair werkt het, maar hoe moet het nu met binair?". Laat base64_encode nu net juist bedoeld zijn voor het plaatsen van binaire data in een 7bits georienteerde ascii tekst ;).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
ow oke nu snap ik je vraag. :D Maar de code werkt nu deels. Ik krijg een ongeldig bestand als ik het open vanuit mijn mailtje. Als ik het met wordpad probeer zie ik allemaal rare tekens(binair).

Wat doe ik nu fout. Ik het het juiste content-type:application/msword
Ik lees het bestand in. Encodeer het met base64 en dan zet ik het in mijn mailtje
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$bestand = fopen("test.doc","rb");
$data=fread($bestand,1024); // heb fgets geprobeerd maar werkte niet
fclose($bestand);

               $data = chunk_split(base64_encode($data));  
    $inhoud_bericht.= "--{$mime_boundary}\n" . 
              "Content-Type: {$fileatt_type};\n" . 
              " name=\"{$fileatt_name}\"\n" . 

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

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

Waar gaat het n fout. Als ik even niet encodeer dan opend hij word juist maar is het bestand leeg. |:(

[ Voor 15% gewijzigd door Jochemmol op 12-09-2006 11:15 ]

Jochemmol


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Het is me gelukt.

PHP:
1
2
3
4
//Ik deed dit: 
$data=fread($bestand,1024)
// Dit moet zijn
$data=fread($bestand,filesize(filename)) // Filename is de naam van het bestand dat je ook gebruikt bij fopen

Bedankt allemaal. _/-\o_

Jochemmol


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Heb je content-type multipart/mixed en de mime version header meegegeven aan de rfc822 header?

Acties:
  • 0 Henk 'm!

Verwijderd

Je kan je een hoop moeite besparen door gebruik te maken van iets als http://phpmailer.sourceforge.net/ ;)

Misschien minder leuk dan 't zelf doen, maar scheelt tijd en frustratie :P

edit:
@hieronder, lees ook eens de reacties in een topic ;)

[ Voor 15% gewijzigd door Verwijderd op 12-09-2006 12:37 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Kijk ook eens naar de class phpMailer.
Een erg prettige class om mails mee te versturen, ook incl bijlage's, inline afbeeldingen, etcetera.
Pagina: 1