Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, sou iniciante no PHP e qualquer tipo de linguagem de programação. Estou a fazer um site para um projeto e necessitava de adicionar um formulário de contacto/orçamento com possibilidade de anexar ficheiros. A parte do formulário de contacto já está a funcionar, já chega ao email a informação, mas agora não sei como fazer a etapa do anexar ficheiros. Alguém pode me ajudar por favor? Obrigado desde já!
<?php
require_once("php/PHPMailer.php");
require_once("php/PHPMailerAutoload.php");
require_once("php/SMTP.php");
require_once("php/Exception.php");
require_once("php/POP3.php");
$mail = new PHPMailer\PHPMailer\PHPMailer();
//Encontrar erros
$mail->SMTPDebug = 2;
$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->Port = 587;
$mail->SMTPSecure = TLS;
$mail->Username = '****@gmail.com';
$mail->Password = '*******';
// PAP - dados do remetente
$mail->Sender = "*****@gmail.com";
$mail->From = "*****@gmail.com" ;
$mail->FromName = "Cliente";
// PAP - dados do destinatário
$mail->AddAddress('*****@gmail.com', 'Nome - Recebe1');
$mail->IsHTML(true);
$mail->CharSet = 'utf-8';
// PAP - Mensagem
$mail->Subject = "Formulário de Contato";
$mail->Body .= " Nome: ".$_POST['nome']."<br>";
$mail->Body .= " E-mail: ".$_POST['email']."<br>";
$mail->Body .= " Assunto: ".$_POST['assunto']."<br>";
$mail->Body .= " Mensagem: ".nl2br($_POST['mensagem'])."<br>";
// PAP - Envio
$enviado = $mail->Send();
$mail->ClearAllRecipients();
if ($enviado) {
echo "E-mail enviado com sucesso!"; echo "Não foi possível enviar o e-mail.";
echo "<br><b>Detalhes do erro:</b> " . $mail->ErrorInfo;
}
?>>
2 horas atrás, igu disse:
Olá
eu anexo assim:
$mail->AddAttachment("diretorio/arquivo");
Obrigado, já consegui anexar no minimo um ficheiro, mas gostaria de anexar mais do que um, já estive a pesquisar e dizem para colocar vários AddAttachment, tipo assim:
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
Outros dizem para colocar uma variável count (não sei se estou a falar os termos corretos, peço desculpa).
$arquivo = $_FILES["arquivo"];
$anexos = count($arquivo['name']);
$count = count($arquivo['tmp_name']['name']);
for ($i = 0; $i < $anexos; $i++) {
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
}
<input type="file" id="arquivo" name="arquivo" multiple="">
Não sei o que está errado, quando coloco os vários anexos, no e-mail apenas chega um.
Poderiam me dar uma explicação sobre o assunto e mostrar o que está errado por favor ?>
2 horas atrás, Piim disse:
Obrigado, já consegui anexar no minimo um ficheiro, mas gostaria de anexar mais do que um, já estive a pesquisar e dizem para colocar vários AddAttachment, tipo assim:
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
Outros dizem para colocar uma variável count (não sei se estou a falar os termos corretos, peço desculpa).
$arquivo = $_FILES["arquivo"];
$anexos = count($arquivo['name']);
$count = count($arquivo['tmp_name']['name']);
for ($i = 0; $i < $anexos; $i++) {
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);
}
<input type="file" id="arquivo" name="arquivo" multiple="">
Não sei o que está errado, quando coloco os vários anexos, no e-mail apenas chega um.
Poderiam me dar uma explicação sobre o assunto e mostrar o que está errado por favor ?
*O seu input deve ser name="arquivo[]".*
Olhe aqui a documentação de envio de vários anexos do próprio PHPMailer com exemplo:
[https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_multiple_file_upload.phps](https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_multiple_file_upload.phps)>
21 horas atrás, Gleyson Abreu disse:
O seu input deve ser name="arquivo[]".
Olhe aqui a documentação de envio de vários anexos do próprio PHPMailer com exemplo:
https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_multiple_file_upload.phps
Eu utilizei o exemplo dado e mudei o input, recebo o e-mail mas não recebo os anexos. No Debug = 3 não aparece nenhum erro. O que posso mudar ? Obrigado e peço desculpa.
---
Já consegui anexar os ficheiros, obrigada. Só me falta colocar um aviso na própria página, como um alert, quando o e-mail é enviado. Como faço isso ?
Já tenho isto assim, mas dá erro que não encontra a página para reencaminhar.
if ($enviado) {
$msg = "A sua mensagem foi enviada com sucesso!";
echo "<script>alert('$msg');window.location.assign('contacto.html');</script>"; //local para onde deve ser encaminhado
} else {
$msg = "Erro ao enviar a mensagem.";
echo "<script>alert('$msg');window.location.assign('contacto.html');</script>";
}
?>
Olá
eu anexo assim:
$mail->AddAttachment("diretorio/arquivo");