Ir para conteúdo

POWERED BY:

Arquivado

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

Rick RJ

Formulário PHP com envio anexo.

Recommended Posts

Galera,

 

não consigo fazer com que chegue o email com o anexo. Por que? Cade o erro? Já mexi, remexi e até agora nada.

 

tconosco.html

<html>
<head>


	<tr bgcolor="#ffffff">
	<td colspan="6"><img src="images/mm_spacer.gif" alt="" width="1" height="1" border="0" /></td>
	</tr>

	<tr bgcolor="#ffffff">
	  <td colspan="2" valign="top" bgcolor="#a4c2c2"> </td>
	  <td width="5" valign="top"> </td>
	<td width="5" valign="top"><br />
	<br />
	<table border="0" cellspacing="0" cellpadding="0" width="547">
		<tr>
		  <td width="547" class="pageName"> </td>
		</tr>

		<tr>
		<td class="bodyText">
		<p align="justify" class="Estilo22"> </p>
		<p align="justify" class="Estilo22"> </p>
		<div align="justify" class="Estilo26">
		      
		      </p>
              <p class="fieldwrap">
                <label for="label"><span class="required"> *</span> Nome    </label>
                <input name="fm_name2" type="text" class="fmtext" id="label" value="" size="40" />
              </p>
              <p class="fieldwrap">
                <label for="label2"><span class="required">*</span> Email     </label>
                <input name="fm_email2" type="text" class="fmtext" id="label2" value="" size="40" />
              </p>
              <p class="fieldwrap">
                <label for="label3"><span class="required">*</span> Assunto</label>
                <input name="fm_subject2" type="text" class="fmtext" id="label3" value="" size="40" />
              </p>
              <p class="fieldwrap"><span class="required">*</span> Mensagem
              <p class="fieldwrap">
                                 <textarea class="fmtextarea" name="fm_message" cols="40" rows="4" id="fm_message"></textarea>
              <p class="fieldwrap">
                <label for="label0">* Anexar Currículo</label>
                <script type="text/javascript" src="funcoes.js"></script>
                </head>
                <body>
              <form action="upload.php" method="post" enctype="multipart/form-data" id="form1">        <div id="conteudo">                               
                  <input name="fm_upload2" type="file" size="40" id="fm_upload2" />                
                <input type="button" value="Adicionar" onclick="Add()" />                <span id="campos"></span>
                <p align="center"> </p>
                <p align="center">
                  <input type="submit" name="Submit" value="Enviar" />
                </p>
              </div></form>
                
                </p>
            <p class="fieldwrap">
                <label for="label5"></label></p>
              <label for="label6"></label></td>
		</tr>
                    <tr>
                      <td height="214" align="center" valign="top"><br>
                        <p>
                      </td>
		</tr>
	</table>	</td>
	<td width="6"> </td>
	<td width="49"> </td>
  </tr>

	<tr bgcolor="#ffffff">
	<td colspan="6"><img src="images/mm_spacer.gif" alt="" width="1" height="1" border="0" /></td>
	</tr>
    
	<tr>
	<td width="6"> </td>
	<td width="216"> </td>
	<td width="54"> </td>
	<td width="551"><div align="center" class="Estilo1"></div></td>
	<td width="6"> </td>
	<td width="49"> </td>
  </tr>
</table>
<P ALIGN="CENTER">
<BGSOUND SRC="musica.mid">
</P>

</body>
</html>

upload.php

<?php
$nome = $_POST['fm_name2'];
$email = $_POST['fm_email2'];
$assunto = $_POST['fm_subject2'];
$mensagem = $_POST['fm_message'];
$anexos = 0;
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
$mens  = "--$boundary\n";
$mens .= "Content-Transfer-Encoding: 8bits\n";
$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n";
$mens .= "$mensagem\n";
$mens .= "--$boundary\n";
for($i = 0; $i < count($_FILES["file"]["name"]); $i++)
{
if(is_uploaded_file($_FILES["file"]["tmp_name"][$i])){
$fp = fopen($_FILES["file"]["tmp_name"][$i], "rb");
$anexo = chunk_split(base64_encode(fread($fp, $_FILES["file"]["size"][$i]))); 
$mens .= "Content-Type: ".$_FILES["file"]["type"][$i]."\n name=\"".$_FILES["file"]["name"][$i]."\"\n";
$mens .= "Content-Disposition: attachment; filename=\"".$_FILES["file"]["name"][$i]."\"\n";                             
$mens .= "Content-transfer-encoding:base64\n\n"; 
$mens .= $anexo."\n";

 if($i + 1 == count($_FILES["file"]["name"]))
 $mens.= "--$boundary--";
 else
 $mens.= "--$boundary\n";
 if($_FILES["file"]['error'][$i] == 0) {
 $anexos++;
     }
   }
 }

