[PHP] Aangemaakte .pdf direct mailen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Via een php-script genereer ik een pdf-bestand die ik niet open in de browser maar wegschrijf op de server.
Direct daarna wil ik dit aangemaakte bestand mailen met de standaard mail-class van pear.
Het aanmaken van het document werkt prima, het mailen gaat goed op de attachment na.

De eerste keer wordt de attachment niet meegestuurd terwijl de pdf wel op de server is aangemaakt.
Als ik direct nogmaals de mail verstuur op precies dezelfde manier verstuurd hij wel de attachment mee omdat deze al bestond op de server.

Het snel achter elkaar aanmaken en versturen ven een bestand werkt dus niet, maar het werkt wel als het bestand al bestaat.

Iemand enig idee?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zie in regel 32 dat er een ; mist. Daarnaast zou ik je regex nog even nakijken

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
En als het idd aan de snelheid waarmee het achter elkaar gebeurt ligt kun je altijd even een pauze inlassen met sleep() :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Heb je hier misschien wat aan (pluk het van php.net uit de reacties)
When adding a file you must open it and read it with fopen and add the content to the message:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$path = "whatever the path to the file is";
$fp = fopen($path, 'r');
do //we loop until there is no data left
{
       $data = fread($fp, 8192);
       if (strlen($data) == 0) break;
       $content .= $data;
     } while (true);
$content_encode = chunk_split(base64_encode($content));
$message .= $content_encode . "\n";
$message .= "--" . $boundary . "\n";
?>

Add the needed headers and send!
PHP:
1
2
3
4
5
6
<?php
$headers  = "From: \"Me\"<me@here.com>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
mail('myAddress@hotmail.com', 'Email with attachment from PHP', $message, $headers);
?>

[ Voor 13% gewijzigd door Huppie op 11-04-2005 15:19 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Hoe maak je de PDF aan?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 11 april 2005 @ 15:16:
Ik zie in regel 32 dat er een ; mist. Daarnaast zou ik je regex nog even nakijken
:?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met de class van.............. http://www.ros.co.nz/pdf/

Acties:
  • 0 Henk 'm!

Verwijderd

Het is heel makkelijk om fouten te zien als er geen codes staan. Misschien gebruik je de class compleet verkeerd, heb je die aangepast, etc etc. Als je eerst een mail verstuurd en daarna pas het bestand aanmaakt wil het zeker niet lukken de eerste keer, etc.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 11 april 2005 @ 15:26:
Het is heel makkelijk om fouten te zien als er geen codes staan. Misschien gebruik je de class compleet verkeerd, heb je die aangepast, etc etc. Als je eerst een mail verstuurd en daarna pas het bestand aanmaakt wil het zeker niet lukken de eerste keer, etc.
Ten eertse, leg mij regel 1 nog eens uit aub. Ben ik dom? Moet ik een script posten ofzo? Ik snap je niet. (en dit in combinatie met die fout op regel 32)

Ten tweede, ik maak natuurlijk eerst mijn bestand aan voordat ik hem mail als attachment. Anders valt er weinig te sturen natuurlijk.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ja, je moet je script posten, anders wordt dit een topic waarin mensen alleen maar kunnen raden wat je fout doet. Geef wat relevante broncode, anders zie ik geen heil in dit topic. :)

Zie ook P&W FAQ - De "quickstart". :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Het is een synische cynische reactie om aan te geven dat we niet telepatisch zijn. Je kan niet zeggen wat er fout gaat zonder de code te zien.

Als je het bericht eens output en kijkt of de attachment wle toegevoegd word aan de mail de eerste keer. Heb je een file_exists() gebruikt om zeker te weten dat de pdf bestaat voordat je de eerste keer probeerd te mailen?

[ Voor 3% gewijzigd door Verwijderd op 11-04-2005 15:47 ]


Acties:
  • 0 Henk 'm!

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 07-09 11:44

Bergen

Spellingscontroleur

Verwijderd schreef op maandag 11 april 2005 @ 15:33:
[...]

Ten eertse, leg mij regel 1 nog eens uit aub. Ben ik dom? Moet ik een script posten ofzo? Ik snap je niet. (en dit in combinatie met die fout op regel 32)
Hij zegt (cynisch, of hoe noem je dat) inderdaad dat we toch een stuk script moeten zien om je te helpen aan een oplossing. Zonder code kunnen we niet zien wat er mis gaat.
edit: grrrr

