Email PDF Attachment with PHP Using FPDF

前端 未结 4 2108
悲哀的现实
悲哀的现实 2020-12-04 10:40

I want to email a PDF as an attachment that was created using FPDF. My code looks like this, but the attachment never comes through.



        
相关标签:
4条回答
  • 2020-12-04 10:55

    This ended up working for me:

    <?php
    require('lib/fpdf/fpdf.php');
    
    $pdf = new FPDF('P', 'pt', array(500,233));
    $pdf->AddFont('Georgiai','','georgiai.php');
    $pdf->AddPage();
    $pdf->Image('lib/fpdf/image.jpg',0,0,500);
    $pdf->SetFont('georgiai','',16);
    $pdf->Cell(40,10,'Hello World!');
    
    // email stuff (change data below)
    $to = "myemail@example.com"; 
    $from = "me@example.com"; 
    $subject = "send email with pdf attachment"; 
    $message = "<p>Please see the attachment.</p>";
    
    // a random hash will be necessary to send mixed content
    $separator = md5(time());
    
    // carriage return type (we use a PHP end of line constant)
    $eol = PHP_EOL;
    
    // attachment name
    $filename = "test.pdf";
    
    // encode data (puts attachment in proper format)
    $pdfdoc = $pdf->Output("", "S");
    $attachment = chunk_split(base64_encode($pdfdoc));
    
    // main header
    $headers  = "From: ".$from.$eol;
    $headers .= "MIME-Version: 1.0".$eol; 
    $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";
    
    // no more headers after this, we start the body! //
    
    $body = "--".$separator.$eol;
    $body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
    $body .= "This is a MIME encoded message.".$eol;
    
    // message
    $body .= "--".$separator.$eol;
    $body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
    $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
    $body .= $message.$eol;
    
    // attachment
    $body .= "--".$separator.$eol;
    $body .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
    $body .= "Content-Transfer-Encoding: base64".$eol;
    $body .= "Content-Disposition: attachment".$eol.$eol;
    $body .= $attachment.$eol;
    $body .= "--".$separator."--";
    
    // send message
    mail($to, $subject, $body, $headers);
    
    ?>
    
    0 讨论(0)
  • 2020-12-04 10:57

    I think you have a superfluous command there. You are using the string variant of the Output() command:

    $doc = $pdf->Output('test.pdf', 'S');
    

    Then you are performing a file_get_contents() on it:

    $attachment = chunk_split(base64_encode(file_get_contents($doc)));
    

    It is not a file, it is a file in a string, as file_get_contents() would return if $doc was a filename.

    Just reduce that down to:

    $attachment = chunk_split(base64_encode($doc));
    

    Then see if any more errors occur.

    0 讨论(0)
  • 2020-12-04 11:01

    if you use PHPMailer

    $attachment= $pdf->Output('attachment.pdf', 'S');
    
    $mailer->AddStringAttachment($attachment, 'attachment.pdf');
    

    Enjoy

    0 讨论(0)
  • 2020-12-04 11:02
    Create one pdf file name as testing.pdf  
     <?php 
        //define the receiver of the email 
        $to = 'elangovan2me@gmail.com'; 
    
        //define the subject of the email 
        $subject = 'Test email with attachment'; 
    
        //create a boundary string. It must be unique 
        //so we use the MD5 algorithm to generate a random hash 
        $random_hash = md5(date('r', time())); 
    
        //define the headers we want passed. Note that they are separated with \r\n 
        $headers = "From: elangovan2me@gmail.com\r\nReply-To: meeetcity@gmail.com";
    
        //add boundary string and mime type specification 
        $headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
    
        //read the atachment file contents into a string,
        //encode it with MIME base64,
        //and split it into smaller chunks
        $attachment = chunk_split(base64_encode(file_get_contents('testing.pdf'))); 
    
        //define the body of the message. 
        ob_start(); //Turn on output buffering 
        ?> 
        --PHP-mixed-<?php echo $random_hash; ?>  
        Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 
    
        --PHP-alt-<?php echo $random_hash; ?>  
        Content-Type: text/plain; charset="iso-8859-1" 
        Content-Transfer-Encoding: 7bit
    
        Hello World!!! 
        This is simple text email message. 
    
        --PHP-alt-<?php echo $random_hash; ?>  
        Content-Type: text/html; charset="iso-8859-1" 
        Content-Transfer-Encoding: 7bit
    
        <h2>Email Pdf File Attachements</h2> 
        <p>This is something with <b>HTML</b> formatting.</p> 
    
        --PHP-alt-<?php echo $random_hash; ?>-- 
    
        --PHP-mixed-<?php echo $random_hash; ?>  
        Content-Type: application/pdf; name="attachment.pdf"  
        Content-Transfer-Encoding: base64  
        Content-Disposition: attachment  
    
        <?php echo $attachment; ?> 
        --PHP-mixed-<?php echo $random_hash; ?>-- 
    
        <?php 
        //copy current buffer contents into $message variable and delete current output buffer 
        $message = ob_get_clean(); 
        //send the email 
        $mail_sent = @mail( $to, $subject, $message, $headers ); 
        //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
        echo $mail_sent ? "Mail sent" : "Mail failed"; 
    ?>
    
    0 讨论(0)
提交回复
热议问题