Ir para conteúdo

POWERED BY:

Arquivado

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

leo1987

[Resolvido] Formulário

Recommended Posts

Olá

 

A minha hospedagem requer envio de e-mails autenticados, dai me enviaram um modelo de formulário que segue abaixo....

pois bem, consegui edita-lo ao meu gosto, inserindo os campos, mensagens de erros, comandos GET.. etc

 

so que pra me ser util este formulario, preciso q ele envie o email para a pessoa q prencheu e uma copia deste email para mim...

 

estou a 3 dias quebrando a cabeça mas não consegui...

 

quem poder me dar uma dica, ficarei eternamente grato http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

---EDIT

para ser mais direto.... o formulario esta funcionando perfeitamente, apenas preciso adcionar meu email no script pra receber as informações tbm

 

segue o formulário:

 

Form.php

<form method="POST" action="enviar.php">
Seu Email<BR><input type="text" name="origem" size="30">
<BR><BR>
Assunto<BR><input type="text" name="assunto" size="30">
<BR><BR>
Mensagem<BR><textarea name="mensagem" rows="5" cols="23"></textarea>
<BR><BR>
<input type="submit" value="Enviar">
</form>

enviar.php

<?php
  include "smtp.class.php";
   $Email = new SendMail;
   $Email->Servidor = "localhost";
   $Email->Autenticado = TRUE;  
   $Email->Usuario = "usuario";  //Digite o Usuário de e-mail você@seudominio
   $Email->Senha = "senha";	//Digite a Senha do email você@seudominio
   $Email->EmailDe = leonardo@SITE.COM.BR // EMAIL DO SITE
   $Email->EmailPara = $_POST['mail'];   //  EMAIL DE QUEM PREENCHEU O FORMULARIO
   $Email->Assunto = $_POST['assunto'];
  $Email->Corpo = $_POST['mensagem']; 

   //Envia o email
   if($Email->Enviar())
   {
	  echo "Seu email foi enviado corretamente";
   }
   else
   {
	  echo "Desculpe, seu email não pode ser enviado";
   }
?>

smtp.class.php

<?php
class SendMail
{
   var $Servidor;	   //Endereço do servidor SMTP
   var $Porta=25;	   //Porta do servidor SMTP
   var $Autenticado;	//Autenticado ou não
   var $Usuario;		//Usuario do servidor SMTP
   var $Senha;		  //Senha do servidor SMTP
	
   var $EmailDe;		//Email de quem está enviando
   var $EmailPara;	  //Email de quem vai receber
   var $Assunto;		//Assunto do email
   var $Corpo;		  //Mensagem do email

   //Aumente para mais anexos
   var $Anexos=array(" ", " ", " ", " ", " ", " "," ", " ", " "," ");
   var $NumAnexos=0;

   var $Barra="\\";	 //Variavel que guarda o tipo da barra, \\ - windows | / - Linux
   var $erros=FALSE;	//Variavel que trata a situação da classe

   //Construtor
   function SendMail()
   {
	   //Aumenta o tempo de espera maximo
	   set_time_limit(3600);
   }

   //Criptografa o arquivo na base64
   function CodarArquivo($arq)
   {
	   $fp=fopen($arq, "rb");
	   if(!$fp)
	   {
		   $this->erros=TRUE;
		   return FALSE;
	   }
	   $File=fread($fp, filesize($arq));
	   fclose($fp);

	   return base64_encode($File);
   }
  
	//Retorna o nome do arquivo
	function PegarNome($str)
	{
		$Nome="";
		$i=strlen($str)-1;
		while($str[$i]!="\\")
			$i--;

		$i++;
		$j=0;
		for($i; $i<strlen($str); $i++)
		{
			$Nome.=$str[$i];
			$j++;
		}
		return $Nome;
	}

	//Retorna a extensão do arquivo, desde que ele tenha extesão
	function PegarTipo($str)
	{
		$tipo="";
		$i=strlen($str)-1;
		$j=0;
		while($str[$i]!=".")
			$i--;

		$i++;
		$j=0;
		for($i; $i<strlen($str); $i++)
		{
			$tipo.=$str[$i];
			$j++;
		}
		return $tipo;
	}

	//Coloca o endereço do arquivo no array e aumenta o numero de anexos
	function Anexar($arq)
	{
		$this->Anexos[$this->NumAnexos]=$arq;
		$this->NumAnexos++;
		return TRUE;
	}
	
