Ir para conteúdo
Fórum Script Brasil
  • 0

problema de autenticação na função mail()


Jader Rafael Pereira

Pergunta

Ola pessoal

estou com o seguinte problema tenho uma area de contato no meu site so que na hora de mandar e-mail ele da falha... eu pesquisei aqui no meu servidor e é problema de autenticação no servidor. dai criei um usuario e uma senha para poder autenticar..

gostaria de saber como faço para ele altenticar no meu codigo..

<?php
// Recebe as variáveis do formulário de contato
$nome = $_POST['nome'];
$empresa = $_POST['empresa'];
$fone = $_POST['fone'];
$email = $_POST['email'];
$cidade = $_POST['cidade'];
$assunto = $_POST['assunto'];
$mensagem = $_POST['mensagem'];;

ini_set("SMTP","smtp.datasolver.net" );
ini_set('sendmail_from', 'formeemail@datasolver.net');

// dados para envio do e-mail
$data = date("d/m/Y h:i");
$email_dest = "atendimento@datasolver.net";
$nome_dest = $nome;
$assunto="Contato de Cliente (Mensagem Dúvidas, Sugestões e Reclamações)";
//corpo é como a mensagem vai chegar para o destinatário
$corpo="Enviado por:\nnome: $nome\nemail: $email\nmensagem $mensagem\n\nenviado em: $data";
$cabecalho = "From: $nome <$email>\n";

ini_set('SMTP','25');

if (mail($email_dest, $assunto, $corpo, $cabecalho)){
echo 'EMAIL OK \n';
}else{
echo 'FALHOU \n';
}

echo "E-mail enviado com sucesso!";
?>

abraço

Editado por Jonathan Queiroz
Adcionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Ola pessoal

estou com o seguinte problema tenho uma area de contato no meu site so que na hora de mandar e-mail ele da falha... eu pesquisei aqui no meu servidor e é problema de autenticação no servidor. dai criei um usuario e uma senha para poder autenticar..

gostaria de saber como faço para ele altenticar no meu codigo..

<?php

// Recebe as variáveis do formulário de contato

$nome = $_POST['nome'];

$empresa = $_POST['empresa'];

$fone = $_POST['fone'];

$email = $_POST['email'];

$cidade = $_POST['cidade'];

$assunto = $_POST['assunto'];

$mensagem = $_POST['mensagem'];;

ini_set("SMTP","smtp.datasolver.net" );

ini_set('sendmail_from', 'formeemail@datasolver.net');

// dados para envio do e-mail

$data = date("d/m/Y h:i");

$email_dest = "atendimento@datasolver.net";

$nome_dest = $nome;

$assunto="Contato de Cliente (Mensagem Dúvidas, Sugestões e Reclamações)";

//corpo é como a mensagem vai chegar para o destinatário

$corpo="Enviado por:\nnome: $nome\nemail: $email\nmensagem $mensagem\n\nenviado em: $data";

$cabecalho = "From: $nome <$email>\n";

ini_set('SMTP','25');

if (mail($email_dest, $assunto, $corpo, $cabecalho)){

echo 'EMAIL OK \n';

}else{

echo 'FALHOU \n';

}

echo "E-mail enviado com sucesso!";

?>

abraço

Amigo, salva o código abaixo em um arquivo chamado Mail.php:

<?php
    /**
     * Envia emails utilizando autenticação em um servidor SMTP
     */
    abstract class Mail {
        /**
         * Recurso retornado pelo fsockopen
         * @var resource
         */
        static private $smtp;

        /**
         * Servidor SMTP
         * @var string
         */
        static private $smtp_host;

        /**
         * Porta do servidor SMTP
         * @var integer
         */
        static private $smtp_port;

        /**
         * Nome do usuário
         * @var string
         */
        static private $smtp_user;

        /**
         * Senha do usuário
         * @var string
         */
        static private $smtp_pswd;

        /**
         * Define se a classe já foi configurada
         * @var boolean
         */
        static private $configured;

        /**
         * Lista de cabeçalhos
         * @var array
         */
        static private $headers;

        /**
         * Configura o envio de email
         *
         * @param string $host O servidor de SMTP
         * @param integer $port A porta usada pelo servidor (padrão 25)
         * @param string $user O nome do usuário
         * @param string $pswd A senha
         */
        static public function configure( $host , $port = 25 , $user , $pswd ){
            $errno = 0;
            $error = "";

            self::$smtp_host = $host;
            self::$smtp_port = $port;
            self::$smtp_user = $user;
            self::$smtp_pswd = $pswd;
            self::$headers = array();

            if ( ( self::$smtp = fsockopen( self::$smtp_host , self::$smtp_port , $errno , $error , 1 ) ) ){
                self::$configured = true;
            } else {
                throw new Exception( sprintf( "Não foi possível criar socket com o servidor, Erro[ %d ]: %s" , $errno , $error ) );
            }
        }

        /**
         * Adiciona cabeçalhos para serem enviados para o servidor
         *
         * @static
         * @param string $field O nome do campo do cabeçalho
         * @param string $value O valor do campo
         */
        static public function addHeader( $field , $value ){
            self::$headers = array( "field" => $field , "value" => $value );
        }

        /**
         * Fecha a conexão
         *
         * @param boolean $force Evita a verificação do comando QUIT destruindo direto o socket
         */
        static private function close( $force = false ){
            if ( self::$smtp ){
                fputs( self::$smtp , "QUIT\r\n" );
                $resp = fgets( self::$smtp , 256 );

                if ( !$force ){
                    if ( substr( $resp , 0 , 3 ) != "221" ){
                        throw new Exception( "Falha ao cancelar a conexão" );
                    }
                }

                fclose( self::$smtp );
            }
        }

        /**
         * Efetua a conexão com o servidor SMTP
         *
         * @return boolean TRUE se for possível conectar ao servidor
         */
        static private function connect(){
            $ret = false;

            $resp = fgets( self::$smtp , 256 );

            if ( substr( $resp , 0 , 3 ) == "220" ){
                /**
                 * Tentamos iniciar diálogo com o servidor
                 */
                fputs( self::$smtp , sprintf( "HELO %s\r\n" , self::$smtp_host ) );
                $resp = fgets( self::$smtp , 256 );

                if ( substr( $resp , 0 , 3 ) == "250" ){
                    /**
                     * Tentamos iniciar autenticação
                     */
                    fputs( self::$smtp , "auth login\r\n" );
                    $resp = fgets( self::$smtp , 256 );

                    if ( substr( $resp , 0 , 3 ) == "334" ){
                        /**
                         * Enviamos o nome do usuário primeiro
                         */
                        fputs( self::$smtp , sprintf( "%s\r\n" , base64_encode( self::$smtp_user ) ) );
                        $resp = fgets( self::$smtp , 256 );

                        if ( substr( $resp , 0 , 3 ) == "334" ){
                            /**
                             * Enviamos a senha do usuário
                             */
                            fputs( self::$smtp , sprintf( "%s\r\n" , base64_encode( self::$smtp_pswd ) ) );
                            $resp = fgets( self::$smtp , 256 );

                            /**
                             * Tudo ok, estamos conectados !!!
                             */
                            if ( substr( $resp , 0 , 3 ) == "235" ){
                                $ret = true;
                            } else {
                                throw new Exception( "Não foi possível autenticar o usuário." );
                            }
                        } else {
                            throw new Exception( "Não foi possível enviar nome de usuário para autenticação." );
                        }
                    } else {
                        throw new Exception( "Não foi possível iniciar processo de autenticação." );
                    }
                } else {
                    throw new Exception( "Conectamos, mas não foi possível iniciar comunicação." );
                }
            } else {
                throw new Exception( "Não foi possível conectar ao servidor." );
            }

            return( $ret );
        }

        /**
         * Gera a lista de cabeçalhos para serem enviados para o servidor
         *
         * @see Mail::addHeader()
         * @return string
         */
        static private function generateHeaders(){
            $ret = "";

            /**
             * Percorremos a lista de cabeçalhos e montamos a string com os campos e valores
             */
            for ( $i = 0 , $t = count( self::$headers ); $i < $t; $i++ ){
                $ret .= sprintf( "%s: %s\r\n" , self::$headers[ $i ][ "field" ] , self::$headers[ $i ][ "value" ] );
            }

            return( $ret );
        }

        /**
         * Envia uma mensagem via SMTP
         * @param string $from O email de quem está enviando
         * @param string $to O email de quem vai receber
         * @param string $subject O assunto do email
         * @param string $message A mensagem do email (pode conter HTML)
         * @return boolean TRUE se o email for enviado com sucesso
         */
        static public function send( $from , $to , $subject , $message ){
            $ret = false;

            /**
             * Verificamos se estamos configurados, primeiro
             * @see Mail::configure()
             */
            if ( self::$configured ){

                /**
                 * Tentamos conectar utilizando as configurações passadas
                 */
                if ( self::connect() ){
                    /**
                     * Estamos conectados, vamos definir o campo FROM
                     */
                    fputs( self::$smtp , sprintf( "MAIL FROM: <%s>\r\n" , $from ) );
                    $resp = fgets( self::$smtp , 256 );

                    if ( substr( $resp , 0 , 3 ) == "250" ){
                        /**
                         * Campo FROM definido, vamos definir o recipiente TO
                         */
                        fputs( self::$smtp , sprintf( "RCPT TO: <%s>\r\n" , $to ) );
                        $resp = fgets( self::$smtp , 256 );

                        if ( substr( $resp , 0 , 3 ) == "250" ){
                            /**
                             * Tudo certo até agora, vamos tentar iniciar envio dos dados
                             */
                            fputs( self::$smtp , "DATA\r\n" );
                            $resp = fgets( self::$smtp , 256 );

                            if ( substr( $resp , 0 , 3 ) == "354" ){
                                /**
                                 * Enviando o email...
                                 */
                                fputs( self::$smtp , sprintf( "To: %s\r\nFrom: %s\r\nSubject: %s\r\n%s\r\n\r\n%s\r\n.\r\n",
                                    $to,
                                    $from,
                                    $subject,
                                    self::generateHeaders(),
                                    $message
                                ) );

                                $resp = fgets( self::$smtp , 256 );

                                if ( substr( $resp , 0 , 3 ) == "250" ){
                                    /**
                                     * Email enviado !!!
                                     */
                                    $ret = true;
                                    self::close();
                                } else {
                                    throw new Exception( "Falha ao enviar a mensagem" );
                                }
                            } else {
                                throw new Exception( "Falha ao iniciar envio da mensagem" );
                            }
                        } else {
                            throw new Exception( "Falha ao definir campo TO" );
                        }
                    } else {
                        throw new Exception( "Falha ao definir campo FROM" );
                    }
                }
            }

            return( $ret );
        }

    }
?>
Ai você usa assim:
$from = eu@dominio.com;
$to = voce@dominio.com;
$subject = "Testando envio de email";
$message = "Hey, tudo certo ?";

try {
    Mail::configure( "smtp.dominio.com" , 25 , "usuario" , "senha" );
    Mail::send( $from , $to , $subject , $message );

    printf( "Email enviado com sucesso !!!" );
} catch( Exception $e ){
    printf( $e->getMessage );
}

[]'s

J. Neto

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...