Jump to content
Gustavo2503

Múltiplos anexos em email

Recommended Posts

Estes são alguns pontos do que eu preciso

  1. Eu tenho um sistema que em cada registro tem um ou mais anexos.
  2. Os nomes destes anexos estão guardados no banco de dados, e os arquivos ficam na pasta anexos/ no servidor. 
  3. O usuário manda este registro via email e os anexos devem ir juntos.
  4. Eu estou usando a função do PHP mail().

Objetivo: Enviar um email com um ou mais anexos

Problema: Este código só está enviando um anexo, que é o último anexo que a query pega.

OBS.: Eu não entendo de boundary e de anexos por email, eu peguei esse código na internet, mas eu fiz algumas alterações nele, porque no código original só mandava um anexo.

$assunto = "Registros";
$boundary = "XYZ-".md5(date("dmYis"))."-ZYX";

// cabeçalho do email
$cabecalho = "MIME-Version: 1.0" . PHP_EOL;
$cabecalho .= "Content-Type: multipart/mixed; ";
$cabecalho .= "boundary=" . $boundary . PHP_EOL;
$cabecalho .= "$boundary" . PHP_EOL;

$msg = "";
// Anexos
$sql = " SELECT A.LOCAL, A.ARQUIVO
 FROM TB_ANEXOS AS A
  LEFT JOIN TB_REGISTROS AS R ON (A.ID_REGISTRO = R.ID)
 WHERE R.ID = $ID ";
$resultado = mysqli_query($link, $sql);
if ($resultado){
    while ($dados = mysqli_fetch_array($resultado, MYSQLI_ASSOC)){
        $LOCAL = $dados['LOCAL'];
        $ARQUIVO_NAME = $dados['ARQUIVO'];
        $path = 'anexos/'.$LOCAL;
        $fileType = mime_content_type( $path );

        // Pegando o conteúdo do arquivo
        $fp = fopen( $path, "rb" ); // abre o arquivo enviado
        $anexo = fread( $fp, filesize( $path ) ); // calcula o tamanho
        $anexo = chunk_split(base64_encode( $anexo )); // codifica o anexo em base 64
        fclose( $fp ); // fecha o arquivo

        $msg.= "Content-Type: ". $fileType ."; name=\"". $ARQUIVO_NAME . "\"" . PHP_EOL;
        $msg.= "Content-Transfer-Encoding: base64" . PHP_EOL;
        $msg.= "Content-Disposition: attachment; filename=\"". $ARQUIVO_NAME . "\"" . PHP_EOL;
        $msg.= "$anexo" . PHP_EOL;
        $msg.= "--$boundary" . PHP_EOL;
    }
}

$msg.= "--$boundary" . PHP_EOL;
$msg.= "Content-Type: text/html; charset='utf-8'" . PHP_EOL;
$msg.= "
<!doctype html>
<html lang='pt-br'>
<head>
    <meta charset='UTF-8'>
    <meta name='viewport' content='width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'>
    <meta http-equiv='X-UA-Compatible' content='ie=edge'>
    <title>$assunto</title>
    <style>
    h2, b, legend {
        color: #2d2d2d;
    }
    </style>
</head>
<body>
  <p>CORPO DO EMAIL</p>
</body>
</html>
";
$msg.= "--$boundary" . PHP_EOL;

if(mail($para, $assunto, $msg, $cabecalho)) {
	echo "<p>Email enviado com sucesso</p>";
} else {
    echo '<p style="color: #f00">Erro!</p>';
}

 

Share this post


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

  • Similar Content

    • By Web.Developer
      { "message":"encontrado.", "resultados":[ { "transacao":"23424324324", }, { "transacao":"2342342432424", } ] } preciso montar um API assim na onde está transacao tem que vim do banco de dados, depois retorna para as pessoas a array dessa formula
    • By david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      Todas as regras de negócio são implementadas como Stored Procedures.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

    • By david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.