   //Função que verifica se as variaveis estão OK
   function Verificar()
   {
	   //Verifica se é um servidor autenticado
	   if( $this->Autenticado )
		   if( !isset($this->Usuario) || !isset($this->Senha) )  //Se for autenticado, verifica o usuario e a senha
			   $this->erros=TRUE;

	   //Verifica se o servidor foi digitado
	   if( !isset($this->Servidor) )
		   $this->erros=TRUE;
		  
	   //Verifica se os parametros são validos
	   if( !isset($this->EmailDe) || !isset($this->EmailPara) || !isset($this->Assunto) || !isset($this->Corpo) )
		   $this->erros=TRUE;
   }

   //Função que espera o servidor responder
   function Esperar_Resp($socket, $response, $line = __LINE__)
   {
	   while (substr($server_response, 3, 1) != ' ')
		   if (!($server_response = fgets($socket, 256)))
			   $this->erros=TRUE;
	   if (!(substr($server_response, 0, 3) == $response))
		   $this->erros=TRUE;
   }

   function Enviar()
   {
		$this->Verificar();
		if( !$this->erros )
		{
			//Tenta conectar
			if( !$socket=fsockopen($this->Servidor, $this->Porta, $errno, $errstr, 20) )
				$this->erros=TRUE;

			//Espera por resposta
			$this->Esperar_Resp($socket, "220", __LINE__);

		   //Verifica se o email esta sendo autenticado
		   //Caso for ele ira mandar um EHLO, pra dizer que vai ser autenticado
		   //Caso não for ele manda um HELO simples.
		   if( $this->Autenticado )
		   {
			   fputs($socket, "EHLO " . $this->Servidor . "\r\n");
			   $this->Esperar_Resp($socket, "250", __LINE__);

			   fputs($socket, "AUTH LOGIN\r\n");
			   $this->Esperar_Resp($socket, "334", __LINE__);

			   fputs($socket, base64_encode($this->Usuario) . "\r\n");
			   $this->Esperar_Resp($socket, "334", __LINE__);

			   fputs($socket, base64_encode($this->Senha) . "\r\n");
			   $this->Esperar_Resp($socket, "235", __LINE__);

		   }
		   else
		   {
			   fputs($socket, "HELO " . $this->Servidor . "\r\n");
			   $this->Esperar_Resp($socket, "250", __LINE__);
		   }
		  
		   //Envia quem está mandando o email
		   fputs($socket, "MAIL FROM: " . $this->EmailDe . "\r\n");
		   $this->Esperar_Resp($socket, "250", __LINE__);

		   //Diz ao servidor quem vai receber o email
		   fputs($socket, "RCPT TO: " . $this->EmailPara . "\r\n");
		   $this->Esperar_Resp($socket, "250", __LINE__);

		   //Diz ao servidor que estou pronto para enviar a mensagem
		   fputs($socket, "DATA\r\n");
		   $this->Esperar_Resp($socket, "354", __LINE__);

		   //Cabeçalho do email
		   fputs($socket, "From: " . $this->EmailDe . "\r\n");
		   fputs($socket, "To: " . $this->EmailPara . "\r\n");
		  
		   //Mando o assunto do email
		   fputs($socket, "Subject: " . $this->Assunto . "\r\n");
		  
		   //Envia o cabeçalho
		   fputs($socket, "MIME-Version: 1.0\r\n");
		   fputs($socket, "Content-Type: multipart/mixed;\r\n");
		   fputs($socket, "	  boundary=KkK170891tpbkKk__FV_KKKkkkjjwq\r\n");
		   fputs($socket, "\r\n");
		   fputs($socket, "\r\n");
		   fputs($socket, "--KkK170891tpbkKk__FV_KKKkkkjjwq\r\n");
		   fputs($socket, "Content-Type: text/plain; charset=US-ASCII\r\n");
		   fputs($socket, "\r\n");
		   fputs($socket, $this->Corpo);
		   fputs($socket, "\r\n\r\n");
		  
		   //verifica se existe arquivo para ser enviado junto
		   if($this->NumAnexos>0)
		   {
			   for($i=0; $i<$this->NumAnexos; $i++)
			   {
				   //Pega o tipo para o MIME TYPE
				   $tipo=$this->PegarTipo($this->Anexos[$i]);
				   strtolower($tipo);
				   switch($tipo)
				   {
					   case "jpeg":
					   case "jpg":
						   $Tipo="image/jpeg";
						   break;
					   case "gif":
						   $Tipo="image/gif";
						   break;
					   case "doc":
						   $Tipo="application/msword";
						   break;
					   case "rar":
						   $Tipo="application/rar";
						   break;
					   case "zip":
						   $Tipo="application/zip";
						   break;
					   default:
						  $Tipo="application/octet-stream";
						  break;
						  
				   }
				   //Pega o nome do arquivo
				   $Nome=$this->PegarNome($this->Anexos[$i]);
				  
				   fputs($socket, "--KkK170891tpbkKk__FV_KKKkkkjjwq\r\n");
				   fputs($socket, "Content-Type: " . $Tipo . "; name=\"". $Nome . "\"\r\n");
				   fputs($socket, "Content-Transfer-Encoding: base64\r\n");
				   fputs($socket, "Content-Disposition: attachment; filename=\"" . $Nome . "\"\r\n");
				   fputs($socket, "\r\n");
				   fputs($socket, $this->CodarArquivo($this->Anexos[$i]));
				   fputs($socket, "\r\n");
			   }
			   fputs($socket, "--KkK170891tpbkKk__FV_KKKkkkjjwq--\r\n");
		   }

		   //Avisa o servidor que ja acabei de enviar a mensagem
		   fputs($socket, "\r\n.\r\n");
		   $this->Esperar_Resp($socket, "250", __LINE__);

		   //Sai do servidor e fecha o socket
		   fputs($socket, "QUIT\r\n");
		   fclose($socket);

		   //Retorna um TRUE pra dizer que o email foi enviado
		   if ($this->erros==TRUE)
			  return FALSE;
		   else
			  return TRUE;
		}
	}
}
?>

