emails

Enviando emails com a library nativa do CodeIgniter

Nesse tutorial você irá aprender a fazer o envio de emails utilizando a library nativa do CodeIgniter.

Essa library permite você fazer o envio de emails usando a função ‘mail()’ do PHP, STMP, Sendmail, com poucas linhas de configuração direto no CodeIgniter.

Para iniciarmos o tutorial, faça o download a instalação do CodeIgniter em seu ambiente de desenvolvimento, caso não saiba como fazer o procedimento, clique aqui e veja um tutorial que explica com detalhes como executá-lo.

Após instalar o CodeIgniter, vamos começar o processo.

Passo 1 – Configurações

Vejamos as configurações do CodeIgniter necessárias para o tutorial.

Helper

Vamos configurar o helper URL no autoload para que possamos ter acesso a métodos como o ‘base_url()’, que retorna uma URL absoluta da aplicação.

Abra o arquivo ‘application/config/autoload.php’ e localize a linha ‘$autoload[‘helpers’] = array(”)’. Altere essa linha inserindo o nome da library no array que é passado para a chave ‘libraries’.


$autoload['helper'] = array('url');

A partir desse momento o helper URL já está sendo carregado no autoload e suas funcionalidades estarão disponíveis em qualquer lugar da aplicação.

Rota

Vamos configurar uma rota para chamar o método que fará o envio do email e atulizar a rota que vai exibir a página principal da aplicação. Para isso abra o arquivo ‘application/config/routes.php’, e atualize – ou crie – as linhas abaixo no arquivo.

$route['default_controller'] = 'Base';
$route['enviar-email'] = "Base/EnviarEmail";

A rota ‘default-controller’, que chama o controller ‘Base’, define o controller padrão da aplicação e consequentemente a home, que nesse caso será a view carregada no método ‘Index()’ do controller Base.

A rota ‘enviar-email’, vai ser usada para processar o formulário com os dados a serem enviados por email, chamando o método ‘EnviarEmail’, que será criado mais adiante no controller Base.

Passo 2 – Criando as views

Vamos utilizar 2 views para esse tutorial. Uma conterá o formulário onde serão preenchidos os dados que serão encaminhados para um email, e a outra será o template do email.

View home.php

Crie um arquivo chamado ‘home.php’ dentro do diretório ‘application/views’ e insira nele o código abaixo:

<?php if ($this->session->flashdata('success') == TRUE): ?>
<div><?= $this->session->flashdata('success'); ?></div>
<?php endif; ?>
<?php if ($this->session->flashdata('error') == TRUE): ?>
<div><?= $this->session->flashdata('error'); ?></div>
<?php endif; ?>

<form method="POST" action="<?=base_url('enviar-email')?>">

<div>
    <label>Seu nome</label>
    <input type="text" name="nome" required/>
</div>

<div>
    <label>Seu email</label>
    <input type="email" name="email" required/>
</div>

<div>
    <label>Uma mensagem pra você</label>
    <textarea name="mensagem" rows="6" required></textarea>
</div>

<div>
    <label><input type="checkbox" name="anexo"/><strong>Enviar anexo</strong></label>
</div>

<div>
    <label><input type="checkbox" name="template"/><strong>Usar template</strong></label>
</div>

<div>
    <input type="submit" value="Enviar"/>
</div>

</form>

Esse código é apenas do formulário, você precisará complementá-lo com o cabeçalho padrão de paginas HTML.

Temos um formulário com 5 campos e um botão para envio dos dados. Dentre os campos temos campos do tipo text, email, checkbox, textarea, e esses campos recebem informações como nome, email, mensagem, arquivo anexado e o checkbox define se o email será enviado com um layout personalizado, ou será enviado sem layout, somente como um texto simples.

Antes do formulário temos 2 ifs que verificam mensagens passadas através de sessão, onde vão exibir para o usuário os erros ocorridos durante o processo ou então a mensagem de email enviado com sucesso.

View – email-template.php

Essa será a view responsável por enviar um email com um layour personalizado, caso o usuário marque o checkbox ‘Usar Template’ do formulário.

Crie o arquivo ’email-template.php’ em ‘application/views’ e adicione a ele o código abaixo:


<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Enviando emails com a library nativa do CodeIgniter</title>
</head>
<body>
    <table cellspacing="0" cellpadding="0" border="0" width="100%">
        <tr>
            <td class="navbar navbar-inverse" align="center">
                <!-- This setup makes the nav background stretch the whole width of the screen. -->
                <table width="650px" cellspacing="0" cellpadding="3" class="container">
                    <tr class="navbar navbar-inverse">
                        <td colspan="4"><a class="brand" href="http://www.universidadecodeigniter.com.br">Universidade CodeIgniter</a></td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td bgcolor="#FFFFFF" align="center">
                <table width="650px" cellspacing="0" cellpadding="3" class="container">
                    <tr>
                        <td><?=$mensagem?></td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td bgcolor="#FFFFFF" align="center">
                <table width="650px" cellspacing="0" cellpadding="3" class="container">
                    <tr>
                        <td>
                            <hr>
                            <p>&copy; Universidade CodeIgniter - 2016</p>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</body>
</html>

Ele tem um template simples, formatado através de tabelas, e chamando a variável ‘$mensagem’, que contém  a mensagem digitada pelo usuário no campo ‘Mensagem’ do formulário.

Passo 3 – Criando o controller

Agora vamos criar o controller para finalizar o processo de criação das funcionalidades e ter o envio de emails funcionando.

Crie um arquivo chamado ‘Base.php’ em ‘application/controllers’ e adicione a ele o código abaixo:


