leo1987 0 Denunciar post Postado Julho 8, 2009 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
Diego Macêdo 6 Denunciar post Postado Julho 8, 2009 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
leo1987 0 Denunciar post Postado Julho 8, 2009 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
Diego Macêdo 6 Denunciar post Postado Julho 8, 2009 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
vitorm11 3 Denunciar post Postado Julho 8, 2009 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
leo1987 0 Denunciar post Postado Julho 8, 2009 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
vitorm11 3 Denunciar post Postado Julho 8, 2009 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
leo1987 0 Denunciar post Postado Julho 8, 2009 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
leo1987 0 Denunciar post Postado Julho 8, 2009 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
Diego Macêdo 6 Denunciar post Postado Julho 8, 2009 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
vitorm11 3 Denunciar post Postado Julho 8, 2009 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