Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

juninhogpe

Formulário de Contato com Anexo (Dúvida)

Recommended Posts

Bom dia.

 

Pessoal encontrei um script na internet para criar um formulário de contato/pedido de orçamento com possibilidade de envio de anexo.

Consegui executar o script normalmente.

 

O meu problema é que quando não tenho anexo o formulário chega em branco no e-mail, ou seja, mesmo preenchendo todos os campos e não colocando anexo chega todo em branco e se colocar o anexo chega correto.

 

Abaixo segue o script:

<?php 
 
//Pega os dados postados pelo formulário HTML e os coloca em variaveis
if (preg_match('/criativaguaxupe.com.br$/', $_SERVER[HTTP_HOST])) {
//substitua na linha acima a aprte locaweb.com.br por seu domínio.
$email_from='email@email.com';	// Substitua essa linha pelo seu e-mail@seudominio
}else {
$email_from = "contato@" . $_SERVER[HTTP_HOST];         
//    Na linha acima estamos forçando que o remetente seja 'webmaster@',
// você pode alterar para que o remetente seja, por exemplo, 'contato@'.
}
 
 
if( PATH_SEPARATOR ==';'){ $quebra_linha="\r\n";
 
} elseif (PATH_SEPARATOR==':'){ $quebra_linha="\n";
 
} elseif ( PATH_SEPARATOR!=';' and PATH_SEPARATOR!=':' )  {echo ('Esse script não funcionará corretamente neste servidor, a função PATH_SEPARATOR não retornou o parâmetro esperado.');
 
}
 
//pego os dados enviados pelo formulário 
	$sistema  	 		  = $_POST["sistema"];
	$nome 	  	 		  = $_POST["nome"];
	$endereco 	 		  = $_POST["endereco"];
	$estado   	 		  = $_POST["estado"];
	$cidade   	 		  = $_POST["cidade"];
	$email   	 		  = $_POST["email"];
	$residencial 		  = $_POST["residencial"];
	$comercial   		  = $_POST["comercial"];
	$celular   			  = $_POST["celular"];
	$tipo_estabelecimento = $_POST["tipo_estabelecimento"];
	$comentarios          = $_POST["comentarios"];
	
	$email = 'email@email.com';
	
	//formato o campo da mensagem 
	$mensagem = wordwrap( $mensagem, 50, "<br>", 1); 
 
//valido os emails 
if (!preg_match("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$^", $email)){ 
 
echo"<center>Digite um email valido</center>"; 
echo "<center><a href=\"javascript:history.go(-1)\">Voltar</center></a>"; 
exit; 
 
} 
 
$arquivo = isset($_FILES["arquivo"]) ? $_FILES["arquivo"] : FALSE; 
 
if(file_exists($arquivo["tmp_name"]) and !empty($arquivo)){ 
 
$fp = fopen($_FILES["arquivo"]["tmp_name"],"rb"); 
$anexo = fread($fp,filesize($_FILES["arquivo"]["tmp_name"])); 
$anexo = base64_encode($anexo); 
 
fclose($fp); 
 
$anexo = chunk_split($anexo); 
 
 
$boundary = "XYZ-" . date("dmYis") . "-ZYX"; 
 
$mens = "--$boundary" . $quebra_linha . ""; 
$mens .= "Content-Transfer-Encoding: 8bits" . $quebra_linha . ""; 
$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"" . $quebra_linha . "" . $quebra_linha . ""; //plain 
$mens .= "Tipo de sistema: $sistema" . $quebra_linha . ""; 
$mens .= "<br>Nome: $nome" . $quebra_linha . ""; 
$mens .= "<br>Endereço: $endereco" . $quebra_linha . ""; 
$mens .= "<br>Estado: $estado" . $quebra_linha . ""; 
$mens .= "<br>Cidade: $cidade" . $quebra_linha . "";
$mens .= "<br>E-mail: $email" . $quebra_linha . ""; 
$mens .= "<br>Telefone Residencial: $residencial" . $quebra_linha . ""; 
$mens .= "<br>Telefone Comercial: $comercial" . $quebra_linha . ""; 
$mens .= "<br>Telefone Celular: $celular" . $quebra_linha . "";  
$mens .= "<br>Tipo de Estabelecimento: $tipo_estabelecimento" . $quebra_linha . "";  
$mens .= "<br>Comentários: $comentarios" . $quebra_linha . "";   
$mens .= "$mensagem" . $quebra_linha . ""; 
$mens .= "--$boundary" . $quebra_linha . ""; 
$mens .= "Content-Type: ".$arquivo["type"]."" . $quebra_linha . ""; 
$mens .= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"" . $quebra_linha . ""; 
$mens .= "Content-Transfer-Encoding: base64" . $quebra_linha . "" . $quebra_linha . ""; 
$mens .= "$anexo" . $quebra_linha . ""; 
$mens .= "--$boundary--" . $quebra_linha . ""; 
 
$headers = "MIME-Version: 1.0" . $quebra_linha . ""; 
$headers .= "From: $email_from " . $quebra_linha . ""; 
$headers .= "Return-Path: $email_from " . $quebra_linha . ""; 
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"" . $quebra_linha . ""; 
$headers .= "$boundary" . $quebra_linha . ""; 
 
 
//envio o email com o anexo 
mail($email,$assunto,$mens,$headers, "-r".$email_from); 
 
echo"Email enviado com Sucesso!"; 
 
} 
 
