Galera sempre usei esse script, porém de uns tempos pra cá vem gerando
Galera!
Sempre usei esse script pra enviar e-mail.
dai então beleza sempre funfou (aprox 1 ano funfando).
porém ontem quando fui usá-lo começou a gerar erro i num funfa +.
gera sempre o mesmo erro
"""""""""""""""""""""
Warning: fsockopen() [function.fsockopen]: unable to connect to localhost:25 in /home/mdesign/public_html/morfosdesign/classes/smtp.class.php on line 144
Warning: fgets(): supplied argument is not a valid stream resource in /home/mdesign/public_html/morfosdesign/classes/smtp.class.php on line 132
""""""""""""""""""""""
segue o código da classe.
class.smtp.php
____________________________________________
<?
/*
* Classe SendMail e todas as suas funções foraum escrita por: Bruno Pitteli Gonçalves ||
*scorninpc[(at])gmail([dot)]com como necessidade
*ao se deparar com tal problema em enviar emails com anexos em servidores SMTP auteticados na criação
*do portal http://www.unimed-andradina.com.br.
* Esta classe ou qualquer função nela contida pode ser usada em qualquer programa com fins lucrativos ou não,
*porem devem ser setados no trexo do codigo fonte o nome e email do autor, e qual a
*modificação caso ouver.
* O autor não é responsavel por erros e danos nestas funções.
*
* Possiveis problemas:
* Anexar mais de 10 arquivos sem ter auterado o array $Anexos para suportar mais que 10 anexos
* Anexar um arquivo de tipo não setado que não seja uma aplicação (necessita de testes)
* Caso a internet seja lenta o suficiente para cancelar a conexao com o servidor SMTP, o
* script ficará travado, pois não trato a quantidade de loops que ele erá fazer na função Esperar_Resp()
*
* Seja livre, distribua seu codigo, tire duvidas e de suporte a quem precisa.
*
* Duvidas:
* http://faidevel.zapto.org && http://www.fai.com.br/forum &&
* scorninpc[(at])gmail([dot)]com && #motd@irc.freenode.net
*/
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(60);
}
//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/html; 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;
}
}
}
?>
___________________________________________________________________________
chamar a classe
__________________________________________________________________________
$Email = new SendMail;
$Email->Servidor="$suportmailsmtp"; //Servidor
$Email->Autenticado=TRUE; //É autenticado
$Email->Usuario="$suportmaillog"; //Usuario
$Email->Senha="$suportmailsen"; //Senha
$Email->Barra="/"; //barra pra windows
$Email->EmailDe="$suportmailend"; //seu email
$Email->EmailPara="$sendm"; //Destino
$Email->Assunto="CONTATO_(s/c-site)"; //Assunto
$Email->Corpo="$html"; //Corpo
if($Email->Enviar()) { //Envia o email
echo "<font color=\"#FFFFFF\">....</font>Email enviado!<BR>";
} else {
echo "<font color=\"#FFFFFF\">....</font>Email não pode ser enviado!<BR>";
}
________________________________________________________________________________
__--
Discussão (1)
Carregando comentários...