diogopitz 0 Denunciar post Postado Fevereiro 25, 2009 Olá, pessoal! Criei uma página com um formulário de e-mail. A ação do formulário é a própria página, onde com o PHP eu resgato os dados do form e envio o e-mail, tudo na mesma página. <?php function valida_email($endereco){ $pattern = "^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-]+\.[a-zA-Z0-9\-\.]+$"; if (eregi($pattern, $endereco)){ return true; } else { return false; } } function verificaForm($nome, $email, $msg) { $t = 1; if($nome == "" || !valida_email($email) || $msg == "") $t = 0; return $t; } $a = 0; if(isset($_GET["e"])) { $a = 1; $nome = $_POST["nome"]; $email = $_POST["email"]; $msg = $_POST["mensagem"]; if(verificaForm($nome, $email, $msg)) { if(mail("meu@email.com", "Contato", $msg, "From: $nome<$email>"."\nContent-type: text/html")) print "Enviado..."; else print "Erro..."; } else print "Um ou mais campos apresentam erro."; } ?> <html> <head> </head> <body> <form name="form1" method="post" action="?e"> Nome:<br> <input type="text" name="nome" value="<?php print $a ? $nome : '' ?>"><br> E-mail:<br> <input type="text" name="email" value="<?php print $a ? $email : '' ?>"><br> Mensagem:<br> <textarea name="mensagem" rows="10" cols="50"><?php print $a ? $mensagem : '' ?></textarea><br> <input type="submit" value="Enviar"> <input type="button" value="Limpar" onClick="java script:document.form1.reset();"> </form> </body> </html> O e-mail simplesmente não chega, apesar de a função mail retornar true! Já tentei usar emails de destino diferentes. Pelo jeito o problema é simples de resolver.. sempre usei a função mail e nunca tive problema, mas agora tá dando isso, e não entendo por quê. Obrigado, Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Fevereiro 25, 2009 Que MTA você está usando ? É na sua máquina que você está rodando o Apache ? Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Fevereiro 25, 2009 Não, não estou rodando na minha máquina. É num servidor da locaweb. O estranho é que, se eu crio um arquivo php simples, tipo <?php mail( ... . . .) ?> o email chega ... mas desse jeito que mostrei não... Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Fevereiro 25, 2009 A hospedagem é Linux ou Windows ? Posta aqui o jeito que você disse que funciona. Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Fevereiro 25, 2009 =S fui fazer outro teste pra te mostrar o jeito que funcionava, e agora simplesmente funcionou o arquivo original, sendo que eu não alterei uma vírgula dele. de certo era alguma instabilidade no servidor! o problema agora foi que o e-mail chegou na caixa de spam... qual a causa disso? como resolve? valeu, abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Fevereiro 26, 2009 depende de muitos fatores. primeiro me diga se o servidor é windows ou linux. Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Fevereiro 26, 2009 Olá, Marcio! O servidor é linux! Obrigado pela ajuda até agora. Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Fevereiro 26, 2009 Tenta assim: // todo item dos cabeçalhos devem ser separados pelo line feed, no caso Linux é "\n" $headers = "From: $nome<$email>\n"; $headers .= "Content-type: text/html\n" if(mail("meu@email.com", "Contato", $msg, $headers)) print "Enviado...";ALguns servidores exigem que valor do from no email enviado seja do mesmo domínio do site. Outros exigem a passagem do cabeçalho reply-to: $headers .= "Reply-to:fulano<email@dofulano>\n";Testa aí e veja se deu certo. Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Fevereiro 27, 2009 Não funcionou ... nem de um jeito, nem de outro. =( Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Fevereiro 28, 2009 Humm. Deixa eu ver como ficou o script que envia a mensagem. Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Março 1, 2009 Olá, Marcio! Desculpe a demora pra responder... Então, agora fazendo outros testes, notei algo muito estranho... Quando o e-mail remetente é @gmail.com, a mensagem simplesmente não chega... se for outra domínio (testei vários) a mensagem chega normalmente. O que pode estar causando isso? Atualmente o código está assim: (embora eu não ache que o problema esteja nele). <?php function valida_email($endereco){ $pattern = "^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-]+\.[a-zA-Z0-9\-\.]+$"; if (eregi($pattern, $endereco)){ return true; } else { return false; } } function verificaForm($nome, $email, $msg) { $t = 1; if($nome == "" || !valida_email($email) || $msg == "") $t = 0; return $t; } $a = 0; if(isset($_GET["e"])) { $a = 1; $nome = $_POST["nome"]; $email = $_POST["email"]; $msg = $_POST["mensagem"]; if(verificaForm($nome, $email, $msg)) { $headers = "From: $nome<$email>\n"; $headers .= "Reply-to:$nome<$email>\n"; $headers .= "Content-type: text/html\n"; $envia = mail("contato@meusite.com.br", "Contato", $msg, $headers); if($envia) print "E-mail enviado com sucesso!"; else print "Ocorreu um erro durante o envio."; } else print "Um ou mais campos apresentam erro."; } ?> <html> <head> <style type="text/css"> <!-- body { font: 12px verdana, arial, helvetica, sans-serif; } input { background: #FFFAFA; font: 12px verdana, arial, helvetica, sans-serif; color:#000; border:1px solid #FA8072; } textarea { background: #FFFAFA; font: 12px verdana, arial, helvetica, sans-serif; color:#000; border:1px solid #FA8072; } --> </style> </head> <body> <form name="form1" method="post" action="?arquivo=form_mail&e"> Nome:<br> <input type="text" name="nome" value="<?php if(!$envia) print $a ? $nome : '' ?>"><br> E-mail:<br> <input type="text" name="email" value="<?php if(!$envia) print $a ? $email : '' ?>"><br> Mensagem:<br> <textarea name="mensagem" rows="10" cols="50"><?php if(!$envia) print $a ? $mensagem : '' ?></textarea><br> <input type="submit" value="Enviar"> <input type="button" value="Limpar" onClick="java script:document.form1.reset();"> </form> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 2, 2009 Experimenta colocar o quinto parâmetro da função: $email_de_onde_esta_sendo_enviado = 'email@dominiodosite.com.br'; mail($to, $assunto', $mensagem, $headers, "-f$email_de_onde_esta_sendo_enviado"); Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Março 2, 2009 Essa variável que você criou seria o valor digitado pelo usuário no campo e-mail? Se for, continua não funcionando... o que eu não entendo é pq só quando o remetente é do gmail que não funciona... Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Março 2, 2009 Talvez o gmail exija que as mensagens recebidas sejam enviadas pelo servidor do mesmo domínio da assinatura. Isto deve ser uma medida anti-spam. Pra mim funciona normalmente, pois sempre envio as mensagens usando uma conta de SMTP. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 2, 2009 no ms-dos do windows ou no shell do linux execute nslookup -type=MX dominio.do.seu.site mostre aqui o que retornou se não for nada confidencial.. sample nslookup -type=MX imasters.com.br result: Server: UnKnown Address: 192.168.1.1 Non-authoritative answer: imasters.com.br MX preference = 5, mail exchanger = br03.dialhost.com.br imasters.com.br nameserver = ns1.dialhost.com.br imasters.com.br nameserver = ns2.dialhost.com.br imasters.com.br nameserver = ns4.dialhost.com.br imasters.com.br nameserver = ns3.dialhost.com.br Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Março 3, 2009 clinicapersonality.com.br MX preference = 10, mail exchanger = mx02.mx-server.net clinicapersonality.com.br MX preference = 10, mail exchanger = mx01.mx-server.net clinicapersonality.com.br nameserver = ns3.locaweb.com.br clinicapersonality.com.br nameserver = ns1.locaweb.com.br clinicapersonality.com.br nameserver = ns2.locaweb.com.br Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 4, 2009 ok, isso elimina diversas possibilidades de erro faça 2 testes simples 1. tmp.php <?php echo ini_get( 'sendmail_from' ); ?> 2. email.php <?php $mail = array( 'FromMail' => 'usuario@gmail.com', 'FromName' => 'nome_do_remetente', 'ToMail' => 'email@do.destinatario', 'ToName' => 'nome_do_destinatario', 'ReturnMail' => 'usuario@gmail.com', 'ReturnName' => 'nome_do_remetente_ou_retorno', 'Subject' => 'teste_' . time(), 'Body' => 'Content Here', 'Content-type' => 'text/html', 'charset' => 'UTF-8', 'MIME-Version' => '1.0', 'Encoding' => '8bit', 'Header' => array( 'From: ' . $mail['FromName'] . '<' . $mail['FromMail'] . '>', 'To: ' . $mail['ToName'] . '<' . $mail['ToMail'] . '>', 'Reply-To: ' . $mail['ReturnName'] . '<' . $mail['ReturnMail'] . '>', 'Return-Path: ' . $mail['ReturnName'] . '<' . $mail['ReturnMail'] . '>', 'MIME-Version: ' . $mail['MIME-Version'], 'Content-type: ' . $mail['Content-type'] . ';', ' charset="' . $mail['charset'] . '"', 'Content-Transfer-Encoding: ' . $mail['Encoding'], ); ); ini_set( 'sendmail_from', $mail['FromMail'] ); mail( $mail['ToEmail'], $mail['Subject'], $mail['Body'], join( PHP_EOL, $mail['Header'] ) ); ?> Compartilhar este post Link para o post Compartilhar em outros sites
diogopitz 0 Denunciar post Postado Março 4, 2009 o tmp.php não retornou nada na tela. já o email.php não enviou o email, mesmo com um from que não seja do gmail... Compartilhar este post Link para o post Compartilhar em outros sites
danielsys 0 Denunciar post Postado Março 5, 2009 Estou tendo este mesmo problema, meu servidor também é Linux. Aparentemente parece que envia mais não chega no destino e não mostra nenhum erro. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 5, 2009 o segundo teste serviu apenas para ver o seu nível de atenção pois coloquei alguns erros propositadamente 1 Parse error: parse error, expecting `')'' in C:\_w\tests\email.php on line 31 nesse trecho 'Content-Transfer-Encoding: ' . $mail['Encoding'], ); corrigir retiranto o ";" 'Content-Transfer-Encoding: ' . $mail['Encoding'], ) após a correção, outros erros serão apresentados: 2 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 23 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 23 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 24 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 24 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 25 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 25 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 26 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 26 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 27 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 28 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 29 Notice: Undefined variable: mail in C:\_w\tests\email.php on line 30 Notice: Undefined index: ToEmail in C:\_w\tests\email.php on line 36 o script completo, corrigido email.php <?php $mail = array( 'SMTP_HOST' => 'localhost', 'SMTP_PORT' => 25, 'FromMail' => email@gmail.com', 'FromName' => 'nome do remetente', 'ToMail' => 'teste@destinatario', 'ToName' => 'destinatario', 'ReturnMail' => 'email@gmail.com', 'ReturnName' => 'nome do remetente', 'Subject' => 'teste_' . time(), 'Body' => 'Content Here', 'Content-type' => 'text/html', 'charset' => 'UTF-8', 'MIME-Version' => '1.0', 'Encoding' => '8bit', ); $mail['Header'] = array( 'From: ' . $mail['FromName'] . '<' . $mail['FromMail'] . '>', 'To: ' . $mail['ToName'] . '<' . $mail['ToMail'] . '>', 'Reply-To: ' . $mail['ReturnName'] . '<' . $mail['ReturnMail'] . '>', 'Return-Path: ' . $mail['ReturnName'] . '<' . $mail['ReturnMail'] . '>', 'MIME-Version: ' . $mail['MIME-Version'], 'Content-type: ' . $mail['Content-type'] . ';', ' charset="' . $mail['charset'] . '"', 'Content-Transfer-Encoding: ' . $mail['Encoding'], ); ini_set( 'SMTP', $mail['SMTP_HOST'] ); ini_set( 'smtp_port', $mail['SMTP_PORT'] ); ini_set( 'sendmail_from', $mail['FromMail'] ); // for windows only mail( $mail['ToMail'], $mail['Subject'], $mail['Body'], join( PHP_EOL, $mail['Header'] ) ); ?> Antes de executar o script acima, execute essa guia de configurações. Será exibido as configurações do php.ini referente aos parâmetros listados no array: errors_get.php <?php $n = array( 'error_reporting', 'display_errors', 'display_startup_errors', 'log_errors', 'track_errors', 'error_log', 'smtp', 'smtp_port', 'sendmail_path', ); foreach( $n as $k => $v ) { echo '<b>'; echo $v; echo '</b>: '; echo ini_get( $v ); echo '<br>'; } ?> Compartilhar este post Link para o post Compartilhar em outros sites