Jump to content

Enviar Formulário como PDF pelo SENDGRID


Douken

Recommended Posts

Bom dia.

Eu quero submeter o conteúdo de um formulário como um anexo em PDF, através do SENDGRID.

O fluxo que pretendo é o seguinte:

1. Um cliente preenche um formulário no meu site.

2. Carrega no botão submeter.

3. É gerado um PDF através do FPDF.

4. Um email é enviado para mim, com algum texto e o PDF gerado pelo FPDF, como anexo, através do SENDGRID.

 

Deixo aqui algum do código:

<?php

if(isset($_POST['sendemail']))
{
    
    require('fpdf/fpdf.php');
    $title = 'Inscrição';
    $name = $_POST['name'];
    $email_id = $_POST['email'];
    $age = $_POST['age'];
    $aulas = $_POST['aulas'];
    $experience = $_POST['experiencia-dança'];
    $conhecimento = $_POST['conhecimento'];
    $comentario = $_POST['comentario'];

(...)

 

    $pdf = new FPDF();
    $pdf -> AddPage();
    $pdf->SetTitle($title);

 (...)

 

$pdf->Output();

(...)

   $sendgrid = new \SendGrid($API_KEY);
   $email = new \SendGrid\Mail\Mail();
   $email->setFrom("********@gmail.com", "***** SAMA");
   $email->setSubject("Email de teste");
   $email->addTo("*****@gmail.com", "****SAMA");
   $email->addContent("text/plain", $comentario);

   If($sendgrid->send($email));
        {
            $msg = "Obrigado pelo seu contacto!";
        }

Com este código, o email é enviado, mas o anexo não.

Quando incluo as seguintes linhas de código, o email deixa de ser enviado:

    $attachment = $pdf;
    $file_encoded = base64_encode(file_get_contents($attachment));
    $email->addAttachment(
    $file_encoded,
    "application/text",
    "test.pdf",
    "attachment"
    );  

Alguém me consegue ajudar?

Obrigado

Link to post
Share on other sites

Pelo que vejo do teu codigo estas a definir a variavel $attachment = $pdf e $pdf é uma instancia do FPDF, pode ser por isso.

Tenta:

$attachment = $pdf->Output('S'); //S: return the document as a string.

E depois ao fazer o base64 podes "ignorar" o file_get_contents

 $file_encoded = base64_encode($attachment);

Nunca usei o Sendgrid por isso não sei se os parametros estão bem, mas é tentar =D

Edited by eSkiSo
  • Vote 1

Os meus programas em http://www.eskiso.net

Link to post
Share on other sites
8 minutos atrás, eSkiSo disse:

Pelo que vejo do teu codigo estas a definir a variavel $attachment = $pdf e $pdf é uma instancia do FPDF, pode ser por isso.

Tenta:


$attachment = $pdf->Output('S'); //S: return the document as a string.

E depois ao fazer o base64 podes "ignorar" o file_get_contents


 $file_encoded = base64_encode($attachment);

Nunca usei o Sendgrid por isso não sei se os parametros estão bem, mas é tentar =D

Obrigado pela resposta, mas já consegui resolver da seguinte forma:

$pdfdoc = $pdf->Output("pdf.pdf", "S");

$att1 = new \SendGrid\Mail\Attachment();
$att1->setContent($pdfdoc);
$att1->setType("application/octet-stream");
$att1->setFilename(basename("pdf.pdf"));
$att1->setDisposition("attachment");
$email->addAttachment($att1);

Tive de remover o $file_encoded, uma vez que não me estava a deixar criar o pdf.

Obrigado.

  • Vote 1
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.