generate and send email with pdf file attached with php

Question:

In my PHP script I need to generate a PDF file and send it via email. I have already managed to send an attached file via email using phpmailer and generate a PDF in the browser using fpdf.

The problem is that I can't attach the PDF to the email, as it's not being saved where it should (on the winscp server).

$pdf->Output('f', 'arquivao.pdf');
$mail->AddAttachment('arquivao.pdf');
$enviado = $mail->Send();

Answer:

Hi Lucca, I would instruct you to create a temporary file and, after uploading, delete it from the server.

I took the liberty of including a function to generate the random name to complete the example.

function gerarIdentificadorLink($senha = 0, $tamanho = 20, $maiusculas = true, $numeros = true, $simbolos = false){
        // Caracteres de cada tipo
        $lmin = 'abcdefghijklmnopqrstuvwxyz';
        $lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $num = '1234567890';
        $simb = '!@#$%*-';
        // Variáveis internas
        $retorno = '';
        $caracteres = '';
        // Agrupamos todos os caracteres que poderão ser utilizados
        $caracteres .= $lmin;
        if ($maiusculas) $caracteres .= $lmai;
        if ($numeros) $caracteres .= $num;
        if ($simbolos) $caracteres .= $simb;
        // Calculamos o total de caracteres possíveis
        $len = strlen($caracteres);
        for ($n = 1; $n <= $tamanho; $n++) {
        // Criamos um número aleatório de 1 até $len para pegar um dos caracteres
        $rand = mt_rand(1, $len);
        // Concatenamos um dos caracteres na variável $retorno
        $retorno .= $caracteres[$rand-1];
        }
        return $retorno;
}

/* Gera a string aleatoria */
$identificador = gerarIdentificadorLink();

/* Indica o caminho destino */
$Destino = '/var/www/html/';

/* Indica o nome temporário do arquivo */
$Arquivo = 'Arquivao_'.$identificador.'.pdf';

/* Cria a pasta temporária para armazenamento do arquivo */
if (!file_exists($Destino . $identificador)) {
   mkdir($Destino . $identificador);  
   $Destino = $Destino . $identificador . '/';
}

/* monta o caminho completo do arquivo */
$caminhoCompletoArquivo = $Destino . $Arquivo;

(...)

/* executa a geração do seu PDF*/
$pdf->Output('f', $caminhoCompletoArquivo);

/* adiciona o arquivo físico ao e-mail */
$mail->AddAttachment($caminhoCompletoArquivo);

/* envia o e-mail */
$enviado = $mail->Send();

/* exclui o arquivo pdf do servidor */
if (file_exists ($ArquivoCaminhoCompleto)) {
   unlink($ArquivoCaminhoCompleto);
}

I hope it helps.

Scroll to Top