Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal, estou sem saber fazer uma alteração e preciso da ajuda de vocês, de ante mão já agradeço.
Tenho um script que envia o e-mail com 1 anexo normalmente com o phpmailer usando:
<input type="file" name="arquivo" class="upload" >
Porém, preciso enviar 4 anexos (fotos) e não estou conseguindo modificar este código para aceitar os arquivos enviados pelo formulário usando:
<input type="file" name="arquivo[]" class="upload" >
<input type="file" name="arquivo[]" class="upload" >
<input type="file" name="arquivo[]" class="upload" >
<input type="file" name="arquivo[]" class="upload" >
Segue o código:
<?php
// Chama a classe PHPMailer (pode baixar ela aqui: http://phpmailer.sourceforge.net)
require_once('phpmailer/class.phpmailer.php');
// Instancia o objeto $mail a partir da Classe PHPMailer
$mail = new PHPMailer();
// Recupera os dados do formulário
$nome = $_POST['nome'];
$email = $_POST['email'];
$idade = $_POST['idade'];
$altura = $_POST['altura'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$fone = $_POST['fone'];
$mensagem = $_POST['mensagem'];
$arquivo = $_FILES["arquivo"];
$tamanho = 1048576;
$tipos = array('image/jpeg', 'image/pjpeg');
// Recupera o nome do arquivo
$arquivo_nome = $arquivo['name'];
// Recupera o caminho temporario do arquivo no servidor
$arquivo_caminho = $arquivo['tmp_name'];
// Monta a mensagem que será enviada
$corpo = "
<strong>Nome:</strong> $nome<br />
<strong>E-mail:</strong> $email<br />
<strong>Idade:</strong> $idade<br />
<strong>Altura:</strong> $altura<br />
<strong>Cidade:</strong> $cidade<br />
<strong>Estado:</strong> $estado<br />
<strong>Fone:</strong> $fone<br />
<strong>Mensagem:</strong><br />
$mensagem
";// Informo o Host, From, subject e para quem o e-mail será enviado
$mail->Host = "mail.xxxx.com.br";
$mail->From = ($email);
$mail->Subject = "Modelo - ($nome)";
$mail->AddAddress(xxx@xxx.com.br');
// Informa que a mensagem deve ser enviada em HTML
$mail->IsHTML(true);
// Informa o corpo da mensagem
$mail->Body = $corpo;
// Se o e-mail destino não suportar HTML ele envia o texto simples
$mail->AltBody = $corpoSimples;
// Anexa o arquivo
$mail->AddAttachment($arquivo_caminho, $arquivo_nome);
// Tenta enviar o e-mail e analisa o resultado
if(!is_uploaded_file($arquivo['tmp_name'])){
echo "
<html>
<script>alert(\"A imagem é obrigatória\")</script>
<meta http-equiv=refresh content=0;URL=ser-modelo.php></html>
"; echo "
<html>
<script>alert(\"Só é permitido apenas imagens com tamanho máximo de 1mega\")</script>
<meta http-equiv=refresh content=0;URL=ser-modelo.php></html>
"; echo "
<html>
<script>alert(\"Só é permitido apenas imagens no formato JPEG\")</script>
<meta http-equiv=refresh content=0;URL=ser-modelo.php></html>
";
}
elseif($mail->Send()) {
echo "
<html>
<script>alert(\"$nome, sua homenagem foi enviada com sucesso!\")</script>
<meta http-equiv=refresh content=0;URL=ser-modelo.php></html>
";
}
else {
echo 'Erro:' . $mail->ErrorInfo;
}
?>Obrigado Williams Duarte!
O exemplo do tutorial não funfou, envia tudo, diz que foi com sucesso mas não envia os arquivos.
O da documentação funcionou perfeitamente, valeu mesmo pela dica!
Queria validar a extensão e tamanho do arquivo, mas não to conseguindo, podes me ajudar?
<?php
/**
* PHPMailer multiple files upload and send example
*/
$msg = '';
if (array_key_exists('arquivo', $_FILES)) {
// Create a message
// This should be somewhere in your include_path
require 'phpmailer/PHPMailerAutoload.php';
require_once('phpmailer/class.phpmailer.php');
$mail = new PHPMailer;
// Recupera os dados do formulário
$genero = $_POST['genero'];
$nome = $_POST['nome'];
$email = $_POST['email'];
$idade = $_POST['idade'];
$altura = $_POST['altura'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$fone = $_POST['fone'];
$mensagem = $_POST['mensagem'];
$arquivo = $_FILES["arquivo"];
// Monta a mensagem que será enviada
$corpo = "
<strong>Genero:</strong> $genero<br />
<strong>Nome:</strong> $nome<br />
<strong>E-mail:</strong> $email<br />
<strong>Idade:</strong> $idade<br />
<strong>Altura:</strong> $altura<br />
<strong>Cidade:</strong> $cidade<br />
<strong>Estado:</strong> $estado<br />
<strong>Fone:</strong> $fone<br />
<strong>Mensagem:</strong><br />
$mensagem
";
$mail->Host = "mail.xxxxx.com.br";
$mail->setFrom($email, $nome);
$mail->Subject = "Modelo - ($nome)";
$mail->AddAddress('modelos@xxxx.com.br');
$mail->msgHTML($corpo);
//Attach multiple files one by one
for ($ct = 0; $ct < count($_FILES['arquivo']['tmp_name']); $ct++)
{
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['arquivo']['name'][$ct]));
$filename = $_FILES['arquivo']['name'][$ct];
if (move_uploaded_file($_FILES['arquivo']['tmp_name'][$ct], $uploadfile))
{
$mail->addAttachment($uploadfile, $filename);
}
else
{
$msg .= 'Failed to move file to ' . $uploadfile;
}
}
if (!$mail->send()) {
echo "
<html>
<script>alert(\"$nome, Seu e-mail não foi enviado corretamente, tende novamente mais tarde.\")</script>
<meta http-equiv=refresh content=0;URL=ser-modelo.php>
</html>
";
} else {
echo "
<html>
<script>alert(\"$nome, seus dados foram enviados com sucesso, em breve entraremos em contato\")</script>
<meta http-equiv=refresh content=0;URL=ser-modelo.php>
</html>
";
}
}
?>Com a classe SplFileInfo você verifica a extensão
e com com finfo faz a validação mais profunda já que é pelo tmp_name, dessa Não tem como burlar o MIME da imagem
e o tamanho é pelo size.
só da um print_r($_FILES['arquivo']) vai te mostrar todos os dados para uma validação completa
Mais uma vez obrigado Willians,
Mas confesso meu pouco entendimento, com isso não consegui validar a extensão e tamanho neste scripts, tentei de várias formas.
Gostaria se possível você ou outro fera, fizesse as alterações nele para inclusive servir didaticamente para os iniciante como eu.
Valeu de novo!!
tutorial
http://www.devmedia.com.br/enviando-e-mail-com-anexos-usando-o-phpmailer/12113
Que é basicamente isso
Também tem o exemplo na própria documentação.
https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_multiple_file_upload.phps