login  Naam:   Wachtwoord: 
Registreer je!
 Forum

PDF als bijlage versturen in email

Offline Martijn1989 - 11/08/2008 01:10 (laatste wijziging 15/09/2008 02:34)
Avatar van Martijn1989PHP ver gevorderde Beste,

Ik ben al een tijdje bezig met het versturen van een email met daarin een dynamische pdf die eerst word opgeslagen op de server. (Dit alles voor een facturatie systeem waarbij facturen naar de klant worden gestuurd.)

De code die ik gebruik om de email te versturen ziet er zo uit :

  1. <?php
  2. //Mailen
  3.  
  4. $Settings[ 'email' ][ 'to' ] = $object_klant['emailadres'];
  5. $Settings[ 'email' ][ 'from' ] = $gebruikersinfo['factuur-email-naam'] ."<". $gebruikersinfo['factuur-email-email'] .">";
  6. $Settings[ 'email' ][ 'subject' ] = factuur_email($gebruikersinfo['factuur-email-onderwerp'], in($_GET['klant']));
  7. $Settings[ 'email' ][ 'message' ] = factuur_email(nl2br($gebruikersinfo['factuur-email-bericht']), in($_GET['klant']));
  8.  
  9. $Rand = md5( time( ) );
  10. $Headers = "From: " . $Settings[ 'email' ][ 'from' ];
  11. $Mime = "==Multipart_Boundary_x{$Rand}x";
  12. $Headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$Mime}\"";
  13. $Message = "This is a multi-part message in MIME format.\n\n--{$Mime}\nContent-Type:text/html; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: 7bit\n\n" . $Settings[ 'email' ][ 'message' ] . "\n\n";
  14.  
  15. /********************************************** Attachments ********************************************/
  16.  
  17. //Attachment toevoegen
  18. $bestandsnaam = "facturen/bestanden/". _id ."/". factuur_email("{factuurnummer}", in($_GET['klant'])) .".pdf";
  19. $Handle = fopen($bestandsnaam, 'rb');
  20. $Data = fread( $Handle, filesize($bestandsnaam) );
  21. fclose( $Handle );
  22. $Attachment = chunk_split( base64_encode( $Data ) );
  23.  
  24. $Message .= "--{$Mime}\n" . "Content-Type: {application/pdf};\n" . " name=\"". factuur_email("{factuurnummer}", in($_GET['klant'])) .".pdf\"\n" . "Content-Transfer-Encoding: base64\n\n" . $Attachment . "\n\n" . "--{$Mime}\n";
  25.  
  26. /********************************************** End of File Config ********************************************/
  27.  
  28. if( mail( $Settings[ 'email' ][ 'to' ], $Settings[ 'email' ][ 'subject' ], $Message, $Headers ) )
  29. {
  30. //etc
  31. }
  32. ?>


Het punt is alleen dat hij de attachment niet altijd goed toevoegt en soms een corrupt file van maar een paar kleine kbtjes meestuurt terwijl het 500kb ongeveer moet zijn. Iemand een idee waar het mis gaat of mis kan gaan?

Alvast bedankt, Martijn  

14 antwoorden

Gesponsorde links
Offline vinTage - 11/08/2008 01:25 (laatste wijziging 11/08/2008 01:27)
Avatar van vinTage Nieuw lid Ik heb ooit eens iets gemaakt voor iemand anders, mischien dat je een stukkie eruit kan slopen wat het verschil maakt ?

  1. $eol="\r\n";
  2.  
  3. $headers = 'From: '.$_POST['naam'].'<'.$_POST['email'].'>'.$eol;
  4. $headers .= 'Reply-To: '.$_POST['naam'].'<'.$_POST['email'].'>'.$eol;
  5. $headers .= 'Return-Path: '.$_POST['naam'].'<'.$_POST['email'].'>'.$eol;
  6. $headers .= 'Message-ID: <'.time().'-'.$_POST['email'].'>'.$eol;
  7. $headers .= 'X-Mailer: PHP v'.phpversion().$eol;
  8. $headers .= "X-Sender-IP: ".$_SERVER['REMOTE_ADDR'].$eol;
  9. $headers .= 'MIME-Version: 1.0'.$eol;
  10.  
  11. $boundary = md5(time());
  12.  
  13. $fp = fopen($_FILES['file']['tmp_name'],'r');
  14. $bestand = fread($fp,$_FILES['file']['size']);
  15. fclose($fp);
  16.  
  17. $headers .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'.$eol;
  18. $headers .= 'This is a multi-part message in MIME format.'.$eol;
  19. $headers .= '--'.$boundary.$eol;
  20. //dit gaat in de body van de mail
  21. $headers .= 'Content-type: text/html; charset=iso-8859-1'.$eol;
  22. $headers .= '--'.$boundary.$eol;
  23. $headers .= $bericht;
  24. $headers .= '--'.$boundary.$eol;
  25. //de attachment
  26. $headers .= 'Content-Transfer-Encoding: 7bit'.$eol;
  27. $headers .= 'Content-type: application/octet-stream name="'.$_FILES['file']['name'].'"'.$eol;
  28. $headers .= 'Content-transfer-encoding: base64'.$eol;
  29.  
  30. $headers .= 'Content-Disposition: attachment; filename="'.$_FILES['file']['name'].'"'.$eol;
  31. $headers .= chunk_split(base64_encode($bestand ));
  32. $headers .= '--'.$boundary.$eol;
  33.  
  34. //de body param is leeg, omdat we meerdere boundarys hebben gaat het bericht nu in de header
  35. mail($naar, $_POST['onderwerp'], '', $headers);