<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

class Base extends CI_Controller {     
   
    function __construct()     {         
       parent::__construct(); 
       /*
        * Carrega a library 'session' para que seja possível fazer o uso 
        * das sessões na aplicação 
        */         
       $this->load->library('session');
    }
    
    /*
     * Responsável por carregar a view com o formulário
     */
    public function Index()
    {
        $this->load->view('home');
    }

    /* 
     * Responsável por enviar o email
     */
    public function EnviarEmail()
    {
        // Carrega a library email
        $this->load->library('email');
        //Recupera os dados do formulário
        $dados = $this->input->post();
        
        //Inicia o processo de configuração para o envio do email
        $config['protocol'] = 'mail'; // define o protocolo utilizado
        $config['wordwrap'] = TRUE; // define se haverá quebra de palavra no texto
        $config['validate'] = TRUE; // define se haverá validação dos endereços de email
        
        /*
         * Se o usuário escolheu o envio com template, define o 'mailtype' para html, 
         * caso contrário usa text
         */
        if(isset($dados['template']))
            $config['mailtype'] = 'html';
        else
            $config['mailtype'] = 'text';

        // Inicializa a library Email, passando os parâmetros de configuração
        $this->email->initialize($config);
       
        // Define remetente e destinatário
        $this->email->from([email protected]', 'Remetente'); // Remetente
        $this->email->to($dados['email'],$dados['nome']); // Destinatário

        // Define o assunto do email
        $this->email->subject('Enviando emails com a library nativa do CodeIgniter');

        /*
         * Se o usuário escolheu o envio com template, passa o conteúdo do template para a mensagem
         * caso contrário passa somente o conteúdo do campo 'mensagem'
         */
        if(isset($dados['template']))
            $this->email->message($this->load->view('email-template',$dados, TRUE));
        else
            $this->email->message($dados['mensagem']);
        
        /*
         * Se foi selecionado o envio de um anexo, insere o arquivo no email 
         * através do método 'attach' da library 'Email'
         */
        if(isset($dados['anexo']))
            $this->email->attach('./assets/images/unici/logo.png');

        /*
         * Se o envio foi feito com sucesso, define a mensagem de sucesso
         * caso contrário define a mensagem de erro, e carrega a view home
         */
        if($this->email->send())
        {
            $this->session->set_flashdata('success','Email enviado com sucesso!');
            $this->load->view('home');
        }
        else
        {
            $this->session->set_flashdata('error',$this->email->print_debugger());
            $this->load->view('home');
        }
    }
}

O código acima está todo comentado para facilitar a compreensão de cada parte dele. Mas há um ponto importante que precisa ser mais explicado, que é o processo de configuração da library ‘Email’. Essa library possui vários parâmetros, veja a seguir a definição de cada um deles:

useragent: O “user agent” | valor padrão: CodeIgniter

protocol: O protocolo para envio do email | valor padrão: mail | opções: mail, sendmail, ou smtp

mailpath: Path para o servidor do Sendmail | valor padrão: /usr/sbin/sendmail

smtp_host: Endereço do servidor SMTP

smtp_user: Usuário do SMTP

smtp_pass: Senha do SMTP

smtp_port: Porta do SMTP | valor padrão: 25

smtp_timeout: Timeout do SMTP (em segundos) | valor padrão: 5

smtp_keepalive: Ativa conexão SMTP persistente | valor padrão: FALSE | opções: TRUE ou FALSE

smtp_crypto: Modo de encriptação do SMTP | opções: tls ou ssl

wordwrap: Ativa quebra de palavra | valor padrão: TRUE | opções: TRUE ou FALSE

wrapchars: Número de caractéres para a quebra | valor padrão: 76

mailtype: Tipo de email. Se for HTML o conteúdo será enviado como uma página web. Fique atento a links e caminhos de imagens relativos, pois eles não irão funcionar | valor padrão: text | opções: text ou html

charset: Codificação de caracteres (utf-8, iso-8859-1, etc.) | valor padrão: $config[‘charset’]

validate: Validação do email | valor padrão: FALSE | opções: TRUE ou FALSE

priority: Prioridade do email 1 = alta. 5 = baixa. 3 = normal | valor padrão: 3 | opções: 1, 2, 3, 4, 5

crlf: Caracter para quebra de linha (Use “\r\n” para atender à RFC 822) | valor padrão: “\n” | opções: “\r\n” ou “\n” ou “\r”

newline: Caracter para quebra de linha (Use “\r\n” para atender à RFC 822) | valor padrão: “\n” | opções: “\r\n” ou “\n” ou “\r”

bccbatchmode: Ativa o modo BCC Batch | valor padrão: FALSE | opções: TRUE ou FALSE

bccbatchsize: Número de email para BCC Batch | valor padrão: 200

dsn: Ativa notificações de mensagem para o servidor | valor padrão: FALSE | opções: TRUE ou FALSE

Esses são os parâmetros de configuração que podem ser utilizados para o envio de email usando a library nativa do CodeIgniter.

O tempo entre o envio e o recebimento do email vai variar conforme o servidor utilizado.

Para enviar emails utilizando o protocolo SMTP, você deverá configurar os seguintes parâmetros:

protocolo: smtp

smtp_host: Endereço do servidor SMTP

smtp_user: Usuário do SMTP

smtp_pass: Senha do SMTP

smtp_port: Porta do SMTP

Com essa configuração, você procede com o envio normalmente através de ‘$this->email->send()’ e demais métodos para setar as informações do email como remetente, destinatário, assunto e mensagem.

Até o próximo tutorial!

button-codigo-fonteDemo Online