Pelo visto eu teria que modificar o smtp.class.php correto???

Compartilhar este post


Link para o post
Compartilhar em outros sites

leo,

 

creio que se você apenas acrescentar uma virgula e o outro e-mail ali no arquivo "enviar.php" ele resolva sua dúvida.

 

$Email->EmailPara = "seu_email@dominio.com, seu_segundo@email.com";  //Digite o Destino

Faz o teste e depois bota o resultado pra gente aqui! ;)

 

Abraços! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

leo,

 

creio que se você apenas acrescentar uma virgula e o outro e-mail ali no arquivo "enviar.php" ele resolva sua dúvida.

 

$Email->EmailPara = "seu_email@dominio.com, seu_segundo@email.com";  //Digite o Destino

Faz o teste e depois bota o resultado pra gente aqui! ;)

 

Abraços! :D

Perdão Diego eu tinha coloca o formulário sem alterações.

O que eu modifiquei e esta funcionando perfeitamente eh o de baixo... eu inverti o "EmailDe:" que ficou sendo o email do site.... e o "EmailPara" eu coloquei pra enviar para o email de quem preencheu o formulário... agora preciso acrescentar o meu mail tbm, mas nao sei aonde.

 

<?php
  include "smtp.class.php";
   $Email = new SendMail;
   $Email->Servidor = "localhost";
   $Email->Autenticado = TRUE;  
   $Email->Usuario = "usuario";  //Digite o Usuário de e-mail você@seudominio
   $Email->Senha = "senha";	//Digite a Senha do email você@seudominio
   $Email->EmailDe = leonardo@SITE.COM.BR // EMAIL DO SITE
   $Email->EmailPara = $_POST['mail'];   //  EMAIL DE QUEM PREENCHEU O FORMULARIO
   $Email->Assunto = $_POST['assunto'];
  $Email->Corpo = $_POST['mensagem']; 

   //Envia o email
   if($Email->Enviar())
   {
	  echo "Seu email foi enviado corretamente";
   }
   else
   {
	  echo "Desculpe, seu email não pode ser enviado";
   }
?>

O problema ai eh que nao sei como faço pra colocar o meu mail junto do $_POST['mail'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leo,

 

tenta isso:

 

$Email->EmailPara = $_POST['mail'].", outro@email.com";   //  EMAIL DE QUEM PREENCHEU O FORMULARIO

ou tenta assim:

 

$Email->EmailPara = "$_POST['mail'], outro@email.com";   //  EMAIL DE QUEM PREENCHEU O FORMULARIO

Abraços! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá leo.... tentou usar o HEADER já... não deu tempo de analizar o code pois estou no trabalho chegando em casa eu analizo se nao der certo o que o diego falou....

 

EDIT

 

Para poupar o seu tempo use logo o primeiro é o que contém a sintaxe certa... se funciona será o primeiro!!!! ;)

 

