
Enviando emails com a biblioteca Email do CodeIgniter
13/04/2016Nesse tutorial você vai aprender a enviar emails utilizando uma bibiotca nativa do CodeIgniter, a Email.
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. Após instalar o CodeIgniter, prossiga com o tutorial.
Passo 1 – Configurações
Algumas configurações são necessárias para que o funcionamento da biblioteca Email e a aplicação desse exemplo funcionem corretamente. Acompanhe a seguir:
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('')
e altere essa linha inserindo o nome da biblioteca 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 controlador Base
, define o controlador padrão da aplicação e consequentemente a página principal dela, que nesse caso será a view carregada no método Index()
do controlador 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 controlador 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 Biblioteca Email do CodeIgniter</title>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td class="navbar navbar-inverse" align="center">
<table width="650px" cellspacing="0" cellpadding="3" class="container">
<tr class="navbar navbar-inverse">
<td colspan="4"><a class="brand" href="http://www.tutoriaiscodeigniter.com.br">TutoriaisCodeIgniter</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>© Tutoriais CodeIgniter – 2019</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 controlador
Agora vamos criar o controlador 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('remetente@email.com', 'Remetente');
$this->email->to($dados['email'],$dados['nome']);
// 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 biblioteca Email
. Essa biblioteca 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 SMTPsmtp_user
: Usuário do SMTPsmtp_pass
: Senha do SMTPsmtp_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']
- valor padrão:
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 biblioteca Email, 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
: smtpsmtp_host
: Endereço do servidor SMTPsmtp_user
: Usuário do SMTPsmtp_pass
: Senha do SMTPsmtp_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.
Você pode realizar o download do código fonte completo através do botão abaixo.
Bons estudos!