Medeno
Medeno

Reputation: 171

How do I send a FPDF doc using PHPMailer

I would like to merge or link the FPDF and PHPMailer code so that a document is generated and sent by email. I do not want to save the file. I am unable to find a solution. Below is the working code for FPDF and also for PHPMailer. Unable to merge the two together.

FPDF website says to do this

$mail = new PHPMailer();
...
$doc = $pdf->Output('', 'S');
$mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
$mail->Send();

FPDF code:

require_once('fpdf/fpdf.php');
$fpdf = new FPDF();
$text="test";

$fpdf->SetMargins(0, 0, 0);
$fpdf->SetAutoPageBreak(true, 0);

define('FPDF_FONTPATH', 'font/');

$fpdf->AddFont('Verdana', '','verdana.php'); // Standard Arial

$fpdf->addPage('L');

$fpdf->Image('images/certificate.jpg', 0, 0, 297, 210);

$fpdf->SetFont('Verdana', '');
$fpdf->SetFontSize(28);
$fpdf->SetTextColor(32, 56, 100); 
$fpdf->SetXY(108, 52); //
$fpdf->Cell(80, 6, $text, 0,0, 'C'); 

$fpdf->Output('Filename.pdf', 'i');

PHPMailer code:

require 'phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->IsSMTP();                                // Set mailer to use SMTP
$mail->Host = 'gator3095';                      // Specify main and backup server
$mail->Port = 587;                              // Set the SMTP port
$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 = '[email protected]';
$mail->FromName = 'John Doe';
$mail->AddAddress('[email protected]', '');  // Add a recipient
$mail->IsHTML(true);                             // Set email format to HTML

$mail->Subject = 'subject';
$mail->Body    = 'message body';
$mail->AltBody = 'messge body';
$mail->AddAttachment("c:/temp/test.php", "test.php");  

if(!$mail->Send()) {
   echo 'Message could not be sent.';
   echo 'Mailer Error: ' . $mail->ErrorInfo;
   exit;
}
echo 'Message has been sent';

Upvotes: 0

Views: 4253

Answers (1)

Veve
Veve

Reputation: 6758

Replace $fpdf->Output('Filename.pdf', 'i'); by $fpdf->Output('Filename.pdf', 'S'); to save your PDF on the harddrive instead of sending it directly to the browser (as explained in the doc).

Then call your FPDF code to generate the PDF file in the begining or before your PHPmailer.php code, replace $mail->AddAttachment("c:/temp/test.php", "test.php"); by $mail->AddAttachment("[...the exact place where your file is..]/Filename.pdf", "Filename.pdf");

And finally, before your last echo, add unlink('Filename.pdf'); to delete the temporary PDF file you've just sended.

Upvotes: 3

Related Questions