Eu tenho um sistema que em cada registro tem um ou mais anexos.
Os nomes destes anexos estão guardados no banco de dados, e os arquivos ficam na pasta anexos/ no servidor.
O usuário manda este registro via email e os anexos devem ir juntos.
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>';}
Múltiplos anexos em email
em PHP
Postado
Estes são alguns pontos do que eu preciso
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.