EDIT 2

 

Pelo que eu vi no Código eh soh POO, mudou uma linha ja deu... espere até mais ou menos 1 hora da tarde que eu posto aqui a possível solução... tem problma ser como uma cópia oculta???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw pela disposição Diego.

Mas não deu aqui, a primeira opção não envia o email...

ai na segunda aparece o erro "Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING"

 

mas assim, se eu criar um campo hidden no formulario com meu email (mail2), como faço pra inserir os 2 $_POST['mail'] e $_POST['mail2'] no EmailPara ???

 

EDIT...

 

E ai VItor joiaa

 

Intao cara, pra minha ate seria melhor se fosse oculta heheh... essa class.smtp ta meio complicada, ja tinha visto isso do headers, mas nao achei como inserir...

 

e espero numa boa

 

Vlws !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamo tenta faze aqui rapidão....

 

Vai no arquivo: smtp.class.php

 

Depois de:

//Cabeçalho do email
		   fputs($socket, "From: " . $this->EmailDe . "\r\n");
		   fputs($socket, "To: " . $this->EmailPara . "\r\n");

Adicione:

fputs($socket, "Bcc: seuemail@email.com.br \r\n");

Se não de certo me fla que chegando em casa eu fasso da!!!!

 

EDIT

 

soh substitui a parte seuemail@email.com.br... coloca o seu e-mail no lugar e pronto... o FROM e o TO tao com ".." por causa da sintaxe do PHP para avisar que ten continuação antes e depois essse como é apenas texto não precisa disso entendeu???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa vitor.

 

meu site acabou de cair aqui, na vai dar pra testar. <_<

 

mas o Bcc teria que ficar entre aspas ? igual o "From: " e o "To: " ??

 

 

----EDIT

nossa ta complicado aqui... não foi ainda , apenas enviou para o "To: " . $this->EmailPara

 

 

---EDIT2

Consegui !!!!!!!!!!!!!!!!!!!!!!!! aeeeeeeeeeeeww !!!

Muito Obrigado Diego e Vitor, brigado mesmo

Vou fazer um passo a passo do que fiz... daqui a pouco eu posto novamente http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra quem precisar da solução, eh assim...

 

no form.php eu adcionei um campo hidden, com o meu email "mail2"

 

no enviar.php acrescentei o seguinte na linha 11:

$Email->MailCopia = $_POST['mail2'];

no smtp.class.php eu acrescentei na linha 11:

var $MailCopia;	//E-mail da cópia Carbono CC

ai agora q eh o segredo:

 

//Envia quem está mandando o email
		   fputs($socket, "MAIL FROM: " . $this->EmailDe . "\r\n");
		   $this->Esperar_Resp($socket, "250", __LINE__);

		   //Diz ao servidor quem vai receber o email
		   fputs($socket, "RCPT TO: " . $this->EmailPara . "\r\n");
		   $this->Esperar_Resp($socket, "250", __LINE__);
		   
		   fputs($socket, "RCPT TO: " . $this->MailCopia . "\r\n");
		   $this->Esperar_Resp($socket, "250", __LINE__);
essa parte ai eh q o servidor vai ientificar pra quem ele vai manda o mail, tem q acrescentar ai tbm o segundo destinatário O "RCPT TO" que vai ser o meu mail.

 

 

Vlws vcs 2... muito obrigado mesmo... so faltava isso pro meu site ir pro ar.. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

vlwsss !!!

 

 

Depois é so fazer exatamente o que o vitor disse... no cabeçalho do mail inserir o campo de CC ou o Bcc.

//Cabeçalho do email
		   fputs($socket, "From: " . $this->EmailDe . "\r\n");
		   fputs($socket, "To: " . $this->EmailPara . "\r\n");
		   fputs($socket, "Cc: " . $this->MailCopia . "\r\n");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa, realmente nem me lembrei de usar o "Cc" http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

 

Sempre que precisar, tamos por aqui! ;)

 

Abraços! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma Dúvida que eu sempre tive é BCC ou é CC????

 

Vlw ae sanou sua duvida e a possivel duvida de outros....

 

Vlw e para organizar pede para fexar ae a não ser que tenha mais dúvidas...

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.