Php email - estranho

Guimaraez

Banido
Boas,
Tenho um site em php, onde ta incluida uma funçao mail em php em que acontece uma cena estranha acho eu.
Depois da pessoa preencher o formulario de email etc e enviar e mostrada a mensagem de sucesso. Ate aqui tudo bem.

Se tiver o codigo assim da na perfeiçao, mas juntamente da mensagem de sucesso aparece-me o relatorio de envio do servidor smtp.

PHP:
include ("smtp.class.php");

$from = $_POST['email'];
$subject = $_POST['assunto'];
$msg = $_POST['mensagem'];
$to = "*******@sapo.pt";



$smtp = new Smtp("smtp.telepac.pt");
$smtp->user = "******@sapo.pt";
$smtp->pass = "******";
$smtp->debug = true;

if($smtp->Send($to, $from, $subject, $msg)){
echo "<font color='FFFFFF'>O seu email foi enviado com sucesso. Aguarde a nossa resposta. Obrigado</font>";
}else{
echo "falha ao enviar;_;";
}
Mas se eu quiser ocultar o dito relatorio, fazendo isto:

PHP:
$smtp->debug = false;
os mails ja nao chegam a minha caixa...

Help me :confused:
 
Eu não sei como é que isso está a trabalhar "por trás", por isso posso-te só pedir para ver o conteúdo do smtp.class.php?
 
smtp.class.php ->

PHP:
class Smtp{

var $conn;
var $user;
var $pass;
var $debug = true;

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, $ad=''){

$this->Auth();
$this->Put("MAIL FROM: " . $from);
$this->Put("RCPT TO: " . $to);
$this->Put("DATA");
$this->Put($this->toHeader($to, $from, $subject, $ad));
$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, $ad=''){
$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 .= $ad;
return $header;
}
function Close(){
  $this->Put("QUIT");
  if($this->debug == true){
  while (!feof ($this->conn)) {
    echo fgets($this->conn) . "<br>\n";
  }
  }
  return fclose($this->conn);
}
}
 
Não sei ao certo como funcionam os servidores de SMTP, mas pelo código que mostraste a unica diferença entre o debug ser true ou false e' na função Close(), que apenas no caso de ser true lê o conteudo do stream; se for false não lê nada e fecha logo a ligação. Talvez o servidor precise que o cliente leia tudo para o mail ser enviado com sucesso ?

De qualquer maneira, tenta alterar a função Close() da classe para isto:

PHP:
function Close(){
  $this->Put("QUIT");

  $resposta = '';
  while (!feof ($this->conn))
    $resposta .= fgets($this->conn) . "<br>\n";

  if($this->debug == true)
    echo $resposta;

  return fclose($this->conn);
}
 
Back
Topo