Ir para conteúdo

Arquivado

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

Devils Never Cry

[Resolvido] Problemas com a função mail

Recommended Posts

Olá! Estou com um problema com a função mail do PHP. Mesmo com o código mais simples possivel, não funciona:

CODE
<?

if(mail("meuemail@gmail.com", "Funcionou!!", "Só alegria XD"))

echo "enviou<br/>";

else

echo "não foi... ¬¬<br/>";

?>

"meuemail" obviamente é um email válido no gmail e eu sei que o problema não tem a ver com o domínio do email, pois já usei este mesmo email para testes e funcionava, só que o site ficava em outro servidor.

 

Bem, quanto ao meu problema, a função mail está retornando true, mas eu NUNCA recebo o email. Só posso imaginar que o problema esteja no servidor onde o site está hospedado, mas não entendo lhufas de configuração de servidor ou do PHP.

 

Será que alguém pode me dar uma luz sobre o que está acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

verificou a pasta de spam do seu e-mail?

tente com outros e-mails também, de diferentes servidores.

 

 

Talvez seu servidor requeira autenticação SMTP. Aí tem que usar uma classe, como a PHPMailer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

verificou a pasta de spam do seu e-mail?

tente com outros e-mails também, de diferentes servidores.

 

 

Talvez seu servidor requeira autenticação SMTP. Aí tem que usar uma classe, como a PHPMailer.

Sim, verifiquei, mas não chega mesmo. Ontem dei uma pesquisada em como enviar emails com autenticação SMTP e encontrei uma classe simples na net que tentei usar:

 

Arquivo smtp.php:

 

CODE
<?

 

// Autor Desconhecido

 

class Smtp{

 

var $conn;

var $user;

var $pass;

var $debug;

 

function Smtp($host){

$this->conn = fsockopen($host, 25, $errno, $errstr, 30);

$this->Put("EHLO $host");

}

function Auth(){

$this->Put("AUTH LOGIN");

$this->Put(base64_encode($this->user));

$this->Put(base64_encode($this->pass));

}

function Send($to, $from, $subject, $msg){

 

$this->Auth();

$this->Put("MAIL FROM: " . $from);

$this->Put("RCPT TO: " . $to);

$this->Put("DATA");

$this->Put($this->toHeader($to, $from, $subject));

$this->Put("\r\n");

$this->Put($msg);

$this->Put(".");

$this->Close();

if(isset($this->conn)){

return true;

}else{

return false;

}

}

function Put($value){

return fputs($this->conn, $value . "\r\n");

}

function toHeader($to, $from, $subject){

$header = "Message-Id: <". date('YmdHis').".". md5(microtime()).".". strtoupper($from) ."> \r\n";

$header .= "From: <" . $from . "> \r\n";

$header .= "To: <".$to."> \r\n";

$header .= "Subject: ".$subject." \r\n";

$header .= "Date: ". date('D, d M Y H:i:s O') ." \r\n";

$header .= "X-MSMail-Priority: High \r\n";

$header .= "Content-Type: Text/HTML";

return $header;

}

function Close(){

$this->Put("QUIT");

if($this->debug == true){

while (!feof ($this->conn)) {

fgets($this->conn) . "<br>\n";

}

}

return fclose($this->conn);

}

}

 

?>

E eis o envio de emails:

 

Arquivo mail_test.php:

 

CODE
<?

 

include("site_ip/classes/smtp.php");

 

/* Configuração da classe.smtp.php */

$host = "mail.dominio.com.br"; /*host do servidor SMTP */

$smtp = new Smtp($host);

$smtp->user = "usuario"; /*usuario do servidor SMTP */

$smtp->pass = "senha"; /* senha dousuario do servidor SMTP*/

$smtp->debug =true; /* ativar a autenticação SMTP*/

 

/* envia uma mensagem */

$from= "usuario@dominio.com.br"; /* seu e-mail */

$to = "me@gmail.com"; /* o e-mail cadastrado*/

$subject = "Teste de e-mail utilizando SMTP"; /* assunto da mensagem */

$msg = "Você está recebendo esta mensagem de teste<br>";

$msg .= "Para confirma clique no link abaixo";

 

if($smtp->Send($to, $from, $subject, $msg))/* faz o envio da mensagem */

echo "enviado!";

else

echo "problemas... ¬¬";

 

?>

Bem, para o host eu utilizei o servidor smtp do próprio site e também o do yahoo (smtp.mail.yahoo.com.br) e enviei os emails para contas do gmail, yahoo e hotmail. Apesar da função Send retornar true, nenhum email chegou. Quando digitei valores aleatórios para o host, não funcionou, ou seja, o script ao menos verifica corretamente a existência dos servidores SMTP.

 

Agora me encontro na ignorância de ser um mero coder e não fazer idéia de como o arquivo smtp.php funciona. Aquilo está correto? O que pode estar ocorrendo, sendo que nem utilizando o serviço smtp do Yahoo eu consegui enviar emails?

 

Eu procurei pelo PHPMailer, mas para o meu problema, ele parece se enquadrar no velho "canhão para matar formiga"... Tudo o que eu quero é mandar um simples email de confirmação de cadastro, droga!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre uso a classe PHPMailer, tanto para e-mails simples quanto para mais elaborados. Inclusive, uso o SMTP do Yahoo.

 

Estranho não funcionar nem com o SMTP do Yahoo. :unsure:

 

 

Tente usar a classe PHPMailer:

http://phpmailer.sourceforge.net

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=2476

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre uso a classe PHPMailer, tanto para e-mails simples quanto para mais elaborados. Inclusive, uso o SMTP do Yahoo.

 

Estranho não funcionar nem com o SMTP do Yahoo. :unsure:

 

 

Tente usar a classe PHPMailer:

http://phpmailer.sourceforge.net

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=2476

Valeu amigo, cabeça-dura é f***, o PHPMailer resolveu meu problema ^^

 

Agora um novo problema: Como eu altero o tipo de caracteres? Utilizei a função SetLanguage da classe, verifiquei se existia pt-br na pasta e lá está, mas um $mail->SetLanguage("br"); não funcionou. Também alterei diretamente na definição da função SetLanguage no próprio arquivo da classe, mas qualquer ~, ç e outro caractere especial não é identificado corretamente...

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.