Ir para conteúdo

POWERED BY:

Arquivado

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

InterPlanet

[Resolvido] Envio de e-mail autenticado com fsockopen()

Recommended Posts

Boa noite a todos!

Mais uma vez, aqui estou eu. Vamos lá!

 

A chamada:

 

<?php
##################################
# IPis - ©2000-2011              #
# http://www.ipis.com.br         #
# info@ipis.com.br               #
# Script by Fernando Lima        #
##################################

/********************
* EMAIL : COBRANCA *
********************/

// INCLUDES
$Base                        = '../../../';
                              Require_Once($Base.'sis/funcoes/geral.php');
                              Require_Once($Base.'sis/funcoes/email.php');
                              //Require_Once('sis/includes/email/cobranca.php');

$De                          = Array('Nome' => 'IPis', 'Email' => 'info@ipis.com.br');
$Para                        = Array('Nome' => 'Fernando', 'Email' => 'fernando.r.lima@hotmail.com');
$Assunto                     = 'Teste de Cobrança';
$Mensagem                    = '...';
$SMTP                        = Array('Servidor' => 'mail.ipis.com.br', 'Usuario' => $De['Email'], 'Senha' => 'frl0258F');
$RT                          = Email($De, $Para, $Assunto, $Mensagem, "comercial@ipis.com.br", "comercial@ipis.com.br", True, $SMTP);
?>

 

A função:

 

<?php
##################################
# IPis - ©2000-2011              #
# http://www.ipis.com.br         #
# info@ipis.com.br               #
# Script by Fernando Lima        #
##################################

/*********
* ENVIO *
*********/

Function Email($De = Array(), $Para = Array(), $Assunto = '', $MSG = '', $Copia = '', $Copia_Oculta = '', $Autenticar = True, $SMTP = Array())
{
// VARIAVEIS
// ...

// VALIDACOES
// ...

/*** HEADERS ***/
$Headers                     = "MIME-Version: 1.0\r\n";
$Headers                    .= "Content-type: text/html; charset=iso-8859-1\r\n";
$Headers                    .= empty($De['Nome']) ? "From: {$De['Email']}\r\n" : "From: ".Email_Encode($De['Nome'])."<{$De['Email']}>\r\n";
$Headers                    .= empty($De['Nome']) ? "Reply-To: {$De['Email']}\r\n" : "Reply-To: ".Email_Encode($De['Nome'])."<{$De['Email']}>\r\n";
$Headers                    .= empty($Para['Nome']) ? "To: {$Para['Email']}\r\n" : "To: ".Email_Encode($Para['Nome'])."<{$Para['Email']}>\r\n";
$Headers                    .= empty($Copia) ? "" : "Cc: {$Copia}\r\n";
$Headers                    .= empty($Copia_Oculta) ? "" : "Bcc: {$Copia_Oculta}\r\n";
$Headers                    .= "Subject: ".Email_Encode($Assunto)."\r\n";
$Headers                    .= "Date: ".date('D, d M Y H:i:s O')."\r\n";
$Headers                    .= "X-Mailer: PHP/".phpversion()."\r\n".
$Headers                    .= "X-SenderIP: {$_SERVER['REMOTE_ADDR']}\r\n";
If (isSet($_SERVER['HTTP_X_FORWARDED_FOR']))
  { $headers               .= "X-SenderIP-Lan: {$_SERVER['HTTP_X_FORWARDED_FOR']}\r\n"; }

/*** MENSAGEM ***/
$Cabecalho                   = '';
$Rodape                      = '';
$Mensagem                    = $Cabecalho.$MSG.$Rodape;

/*** ENVIO ***/
// AUTENTICAO
If ($Autenticar !== False)
  { If (empty($SMTP) || !is_array($SMTP))
       { Return Array('Erro' => 1, 'Desc' => 'Dados para autenticação SMTP ausentes/corrompidos'); }

    // Conexao
    $Porta                  = empty($SMTP['Porta']) || !is_numeric($SMTP['Porta']) ? 25 : intval($SMTP['Porta']);
    $Tempo                  = empty($SMTP['Tempo']) || !is_numeric($SMTP['Tempo']) ? 30 : intval($SMTP['Tempo']);
    $Conexao                = fsockopen($SMTP['Servidor'], $Porta, $Erro_ID, $Erro_Desc, $Tempo);

    // Erro de conexão
    If ($Conexao === False)
       { Return Array('Erro' => $Erro_ID, 'Desc' => $Erro_Desc); }

    // Escrita
    fputs($Conexao, "EHLO {$SMTP['Servidor']}\r\n");
    fputs($Conexao, "AUTH LOGIN\r\n");
    fputs($Conexao, base64_encode($SMTP['Usuario'])."\r\n");
    fputs($Conexao, base64_encode($SMTP['Senha'])."\r\n");
    //fputs($Conexao, "MAIL FROM: {$De['Email']}\r\n");
    $From                   = empty($De['Nome']) ? "MAIL FROM: {$De['Email']}\r\n" : "MAIL FROM: ".Email_Encode($De['Nome'])."<{$De['Email']}>\r\n";
    fputs($Conexao, $From);
    fputs($Conexao, "RCPT TO: {$Para['Email']}\r\n");
    fputs($Conexao, "DATA\r\n");
    fputs($Conexao, "{$Headers}\r\n");
    fputs($Conexao, "{$Mensagem}\r\n");
    fputs($Conexao, ".\r\n");
    fputs($Conexao, "QUIT\r\n");

    // Debug
    $Dedug                  = "";
    While (!feof($Conexao))
          { $Dedug         .= fgets($Conexao)."<BR>\n";
          } Echo $Dedug;

    // Retorno
    $RT                     = Array('Erro' => 0, 'Info' => 'E-mail ['.$Assunto.'] enviado para ['.$Para['Email'].'] com sucesso');
  }
// NORMAL
Else {
      // mail() do php
    }

Return $RT;
}
?>

 

A função Email_Encode() é pra resolver o problema de codificao no cabeçalho, estou usando quoted_printable_encode($String) como retorno.

 

A Saída: (código de debug da função)

 

...

235 2.0.0 Authentication successful

250 2.1.0 Ok

250 2.1.5 Ok

354 End data with .

250 2.0.0 Ok: queued as 0915B1057431

221 2.0.0 Bye

 

Como podem ver, sem problemas no envio!

 

Os Problemas:

 

1) As cópias, Cc e Bcc no header do email, não chegam d ejeito nenhum!

 

2) Os cabeçalhos chegam duplicados, tipo:

 

imaters_email.png

 

Alguma luz nos problemas?

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.