[ Voor 3% gewijzigd door Bergen op 11-04-2005 15:39 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, ik heb het door, excuus.

Mijn pdf wordt uiteindelijk gegenereerd met:
PHP:
1
2
3
4
5
6
$factuur = "$nummer"."__"."$factuurnummer".".pdf";

$pdfcode = $pdf->output();
$fp = fopen("factuur/$factuur", 'wb');
fwrite($fp,$pdfcode);
fclose($fp);


Daarna wordt hij verstuurd met de standaard mail-class van pear:

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
require_once 'Mail/Mail.php';
require_once 'Mail/mime.php';

$crlf = "\n";
$hdrs = array(
'From'    => $afzender,
'Subject' => $subject,
'X-Generated-By' => 'Me'
);

$inhoud .= "\n\n\n\n\n";
$inhoud .= "---------------------------------------------------------------------------------------";
$inhoud .= "\n";
$inhoud .= "Disclaimer";

        
$mime = new Mail_mime($crlf);
$mime->setTXTBody($inhoud);

if($mime->addAttachment("factuur/$factuurPdf")) {
        
    $body = $mime->get();
    $hdrs = $mime->headers($hdrs);

    $mail =& Mail::factory('mail');
            
                if ($mail->send($to, $hdrs, $body)) {
                   $foutMelding[] = "<font color=\"#737373\"><i><b>Factuur $factuurnummer is verzonden!</b></i></font>";
                }
}


Tussen het aanmaken en het versturen heb ik een check met file_exists(), deze geeft aan dat het document niet is aangemaakt, maar als ik op mijn webserver ga kijken, dan is hij wel aangemaakt.

[ Voor 15% gewijzigd door Verwijderd op 11-04-2005 15:54 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
include_once '../pdf/class.ezpdf.php';
...
$filename = '../pdf/pdf_output/invoice_'.date('YmdHis').'.pdf';
$pdfcode = $pdf->ezOutput();
$handle = fopen($filename,'wb');
fwrite($handle, $pdfcode);
fclose($handle);

// Create mail
...
$attachment = $mail->getFile($filename);
$mail->addAttachment($attachment, 'factuur.pdf', 'application/pdf');
...

unlink($filename);

Ik gebruik dezelfde PDF-class, maar een andere mail-class. Maar als de mail-classes ongeveer hetzelfde werken, mis ik bij jou nog een mail->getFile o.i.d., waarna het bestand ge-attached kan worden. :)

[ Voor 10% gewijzigd door X-Lars op 11-04-2005 16:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Tussen het aanmaken en het versturen heb ik een check met file_exists(), deze geeft aan dat het document niet is aangemaakt, maar als ik op mijn webserver ga kijken, dan is hij wel aangemaakt.
En Voila!

Zodra het wil attachen bestaat het bestand nog niet (in ieder geval volgens PHP).
Als je dan nog een keer draait, bestaat het dan wel wel? Zo niet, is je file_exists() niet goed. Anders zou ik even een sleep() ofzo in zetten.

Acties:
  • 0 Henk 'm!

  • megamuch
  • Registratie: Februari 2001
  • Laatst online: 08-12-2024

megamuch

Tring Tring!

Als de file via File_exists er niet is, dan zou het verstandig zijn om ff een sleep (seconde of 2) toe te voegen na het genereren van de PDF. De server is waarschijnlijk nog bezig met het schrijven naar hdd.

Dus na het genereren van de pdf, ff een pauze invoegen. Dat zou imho moeten werken.

ervanuitgaande dat je mail class wel goed werkt

Verstand van Voip? Ik heb een leuke baan voor je!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Inderdaad, als ik nogmaals op de knop verzend druk, dan doet hij het wel.
Ik heb al een sleep van 4 seconden geprobeerd en dat werkt helaas ook niet.

Natuurlijk kan ik het script direct nog eens draaien, maar dan verstuurd hij 2 mailtjes. 1 zonder attachment en 1 met. En dat is nu ook weer niet de bedoeling.

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Misschien iets langer laten wachten (eens in de seconden controleren of ie al bestaat misschien?)
PHP:
1
2
3
while( ! file_exists( "factuur/$factuurPdf" ) ){
sleep(1);
}


edit:
typo :X

[ Voor 16% gewijzigd door Huppie op 11-04-2005 16:30 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit laatste heb ik net gedaan, maar hij gaat niet bestaan. Al wacht ik een minuut.

Kan het eraan liggen dat ik mijn pdf aanmaak in een modaldialog???
PHP:
1
2
3
4
5
6
echo ("
<script language=\"JavaScript\">
fac = window.showModelessDialog('makedocument.php', window.parent.parent, 'scroll:no;dialogWidth:300px;dialogHeight:150px;help:no;status:no');

fac.close();
</script>");
Ik zie namelijk net dat deze box zich pas laat "zien" als de sleep van een paar seconden is afgelopen, die ik NA bovenstaand script heb ingevoegd.

????

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Verwijderd schreef op maandag 11 april 2005 @ 16:17:
Kan het eraan liggen dat ik mijn pdf aanmaak in een modaldialog???
Als je deze echo in hetzelfde script doet als het script waarin je de mail wilt versturen wel ja.

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als je deze echo in hetzelfde script doet als het script waarin je de mail wilt versturen wel ja.
En waarom maakt dat uit dan? Nog niet eerder meegemaakt, vandaar de vraag.

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Pas aan het einde van het script zal de browser alles volledig weer kunnen geven (en dus de popup openen).

Het is dus makkelijker om in het popup-venster na het genereren van de .pdf de gebruiker door te sturen naar de pagina die het print. (Of natuurlijk in het popup venster én genereren én mailen.)

edit:
Of begrijp ik het verkeerd?

[ Voor 7% gewijzigd door Huppie op 11-04-2005 16:28 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 15-09 18:04

TrailBlazer

Karnemelk FTW

ik heb het idee dat het bestand nog in gebruik is door het PHP script. Het is dan wel aanwezig maar er is nog een open filehandle wat eigenlijk niet zou kunnen als je hem afsluit, maar mischien kan je daar eens op gaan zoeken

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
TrailBlazer schreef op maandag 11 april 2005 @ 16:29:
ik heb het idee dat het bestand nog in gebruik is door het PHP script. Het is dan wel aanwezig maar er is nog een open filehandle wat eigenlijk niet zou kunnen als je hem afsluit, maar mischien kan je daar eens op gaan zoeken
Dit lijkt me stug aangezien file_exists() wel true terug zou moeten geven. is_readable() daarentegen niet ;)

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
(Of natuurlijk in het popup venster én genereren én mailen.)
Nou dit is het dus uiteindelijk geworden. Dit werkt wel.

Thanx, Dat van die echo wist ik niet en dus is het ook niet zo vreemd dat het niet werkte. Nu wel!
Pagina: 1