codeigniter send pdf file as email attachment

2020-04-17 05:42发布

问题:

I am generating pdf files on fly using TCPDF. By using TCPDF i am getting raw file with base64 encoded now i want to send this raw data as email attachment using codeigniter email helper function.

How can do this?

回答1:

Took my a while to find the answer, hope it helps anyone in the future:

    // Get email address and base64 via ajax
    $email = $this->input->post('email');
    $base64 = $this->input->post('base64');

    $base64 = str_replace('data:application/pdf;base64,', '', $base64);
    $base64 = str_replace(' ', '+', $base64);

    $data = base64_decode($base64);

    // Locally emails do now work, so I use this to connect through my gmail account to send emails
    $config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => 'MyEmailAddress@gmail.com',
        'smtp_pass' => 'MyEmailPassword',
        'mailtype'  => 'html', 
        'charset'   => 'iso-8859-1'
    );

    $this->load->library('email', $config);

    $this->email->set_newline("\r\n");
    $this->email->to($email);
    $this->email->from('noreply@whatever.ca', 'base64');
    $this->email->subject('base64');
    // Using the string_attach($str_file, $filename, $mime, $disposition = 'attachment')
    // function located in CodeIgniter\application\libraries\Email.php
    $this->email->string_attach($data, 'base64.pdf', 'application/pdf');

    $this->email->send();


回答2:

 /*its batter to make function*/ 

 /*-------COPY THIS CODE---- */

  $newFile  = 'Path/to/save/filename.pdf';
  $obj = new $this->pdf;
  $obj->SetSubject('BLAH BLAH'); // set document information
  $obj->SetKeywords('Blah, Blah, Blah'); 
  $obj->AddPage(); // add a page
  $obj->SetFont('helvetica', '', 6);
  $obj->writeHTML("Your text goes here", true, false, false, false, '');
  $obj->Output($newFile, 'F'); //Close and output PDF document

 /*-------SENDING EMAIL---- */

 $this->load->library('email');
 $this->email->from('noreply@example.com', 'Example');
 $this->email->to('to@example.com');
 $this->email->subject('Subject Goes Here');
 $this->email->message('Message goes here');
 $this->email->attach($newFile);
 $this->email->send();


回答3:

You have to save the file before attaching it with the email

      $obj = new $this->pdf;
      $obj->SetSubject('BLAH BLAH'); // set document information
      $obj->SetKeywords('Blah, Blah, Blah'); 
      $obj->AddPage(); // add a page
      $obj->SetFont('helvetica', '', 6);
      $obj->writeHTML("Your text goes here", true, false, false, false, '');
      $obj->Output('Path/to/save/filename.pdf', 'F'); //Close and output PDF document

And than send the email like this

     $this->load->library('email');
     $this->email->from('noreply@example.com', 'Example');
     $this->email->to('to@example.com');
     $this->email->subject('Subject Goes Here');
     $this->email->message('Message goes here');
     $this->email->attach('Path/to/saved/filename.pdf');
     $this->email->send();


回答4:

  $newFile  = 'Path/to/save/filename.pdf';
  $obj = new $this->pdf;
  $obj->SetSubject('BLAH BLAH'); // set document information
  $obj->SetKeywords('Blah, Blah, Blah'); 
  $obj->AddPage(); // add a page
  $obj->SetFont('helvetica', '', 6);
  $obj->writeHTML("Your text goes here", true, false, false, false, '');
  $obj->Output($newFile, 'F'); //Close and output PDF document