//se nao tiver anexo 
else{ 
 
$headers = "MIME-Version: 1.0" . $quebra_linha . ""; 
$headers .= "Content-type: text/html; charset=iso-8859-1" . $quebra_linha . ""; 
$headers .= "From: $email_from " . $quebra_linha . ""; 
$headers .= "Return-Path: $email_from " . $quebra_linha . ""; 
 
//envia o email sem anexo 
mail($email,$assunto,$mensagem, $headers, "-r".$email_from); 
 
 
echo"Email enviado com Sucesso!"; 
} 
 
?>

Agradeço desde já a ajuda de todos.

 

Obrigado.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Gustavo2503
      Estes são alguns pontos do que eu preciso
      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>'; }  
    • Por Felipe Guedes Coutinho
      Tenho apenas 500k de armazenamento aqui no FÓRUM, já coloquei algumas imagens para ajudar alguns inscritos a solucionar os problemas, porém agora, estou com apenas 67,47k de armazenamento e não consigo colocar mais imagens nos tópicos.
       
      Minha dúvida é como faço para deletar as imagens que anexei aqui no fórum e liberar espaço para poder armazenas novas imagens?
       
      Se alguém puder me ajudar fica agradecido.
       
      Fico no aguardo.
       
      Att.
      Felipe Coutinho
    • Por vinihhylian0103
      É possível anexar um arquivo e enviá-lo por email via PHP? Se sim, alguém poderia me dar uma ajuda com isso por favor, é realmente muito importante para meu projeto do TCC.
    • Por Folcks
      Boa tarde, pessoal!
       
      Eu tenho um site que possui um formulário de contato que permite o anexo de arquivos, porém, assim que eu clico no botão "Enviar mensagem" depois de ter preenchido todos os campos e anexado um documento, a página está exibindo o seguinte erro, acredito que do JavaScript:
       
      Error: 'slice' called on an object that does not implement interface Blob. e@https://184.10.65.89/wordpress/wp-includes/js/jquery/jquery.js?ver=1.12.4:4:24986 dc@https://184.10.65.89/wordpress/wp-includes/js/jquery/jquery.js?ver=1.12.4:4:24871 dc@https://184.10.65.89/wordpress/wp-includes/js/jquery/jquery.js?ver=1.12.4:4:24894 n.param@https://184.10.65.89/wordpress/wp-includes/js/jquery/jquery.js?ver=1.12.4:4:25232 ajax@https://184.10.65.89/wordpress/wp-includes/js/jquery/jquery.js?ver=1.12.4:4:21042 $scope.sendMail@https://184.10.65.89/wordpress/wp-content/themes/site/app/controllers/page.js:162:9 functionCall/<@https://184.10.65.89/wordpress/wp-content/themes/site/app/components/angular/angular.min.js?ver=1.3.15:199:301 f@https://184.10.65.89/wordpress/wp-content/themes/site/app/components/angular/angular.min.js?ver=1.3.15:216:74 $eval@https://184.10.65.89/wordpress/wp-content/themes/site/app/components/angular/angular.min.js?ver=1.3.15:126:11 $apply@https://184.10.65.89/wordpress/wp-content/themes/site/app/components/angular/angular.min.js?ver=1.3.15:126:236 compile/</<@https://184.10.65.89/wordpress/wp-content/themes/site/app/components/angular/angular.min.js?ver=1.3.15:216:124 dispatch@https://184.10.65.89/wordpress/wp-includes/js/jquery/jquery.js?ver=1.12.4:3:12392 add/r.handle@https://184.10.65.89/wordpress/wp-includes/js/jquery/jquery.js?ver=1.12.4:3:9156  
      Se eu somente preencher os campos e não anexar um arquivo, o e-mail é enviado normalmente.
       
       
      Aqui está o código no HTML da página para a exibição do botão de Anexar Arquivo:
      <input name="file" type="file" onchange="angular.element(this).scope().fileNameChanged(this.files[0])"/>  
      Aqui está o código no HTML da página para o botão de "Enviar mensagem":
      <button type="submit" class="btn-border-dark" ng-click="sendMail()">Enviar mensagem</button>  
      Aqui está o código em JavaScript que implementa a função sendMail:
      $scope.sendMail = function() { jQuery.ajax({ type: "POST", url: root.root + "send.php", data: $scope.contact, success: function() { console.log('sucesso!'); jQuery('.log-message').html(alert ("Mensagem enviada com sucesso!\n\nEm breve retornaremos seu e-mail com uma resposta. Obrigado.")); } }); }  
      Vocês podem me ajudar, por favor? Eu tentei procurar na internet este erro, cheguei a fazer o que o pessoal recomendou, mas nada funcionou.
       
       
      Muito obrigado
       
    • Por alisonalves
      Coloquei este código "$arquivo = $_FILES['arquivo'];" no meu phpmailer para anexar arquivos à mensagem mas não está funcionando. Alguém pode me ajudar a enxergar onde estou errando? O códig completo do phpmailer segue abaixo.
       
      <?php # Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer require_once("class.phpmailer.php"); require_once("class.smtp.php"); # Inicia a classe PHPMailer $mail = new PHPMailer(); # Define os dados do servidor e tipo de conexão $mail->IsSMTP(); // Define que a mensagem será SMTP $mail->Host = "email-ssl.com.br"; # Endereço do servidor SMTP $mail->Port = 587; // Porta TCP para a conexão $mail->SMTPAutoTLS = false; // Utiliza TLS Automaticamente se disponível $mail->SMTPAuth = true; # Usar autenticação SMTP - Sim $mail->Username = 'contato@xx.com.br'; # Usuário de e-mail $mail->Password = 'xxx'; // # Senha do usuário de e-mail # Define o remetente (você) $mail->From = "contato@xxx.com.br"; # Seu e-mail $mail->FromName = "E-mail de contato"; // Seu nome # Define os destinatário(s) $mail->AddAddress('contato@xxx.com.br', 'Fulano da Silva'); # Os campos podem ser substituidos por variáveis #$mail->AddAddress('webmaster@nomedoseudominio.com'); # Caso queira receber uma copia #$mail->AddCC('ciclano@site.net', 'Ciclano'); # Copia #$mail->AddBCC('fulano@dominio.com.br', 'Fulano da Silva'); # Cópia Oculta // Definição de HTML/codificação $mail->IsHTML(true); // Define que o e-mail será enviado como HTML $mail->CharSet = 'utf-8'; // Charset da mensagem (opcional) // DEFINIÇÃO DA MENSAGEM $mail->Subject = "Classificados"; // Assunto da mensagem $mail->Body .= " titulo: ".nl2br($_POST['titulo'])."<br>"; // Texto da mensagem $mail->Body .= " valor: ".nl2br($_POST['valor'])."<br>"; // Texto da mensagem $mail->Body .= " cidade: ".nl2br($_POST['cidade'])."<br>"; // Texto da mensagem $mail->Body .= " estado: ".nl2br($_POST['estado'])."<br>"; // Texto da mensagem $mail->Body .= " area: ".nl2br($_POST['area'])."<br>"; // Texto da mensagem $mail->Body .= " num_lugares: ".nl2br($_POST['num_lugares'])."<br>"; // Texto da mensagem $mail->Body .= " aluguel_valor: ".nl2br($_POST['aluguel_valor'])."<br>"; // Texto da mensagem $mail->Body .= " aluguel_contrato: ".nl2br($_POST['aluguel_contrato'])."<br>"; // Texto da mensagem $mail->Body .= " num_funcionarios: ".nl2br($_POST['num_funcionarios'])."<br>"; // Texto da mensagem $mail->Body .= " iptu: ".nl2br($_POST['iptu'])."<br>"; // Texto da mensagem $mail->Body .= " faturamento: ".nl2br($_POST['faturamento'])."<br>"; // Texto da mensagem $mail->Body .= " site: ".nl2br($_POST['site'])."<br>"; // Texto da mensagem $mail->Body .= " detalhes: ".nl2br($_POST['detalhes'])."<br>"; // Texto da mensagem $mail->Body .= " nome: ".nl2br($_POST['nome'])."<br>"; // Texto da mensagem $mail->Body .= " telefone: ".nl2br($_POST['telefone'])."<br>"; // Texto da mensagem $mail->Body .= " email: ".nl2br($_POST['email'])."<br>"; // Texto da mensagem $arquivo = $_FILES['arquivo']; # Define os dados técnicos da Mensagem $mail->IsHTML(true); # Define que o e-mail será enviado como HTML #$mail->CharSet = 'iso-8859-1'; # Charset da mensagem (opcional) # Define os anexos (opcional) #$mail->AddAttachment("c:/temp/documento.pdf", "documento.pdf"); # Insere um anexo # Envia o e-mail $enviado = $mail->Send(); # Limpa os destinatários e os anexos $mail->ClearAllRecipients(); $mail->ClearAttachments(); # Exibe uma mensagem de resultado (opcional) if ($enviado) { echo "E-mail enviado com sucesso!"; } else { echo "Não foi possível enviar o e-mail."; echo "<b>Informações do erro:</b> " . $mail->ErrorInfo; } ?>  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.