Ir para conteúdo

POWERED BY:

Arquivado

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

wenderlan

Enviando e-mails autenticados php

Recommended Posts

Galera antes de tudo quero dizer que já fiz pesquisa no forum e no google, mas o que eu encontrei estava meio confuso, gostaria de saber se alguém pode me informar como vou enviar um formulário que esta em Formulário de contato , entrei em contato com o pessoal do servidor e eles disseram que para o envio do email eu preciso de um script que autentica o email para o envio do formulário.

 

este é um tópico parecido com o meu, mas que não teve solução, ou pelo menos o colega não postou a solução

 

http://forum.imasters.com.br/index.php?sho...ail+autenticado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oláá !!!

 

Apanhei com isso tbm ... dá uma olhada nesse aqui:

http://www.xpertmailer.com/

 

Seu codigo fica + ou - assim !!!!

 

Espero que te ajude !!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

require_once "xpm2/smtp.php";// E_ALL -> debugging// false -> publicerror_reporting(E_ALL);// 0 -> no time limitset_time_limit(0);$nome = $_POST["txt_nome"];$de = $_POST["txt_email"];$assunto = $_POST["txt_assunto"];$cliente = $_POST["txt_cliente"];// Essa variavel contém os simbolos que seram substituidos para corrigir o bug na formatação do email$descartar = array('"', "\"", "\\", "3D~");$msg = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n";$msg.= "<html>\n";$msg.= "<head>\n";$msg.= "<title>************</title>\n";$msg.= "<meta http-equiv=\"Content-Type\" content=\"text/html\"; charset=\"iso-8859-1\">\n";$msg.= "</head>\n";$msg.= "<body>\n";// a linha abaixo faz a substituição$msg.= str_replace($descartar, "", $_POST["txt_msg"]);$msg.= "\n</body>\n";$msg.= "</html>";$mail = new SMTP;$mail->Delivery('relay');//$mail->Relay('relay-hostname.net', 'username', 'password', 465, 'autodetect', 'tls');$mail->Relay($smtp_server, $smtp_user, $smtp_pass, 25, 'autodetect', false);$mail->TimeOut(10);$mail->Priority('high');$mail->From($de, $de);$mail->AddTo($destinatario, $destinatario);//$mail->AddCc('another@domain.com', 'another user');//$mail->AddBcc('hidden@host.com');//$mail->Text($msg, $charset, $encoding, $disposition);$mail->Html($msg);//$mail->AttachFile('image.gif', 'photo.gif', 'autodetect', 'inline');//$mail->AttachFile('file.zip');//$sent = $mail->Send('Hello World!');//echo $sent ? 'Success' : 'Error';if($sent = $mail->Send($assunto)){echo "E-mail enviado com sucesso para <b>$destinatario</b> <br /> \n";}else{echo "Falha ao enviar e-mail para <b>$destinatario</b> <br /> \n";}// for debugging//echo '<br>Result: '.$mail->result;

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu vi um script por aeh, que verificava a existencia do dominio utilizado no email, mas nau eh mtu seguro, pois eu poderia apenas escrever qualquercoisa@msn.com, por exemplo e funcionaria igual... =/flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo, tenho uma classe feita por mim, da uma olhada

 

smtp.class.php

<?php/**	Classe SendMail e todas as suas funções foraum escrita por: Bruno Pitteli Gonçalves ||*scorninpc[(at])gmail([dot)]com como necessidade*ao se deparar com tal problema em enviar emails com anexos em servidores SMTP auteticados na criação*do portal http://www.unimed-andradina.com.br.*	Esta classe ou qualquer função nela contida pode ser usada em qualquer programa com fins lucrativos ou não,*porem devem ser setados no trexo do codigo fonte o nome e email do autor, e qual a*modificação caso ouver.*   O autor não é responsavel por erros e danos nestas funções.**   Possiveis problemas:*   Anexar mais de 10 arquivos sem ter auterado o array $Anexos para suportar mais que 10 anexos*   Anexar um arquivo de tipo não setado que não seja uma aplicação (necessita de testes)*   Caso a internet seja lenta o suficiente para cancelar a conexao com o servidor SMTP, o*   script ficará travado, pois não trato a quantidade de loops que ele erá fazer na função Esperar_Resp()**   Seja livre, distribua seu codigo, tire duvidas e de suporte a quem precisa.**   Duvidas:*   http://faidevel.zapto.org && http://www.fai.com.br/forum &&*   scorninpc[(at])gmail([dot)]com && #motd@irc.freenode.net*/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;		}	}}?>

formulario.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 = "smtp.servidor.com.br"; //Servidor  $Email->Autenticado = TRUE;  //É autenticado  $Email->Usuario = "usuario";  //Usuario  $Email->Senha = "senha";	//Senha    $Email->EmailDe = $_POST['origem'];  //seu email  $Email->EmailPara = "seu_email@dominio.com";  //Destino    $Email->Assunto = $_POST['assunto'];  //Assunto  $Email->Corpo = $_POST['mensagem'];  //Corpo    /*   * Caso precise anexar arquivos no email   * utilize:   * $Email->Anexar("/caminho/do/arquivo/1");   * $Email->Anexar("/caminho/do/arquivo/2");   * ...   * Não se esqueça que é necessario fazer o   * upload do cliente para o servidor primeiro   *   */      //Envia o email   if($Email->Enviar())   {	  echo "Seu email foi enviado corretamente";   }   else   {	  echo "Desculpe, seu email não pode ser enviado";   }?>

qualquer coisa pode postar ok?? =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, para enviar e-mail com autenticação, eu sugiro a classe PHPMailer.

Aqui tem um exemplo de como utilizar, fazendo a autenticação com o Gmail e em HTML.

 

Carlos Eduardo

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.