$headers  = "MIME-Version: 1.0\n";
$headers .= "Date: ".date("D, d M Y H:i:s O")."\n"; 
$headers .= "From: \"Remetente\" <envio@monografiasrio.com.br>\r\n";
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n";

if(mail($email, $assunto, $mens, $headers)){
        echo "O email foi enviado com sucesso, $anexos anexos";
		} else {
		        echo "Nao foi possivel enviar o email";
				}       
			?>

funcoes.js

NumeroCampo = 0;function Add() {        if(NumeroCampo < 4) {                NumeroCampo++;                data = "<span id='campo"+NumeroCampo+"'><input type=\"file\" name=\"file[]\" /> <input type=\"button\" value=\"Remover\" onclick=\"Delcampo('campo"+NumeroCampo+"')\" /></span>";                campo = document.getElementById("campos");                campo.innerHTML = campo.innerHTML + data;        }       }function Delcampo(IDDiv) {        var d = document.getElementById('campos');        var olddiv = document.getElementById(IDDiv);        d.removeChild(olddiv);        NumeroCampo--;}

Alguem pode me dizer o que esta errado?

 

Obrigado e fico a disposição para ajuda-los tambem.

 

RJRick

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos,

 

o meu já esta pronto, sei que tem um pequeno erro e não consigo descobrir. Pra que começar do zero de novo? Se alguem puder me ajudar agradeço, acho que quando tentamos muitas vezes seguidas encontrar um erro não conseguimos ver o erro. Outra pessoa olhando acha rápido. Valeu amigo e um abraço.

 

RJRick

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando por cima...

 