edit: never mind, dit ging over een mail met bijlage....
Offline ThAlmighty - 11/08/2008 10:31
Avatar van ThAlmighty HTML beginner Volgens mij kan je geen pure PDF naar iemand sturen, dus moet altijd via een attachment. If so, dan moet je Vintages oplossing hebben, of allicht overwegen een Mail classes te gebruiken
Offline Martijn1989 - 11/08/2008 12:42
Avatar van Martijn1989 PHP ver gevorderde Hey ..

Dat van vintage wil niet werken. Ik merk trouwens op dat de pdf wel goed word geopend in hotmail maar niet in mijn webmail. Komt dat omdat hij verkeerd verstuurd word in de richting van splitdata etc?
Offline Guardian - 14/09/2008 19:32
Avatar van Guardian Nieuw lid @ vinTage:

Zou je mij even het volledige scriptje kunnen/willen sturen?
Dan kan ik dit eens bekijken, ik wil namelijk zelf een contact formuliertje verzenden met bijlage (.doc of .pdf)

Dank bij voorbaat
Offline vinTage - 14/09/2008 19:39
Avatar van vinTage Nieuw lid Dat complete form is met capthca en heel de resum, maar aan bovenstaande code zou je toch voldoende moeten hebben, alleen nog een formuliertje eromheen kiepen.
Offline Guardian - 14/09/2008 20:06 (laatste wijziging 14/09/2008 21:31)
Avatar van Guardian Nieuw lid VvinTage (en anderen)

Ik heb je code even trachten te implementen.

Jammer genoeg enkele problemen.

De content van mijn email wordt weergegeven maar met nog een hoop technische gegevens erbij.

De bijlage komt niet mee door jammer genoeg.

Hierbij mijn code:
Plaatscode: 26138
Offline vinTage - 14/09/2008 21:58 (laatste wijziging 14/09/2008 21:59)
Avatar van vinTage Nieuw lid enctype meegeven aan je formulier, dat moet altijd als je attachments meestuurt.

edit:
  1. <form action="<?php echo $_SERVER['REQUEST_URI']; ?>" enctype="multipart/form-data" method="post">
Offline Guardian - 14/09/2008 22:45
Avatar van Guardian Nieuw lid jammer genoeg zelfde result...

Dit is de tekst die ik in mn mail krijg:

KOMT DIT AAN?--6f79968474d348b441dc155e9bf53f17 Content-Transfer-Encoding: 7bit Content-type: application/octet-stream name="" Content-transfer-encoding: base64 Content-Disposition: attachment; filename=""

de komt dit aan is wat ik als bericht meegaf.
Offline Aar - 15/09/2008 09:32
Avatar van Aar PHP interesse Waarom zelf znou lopen klooien met headers. Gebruik anders gewoon een mail-handler zoals phpmailer.
Offline Guardian - 15/09/2008 20:01
Avatar van Guardian Nieuw lid Heb je hier een voorbeeld toepassing van.

@ vinTage, kan je me nog even verderhelpen? zou het graag op jou manier aan de praat krijgen.

Alvast bedankt
Offline Vincjenzo - 16/09/2008 11:58
Avatar van Vincjenzo Nieuw lid Probeer maar eens uit te vogelen hoe je dit aan de praat krijgt:
http://pear.php...l-mime.php
Offline Guardian - 16/09/2008 21:51
Avatar van Guardian Nieuw lid Waar kan ik dat script downloaden?
De download voor documentation zie ik wel maar, tenzijn ik ongelooflijk scheel zie , kan ik geen download vinden.

Ps: gebruikt u hem zelf?
Offline WumTol - 17/09/2008 16:38
Avatar van WumTol PHP beginner PHPMailer:
http://sourcefo...p_id=26031
Offline Guardian - 24/09/2008 23:14 (laatste wijziging 28/09/2008 19:13)
Avatar van Guardian Nieuw lid Ik ben aan de slag gegaan met phpmailer,

de mail is wederom goed verzonden maar de attachment komt niet door.

Graag een beetje hulp:

  1. require("classes/class.phpmailer.php");
  2. $mail = new PHPMailer(); // defaults to using php "mail()"
  3.  
  4. $body = "test";
  5.  
  6. $mail->From = "mijnserver@mijnserver.be";
  7. $mail->FromName = "First Last";
  8.  
  9. $mail->Subject = "PHPMailer Test Subject via mail()";
  10.  
  11. $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
  12.  
  13. $mail->MsgHTML($body);
  14.  
  15. $mail->AddAddress("mijnemail@hotmail.com", "John Doe");
  16.  
  17. $mail->AddAttachment($_FILES['file']['tmp_name']); // attachment
  18.  
  19. if(!$mail->Send()) {
  20. echo "Mailer Error: " . $mail->ErrorInfo;
  21. } else {
  22. echo "Message sent!";
  23. }


Alvast bedankt

[edit]
Kickje?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.198s