Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Hayek

Problemas com smtp!

Recommended Posts

Olá amigos!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Estou com problemas na miinha classe smtp que dá

o seguinte erro:

 

Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/sasmet/public_html/smtp.class.php on line 9

 

Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.sasmet.com.br:25 (Unknown error) in /home/sasmet/public_html/smtp.class.php on line 9

 

Warning: fputs(): supplied argument is not a valid stream resource in /home/sasmet/public_html/smtp.class.php on line 35

 

logo abaixo o código..

 

CODE
<?

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);

}

}

 

?>

Agradeço muito quem puder ajudar..já tô quase louco e não consigo

descobrir o erro.. :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você ta chamando essa classe?

Mostra ai a parte que voce chama a classe.

 

Aparentemente você ta passando algum parametro errado pro fsockopen. não consegui achar o smtp.sasmet.com.br, muito menos na porta 25. verifica esse host ae =)

 

talvez esse IP funcione 70.47.69.157 (consegui conectar no smtp por ele, é o IP desse host ae)

 

outra coisa, nunca gostei na função mail(), mas depois que aprendi a usa-la, não largo mais.

 

se ta localhost, coloca esse IP ai no seu php.ini, ou algum outro. Funciona =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fiz o que você falou..

coloquei o número do ip no host e deu certo..

mas só enviou uma vez... depois não enviou mais.

ta dando o seguinte erro:

 

Fatal error: Cannot redeclare class Smtp in /home/sasmet/public_html/smtp.class.php on line 2

 

abaixo está o código com a modificação que você sugeriu, em $host estava o end de mail.sasmet.com.br:

 

CODE
<?

include "funcoes.php";

conecta();

$sql = mysql_query("SELECT * FROM cliente");

$num=mysql_num_rows($sql);

echo "$num";

$data = (int)date('m'); // aqui pegamos apenas o mês da data.

echo "$data";

$cont="0";

while ($linha = mysql_fetch_array($sql)){

$cont = $cont + 1;

$cliente = $linha['cliente'];

$empresa = $linha['empresa'];

$usuario = $linha['usuario'];

$senha = $linha['senha'];

$pagina = $linha['pagina'];

$vencimento = $linha['vencimento']; // aqui o valor do banco é apenas o mês ex: junho

$email = $linha['email'];

$msg = "Prezado cliente, ";

if ($vencimento == $data) { // ou seja, se vencimento for igual ao mês corrente.

echo "bateu! <br>";

echo "$vencimento";

include ("smtp.class.php");

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

$host = "70.47.69.157";

$smtp = new Smtp($host);

$smtp->user = "sasmet@sasmet.com.br";

$smtp->pass = "sasmet";

$smtp->debug = true;

$from= "MENSAGEM DE TESTE";

$to = $email;

$subject = "** AVISO DE VENCIMENTO DE EXAMES **";

$msg = "*** ATENÇÃO ***<br>";

$msg .= " MENSAGEM DE TESTE";

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

$smtp->Send($to, $from, $subject, $msg);

sleep(30);

}//fecha if

}//fecha while

?>

 

Será que o problema é no servidor?? algum controle de spam ou algo parecido??

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não é o que eu te passei, o problema é que você colocou um include dentro de um while, e isso ta gerando o erro.

 

tira ele do while e coloca ele na 1° linha do seu script, ou entao usa o require()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Eu estou com um problema bem estranho, aqui na empresa foi instalado um servidor de email Exchange, e o pessoal deixou habilitado internamente para enviar email sem autenticação. Ai eu tenho o código abaixo, ele se conecta e envia email, só que quando eu troco o corpo do email ou o assunto ele não envia. Só envia como esta no código, alguem sabe me dizer o por que?

 

function send($de,$deNome,$para,$paraNome,$corpo,$assunto){
	$data	= 'Date: '.date('r',time());	   // este formato é exigência do servidor
	   
	// primeiro vamos definir as informações para o servidor SMTP
	$servidor= "10.1.5.101";	 // nome do servidor
	$porta   = 25;							 // número da porta, o email sempre fica na 25
	$timeout = 10;							 // tempo para expirar a tentativa de conexão


	// abre conexão com o servidor SMTP utilizando a função fsockopen
	// o @ no início é para ocultar as mensagens de erro automáticas
	// porque vamos manipular os erros através das variáveis $errno e $errstr
	$conexao = @fsockopen($servidor, $porta, $errno, $errstr, $timeout);
	// se houve erro a variável $errno vem ligada
	if ($errno){
		echo "Erro ao conectar ao $servidor na $porta: ".$errstr;
		exit;
	}
	// se não há erro continua o script
	echo "conectou com: ".$conexao."<br>";
	echo fgets($conexao, 1024)."<br>";
	
	// handshaking com o servidor
	fputs($conexao,"EHLO $servidor\r\n", 512);
	do{
		$buffer = fgets($conexao, 512);
		echo "loop: ".$buffer."<br>";
		$teste = substr($buffer, 4,8);
	}while ($teste != '8BITMIME');

	// estabelece um email de retorno para receber msgs de erro
	fputs($conexao, "MAIL FROM:<$de>\r\n", 512);
	echo fgets($conexao, 512)."<br>";
	
	// estabelece o endereço de envio
	fputs($conexao, "RCPT TO:<$para>\r\n", 512);
	echo fgets($conexao, 512)."<br>";
	
	// comanda o inicio do email a ser enviado
	fputs($conexao, "DATA\r\n", 512);
	echo fgets($conexao, 512)."<br>";
	// infomações do email a ser enviado
	fputs($conexao, "MIME-Version: 1.1\r\n");
	fputs($conexao, "Content-Type: text/html; charset=iso-8859-1\r\n");
	fputs($conexao, "Disposition-Notification-To: " . $de . " <$de>\r\n");
	fputs($conexao, "Date: $data\r\n");
	fputs($conexao, "From: $deNome <$de>\r\n");
	fputs($conexao, "To: $paraNome <$para>\r\n");
	fputs($conexao, "Subject: $assunto\r\n");
	fputs($conexao, "\r\n");
	fputs($conexao, "$corpo\r\n.\r\n");
	echo fgets($conexao, 512)."<br>";
	
	// encerra a conexão com o servidor
	fputs($conexao, "QUIT\r\n", 512);
	echo fgets($conexao, 512)."<br>";
	fclose($conexao);
	echo("Enviado para $para");
	exit;
}

$de	  = "henrique.t@perkons.com.br";
$deNome  = "Henrique Tschannerl";
$para	= "h.tschannerl@gmail.com";
$paraNome= "Tschannerl";
$corpo   = "Este email é um email de teste favor responder assim que receber para henrique.t@perkons.com";
$assunto = "Email Teste";

send($de,$deNome,$para,$paraNome,$corpo,$assunto);

Qualquer coisa pode me enviar um email henrique@perkons.com

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.