// aqui você define a $anexo. OK.
$anexo = chunk_split(base64_encode(fread($fp, $_FILES["file"]["size"][$i]))); 
$mens .= "Content-Type: ".$_FILES["file"]["type"][$i]."\n name=\"".$_FILES["file"]["name"][$i]."\"\n";
$mens .= "Content-Disposition: attachment; filename=\"".$_FILES["file"]["name"][$i]."\"\n";                             
$mens .= "Content-transfer-encoding:base64\n\n"; 
// aqui você adiciona ela à mensagem
$mens .= $anexo."\n";

 if($i + 1 == count($_FILES["file"]["name"]))
 $mens.= "--$boundary--";
 else
 $mens.= "--$boundary\n";
 if($_FILES["file"]['error'][$i] == 0) {
// aqui você dá um ++ nela... será que aqui tá certo?
 $anexos++;

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

você viu de onde você está começando a Tag <form method='post' enctype='.......'> ??

você viu onde você colocou a TAG <body> ?? você viu onde colocou a TAG </HEAD>

 

você abriu esta TAG <form> antes do input file.

você tem que abrir a TAG <body> la em cima, nessa sequencia:

 

<html>
<head>
   <script type...></script> // seu script
</head>
<body>
<form>
.
.
. // seus campos
.
.
.
.
.
</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu fiz assim:

	else if ( $_POST['form']=='trabalhe' )
	{
		$subject	= 'Trabalhe Conosco do site '.$nome_site;
		$arquivo = isset($_FILES["cvitae"]) ? $_FILES["cvitae"] : FALSE;

		


		if(file_exists($arquivo["tmp_name"]) and !empty($arquivo))
		{

			$fp = fopen($_FILES["cvitae"]["tmp_name"],"rb");
			$anexo = fread($fp,filesize($_FILES["cvitae"]["tmp_name"])); 
			$anexo = base64_encode($anexo); 

			fclose($fp);

			$anexo = chunk_split($anexo); 

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

			$mens = "--alt-$boundary\n";
			$mens .= "Content-Transfer-Encoding: 8bits\n";
			$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
			$mens .= 'Nome: <strong>'.$_POST['nome'].'</strong>, <br />'.
			'Email: <strong>'.$_POST['email'].'</strong>, <br />'."\n";
			$mens .= "--alt-$boundary\n";
			
			
			$mens .= "--$boundary\n";
			$mens .= "Content-Type: ".$arquivo["type"]."\n"; 
			$mens .= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n"; 
			$mens .= "Content-Transfer-Encoding: base64\n\n"; 
			$mens .= "$anexo\n"; 
			$mens .= "--$boundary--\r\n"; 


			
			$anexo = true;
		}
		$message .= $mens;
		$pag = $_SERVER['HTTP_REFERER'].'&erro=0';
	}
E o envio:

$headers = "MIME-Version: 1.0\n";	
	$headers .= "From: No-Reply<no-reply@{$nome_site}.com> \r\n";
	$headers .= "Content-type: text/html; charset=iso-8859-1\n";	
	$headers .= "Bcc: rocha_bruno@hotmail.com \r\n";
	if( $anexo ){
		$headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n"; 
		$headers .= "$boundary\n";
	}

	
	//echo $headers; exit();
	if( mail($to, $subject, $message."\n\n".'aeeeee', $headers) )
		header('Location: '.$pag );
Está chegando corretamente o anexo aqui, porém não recebo o corpo da mensagem... oO

Compartilhar este post


Link para o post
Compartilhar em outros sites

troque isto

$message .= $mens;

por isto

$message = $mens; // sem o ponto, a variavel $message está vazia.

e isto

$message."\n\n".'aeeeee',

por isto

$message."\n\n aeeeee",

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não estava ^_^

e a concatenação não altera em nada. Já testei de outra forma tb.

 

Apenas quis deixar um código que funciona o anexo.. porém não descobri o motivo do corpo não ser enviado, mesmo fazendo:

mail($to, $subject, $mens, $headers);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos,

 

o meu já esta pronto, sei que tem um pequeno erro e não consigo descobrir. Pra que começar do zero de novo? Se alguem puder me ajudar agradeço, acho que quando tentamos muitas vezes seguidas encontrar um erro não conseguimos ver o erro. Outra pessoa olhando acha rápido. Valeu amigo e um abraço.

 

RJRick

 

a classe PHPMailer é uma das melhores que existe para envio de email, e ela ja esta pronta e 100% funcional e pratica, isso não é começar do zero, é só pegar e usar e pronto.

 

mas se esta afim de aprender e arrumar sua classe vai fundo, só fica ai a dica caso nao queria esquentar a cabeça e nem ter dor de cabeça com codigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

William Bruno e Dee,

 

testei o código, o email chega sem anexo e com erro no corpo da mensagem. O que fazer?

 

 


<?php
$nome = $_POST['fm_name2'];
$email = $_POST['fm_email2'];
$assunto = $_POST['fm_subject2'];
$mensagem = $_POST['fm_message'];
$anexos = 0;
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
$mens  = "--$boundary\n";
$mens .= "Content-Transfer-Encoding: 8bits\n";
$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n";
$mens .= "$mensagem\n";
$mens .= "--$boundary\n";


for($i = 0; $i < count($_FILES["file"]["name"]); $i++)
{
if(is_uploaded_file($_FILES["file"]["tmp_name"][$i]))

$subject        = 'Trabalhe Conosco do site '.$nome_site;
$arquivo = isset($_FILES["cvitae"]) ? $_FILES["cvitae"] : FALSE;
		  
 if(file_exists($arquivo["tmp_name"]) and !empty($arquivo))

{
    $fp = fopen($_FILES["cvitae"]["tmp_name"],"rb");
		  $anexo = fread($fp,filesize($_FILES["cvitae"]["tmp_name"]));
		  $anexo = base64_encode($anexo);
		  
		  fclose($fp);
		  $anexo = chunk_split($anexo);
		  
		  
		  $mens = "--alt-$boundary\n";
		  $mens = "Content-Transfer-Encoding: 8bits\n";
		  $mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
		  $mens .= 'Nome: <strong>'.$_POST['nome'].'</strong>, <br />'.
		  
		  'Email: <strong>'.$_POST['email'].'</strong>, <br />'."\n";
		  $mens .= "--alt-$boundary\n";
		  
		  $mens .= "--$boundary\n";
		  $mens .= "Content-Type: ".$arquivo["type"]."\n";
		  $mens .= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n";
		  $mens .= "Content-Transfer-Encoding: base64\n\n";
		  $mens .= "$anexo\n";
		  $mens .= "--$boundary--\r\n";
		  
		  $anexo = true;
}
          $message = $mens; // sem o ponto, a variavel $message está vazia.
		  $pag = $_SERVER['HTTP_REFERER'].'&erro=0';
}

          $headers = "MIME-Version: 1.0\n";
		  $headers .= "From: No-Reply<no-reply@{$nome_site}.com> \r\n";
		  $headers .= "Content-type: text/html; charset=iso-8859-1\n";
		  $headers .= "Bcc: envio@monografiasrio.com.br \r\n";
		  
		  if( $anexo ){
		  
		  $headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
		  $headers .= "$boundary\n";
}                
          //echo $headers; exit();
		  if( mail($to, $subject, $message."\n\n aeeeee", $headers) )
		  header('Location: '.$pag );
  
			?>


Um abraço e agradeço a ajuda. RJRick.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, que erro chegou pra você ?

 

Eu gosto do forum, pois discutir ideias, e chegar num resultado eh legal.

Por isso nao indico apenas classes prontas, e nem costumo mandar os membros "irem pesquisar".

 

Vamos la..

você tem um input:

cvitae ?

 

<input type="file" name="cvitae" />
?

qndo der algum erro, nos informe qual.

Alem disso, você declarou no teu form:

<form action="" method="" enctype="multipart/form-data">
?

Compartilhar este post


Link para o post
Compartilhar em outros sites

William,

 

declarei no formulário

 


              <form action="upload.php" method="post" enctype="multipart/form-data" id="form1">        <div id="conteudo">                               
                  <input name="fm_upload2" type="file" size="40" id="fm_upload2" />                
                <input type="button" value="Adicionar" onClick="Add()" />                <span id="campos"></span>
                <p align="center"> </p>
                <p align="center">
                  <input type="submit" name="Submit" value="Enviar" />
                </p>
              </div></form>

Não aparece nenhuma mensagem de erro, o email chega sem remetente, sem anexo e com mensagem sem nexo.

 

 

Valeu a ajuda. Alguma sugestão?

 

Quando colocar coloque o código completo para que eu possa entender.

 

 

RJRick.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rick RJ, seu post foi excluído por ser considerado flood, o que vai contra as normas do fórum.

 

Sobre a sua dúvida, mantenho a minha sugestão de utilizar PHPMailer. Não precisa mudar o formulário. É só modificar o arquivo que envia o e-mail.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ow rapaz.. mas você tem que começar a tentar entender o script tb... se não fica dificil..

Teste assim:

<?php

	if( $_SERVER['REQUEST_METHOD'] == 'POST' )
	{

		$to = 'envio@monografiasrio.com.br';//email que irá receber
		$subject = 'Anexos enviados pelo site ';//assunto do email
		$arquivo = isset($_FILES['fm_upload2']) ? $_FILES['fm_upload2'] : FALSE;//aqui precisa bater com o name do teu input

		if(file_exists($arquivo['tmp_name']) and !empty($arquivo))
		{
			$fp = fopen($_FILES['fm_upload2']['tmp_name'],"rb");
			$anexo = fread($fp,filesize($_FILES['fm_upload2']['tmp_name']));
			$anexo = base64_encode($anexo);

			fclose($fp);
			$anexo = chunk_split($anexo); 

			$boundary = "XYZ-" . date("dmYis") . "-ZYX";//não remova essa linha, ela é importante !

			/* trecho que enviaria uma mensagem no corpo da mensagem */
			$mens = "--alt-$boundary\n";
			$mens .= "Content-Transfer-Encoding: 8bits\n";
			$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
			$mens .= 'Nome: '."\n";
			$mens .= "--alt-$boundary\n";
			/* fim do trecho do texto no corpo */

			$mens .= "--$boundary\n";
			$mens .= "Content-Type: ".$arquivo["type"]."\n";
			$mens .= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n";
			$mens .= "Content-Transfer-Encoding: base64\n\n";
			$mens .= "$anexo\n";
			$mens .= "--$boundary--\r\n";
		}


		$headers = "MIME-Version: 1.0\n";
		$headers .= "From: No-Reply<no-reply@monografiasrio.com.br> \r\n";//quem envia
		$headers .= "Content-type: text/html; charset=iso-8859-1\n";
		//$headers .= "Bcc: envio@monografiasrio.com.br \r\n";//somente se quiser receber uma cópia
		$headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
		$headers .= "$boundary\n";

		mail($to, $subject, $mens, $headers);
		$msg = 'Formulário enviado!';
	}
	if( !isset($msg) )
	{
?>
	<form action="" method="post" enctype="multipart/form-data" id="form1">
		<div id="conteudo">                               
			<input name="fm_upload2" type="file" size="40" id="fm_upload2" />
			<p align="center"></p>
			<p align="center"><input type="submit" name="Submit" value="Enviar" /></p>
		</div><!-- /conteudo -->
	</form>
<?php
	}
	else
		echo $msg;
?>
e depois implemente o envio de multiplos arquivos, que você tentou fazer..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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