Como enviar e-mail usando CodeIgnorar
โก Resumo Inteligente
CodeO envio de e-mails com o Igniter depende da biblioteca de e-mail integrada do framework para entregar mensagens via SMTP ou servidor de e-mail local. Este exemplo cria um arquivo de configuraรงรฃo de e-mail, uma view de formulรกrio de contato e um controlador que lรช os dados inseridos no formulรกrio e envia a mensagem.

O e-mail รฉ muito importante em aplicaรงรตes web. Quando um usuรกrio se cadastra, podemos enviar um e-mail para verificar seu endereรงo e permitir que ele confirme a assinatura. Tambรฉm usamos o e-mail para redefinir senhas esquecidas e enviar faturas e recibos aos clientes. CodeO Igniter torna extremamente fรกcil para nรณs enviar e-mails a partir do nosso aplicativo, usando uma variedade de opรงรตes.
CodeO Igniter possui uma biblioteca de e-mail integrada que podemos usar ao enviar e-mails.
CodeConfiguraรงรฃo de e-mail do Igniter
Precisamos de um local centralizado onde possamos gerenciar as configuraรงรตes de e-mail. CodeO Igniter nรฃo vem com um arquivo de configuraรงรฃo para e-mails, entรฃo teremos que criar um nรณs mesmos.
Crie um arquivo email.php no diretรณrio application/config
Adicione o seguinte cรณdigo a email.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); $config = array( 'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp' 'smtp_host' => 'smtp.example.com', 'smtp_port' => 465, 'smtp_user' => 'no-reply@example.com', 'smtp_pass' => '12345!', 'smtp_crypto' => 'ssl', //can be 'ssl' or 'tls' for example 'mailtype' => 'text', //plaintext 'text' mails or 'html' 'smtp_timeout' => '4', //in seconds 'charset' => 'iso-8859-1', 'wordwrap' => TRUE );
AQUI,
- 'protocol' => 'smtp', especifica o protocolo que vocรช deseja usar ao enviar e-mails. Isso pode ser Gmail Configuraรงรตes SMTP ou configuraรงรตes SMTP do seu host
- 'smtp_host' => 'smtp.example.com', especifica o host SMTP. Por exemplo, se vocรช quiser usar Gmail entรฃo vocรช teria algo como smtp.gmail.com
- 'smtp_port' => 465, uma porta aberta no host SMTP especificado que foi configurada para e-mail SMTP.
- 'smtp_user' => 'no-reply@example.com', o endereรงo de e-mail que serรก usado como remetente ao enviar e-mails. Este deve ser um endereรงo de e-mail vรกlido que exista no servidor
- 'smtp_pass' => '12345!', a senha do e-mail do usuรกrio SMTP especificado.
- 'smtp_crypto' => 'ssl', especifica o mรฉtodo de criptografia a ser usado, ou seja, ssl, tls etc.
- 'mailtype' => 'text', define o tipo de e-mail a ser usado. Pode ser texto simples ou HTML, dependendo das suas necessidades.
- 'smtp_timeout' => '4', especifica o tempo em segundos que deve decorrer ao tentar se conectar ao host antes que uma exceรงรฃo de tempo limite seja lanรงada.
- 'charset' => 'iso-8859-1', define o conjunto de caracteres a ser usado no envio de emails.
- 'wordwrap' => TRUE, se definido como TRUE, a quebra automรกtica de linha estรก habilitada. Se definido como FALSE, a quebra automรกtica de linha estรก desabilitada.
Observaรงรฃo: para enviar e-mails para o trabalho, vocรช deve fornecer parรขmetros de configuraรงรฃo vรกlidos. Parรขmetros fictรญcios nรฃo poderรฃo enviar e-mails.
CodeVisualizaรงรฃo de e-mail do Igniter
Nesta seรงรฃo, criaremos a visualizaรงรฃo que enviarรก o email ao destinatรกrio.
Crie um novo e-mail de diretรณrio em application/views
Crie um novo arquivo contact.php em application/views/email
Adicione o seguinte cรณdigo a application/views/email/contact.php
<!DOCTYPE html> <html> <head> <title>CodeIgniter Send Email</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div> <h3>Use the form below to send email</h3> <form method="post" action="<?=base_url(0)?>" enctype="multipart/form-data"> <input type="email" id="to" name="to" placeholder="Receiver Email"> <br><br> <input type="text" id="subject" name="subject" placeholder="Subject"> <br><br> <textarea rows="6" id="message" name="message" placeholder="Type your message here"></textarea> <br><br> <input type="submit" value="Send Email" /> </form> </div> </body> </html>
AQUI,
- Temos um formulรกrio HTML bรกsico que aceita o e-mail, o assunto e a mensagem, e entรฃo passa os parรขmetros para a rota de e-mail.
CodeControlador de e-mail Igniter
Vamos agora criar o controlador que ficarรก responsรกvel pelo envio de e-mails.
Crie um novo arquivo EmailController.php em application/controllers/EmailController.php
Adicione o seguinte cรณdigo a EmailController.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class EmailController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); } public function index() { $this->load->view('email/contact'); } function send() { $this->load->config('email'); $this->load->library('email'); $from = $this->config->item('smtp_user'); $to = $this->input->post('to'); $subject = $this->input->post('subject'); $message = $this->input->post('message'); $this->email->set_newline("\r\n"); $this->email->from($from); $this->email->to($to); $this->email->subject($subject); $this->email->message($message); if ($this->email->send()) { echo 'Your Email has successfully been sent.'; } else { show_error($this->email->print_debugger()); } } }
AQUI,
- A classe `EmailController` que estende `CI_Controller` define nosso controlador de e-mail que estende a classe pai. CodeControlador de igniรงรฃo.
- public function __construct() {โฆ} define o construtor filho que chama o mรฉtodo do construtor pai.
- public function index() {โฆ} define o mรฉtodo de รญndice que exibe o formulรกrio de contato
- function send() {โฆ} define o mรฉtodo que envia o email
- $this->load->config('email'); carrega as configuraรงรตes de e-mail
- $this->load->library('email'); carrega a biblioteca de e-mail
- $from = $this->config->item('smtp_user'); obtรฉm o ID do remetente do arquivo de configuraรงรฃo de email que definimos.
- $to = $this->input->post('para'); obtรฉm o valor to do formulรกrio enviado
- `$subject = $this->input->post('subject');` define o assunto do e-mail a partir do formulรกrio.
- $mensagem = $this->input->post('mensagem'); define a mensagem de e-mail do formulรกrio
- $this->email->set_newline(โ\r\nโ); define os novos caracteres de linha para e-mails
- $este->e-mail->de($de); define o endereรงo de e-mail do remetente
- $este->e-mail->para($para); define o endereรงo de e-mail do destinatรกrio
- $this->email->assunto($assunto); define o assunto do e-mail
- $this->email->mensagem($mensagem); define a mensagem de e-mail
- if ($this->email->send()) {โฆ} tenta enviar o e-mail. Se o e-mail for enviado com sucesso, a mensagem โSeu e-mail foi enviado com sucessoโ serรก exibida; caso contrรกrio, informaรงรตes de depuraรงรฃo serรฃo impressas sobre o que pode ter dado errado.
Vamos agora definir as rotas de e-mail.
Rotas de e-mail
Adicione as seguintes rotas a application/config/routes.php
$route['send-email'] = 'EmailController'; $route['email'] = 'EmailController/send';
Agora podemos carregar o formulรกrio de contato no navegador da web.
Vamos iniciar o servidor PHP integrado.
Abra o terminal ou a linha de comando e navegue atรฉ a raiz do seu aplicativo. No meu caso, a raiz estรก localizada na unidade C:\Sites\ci-app.
cd C:\Sites\ci-app
Inicie o servidor usando o seguinte comando
php -S localhost:3000
Carregue o seguinte URL No seu navegador web: http://localhost:3000/send-email
Vocรช deverรก conseguir ver o seguinte formulรกrio
Insira o endereรงo de e-mail do destinatรกrio, o assunto e a mensagem do e-mail e clique em Enviar e-mail. Se a sua configuraรงรฃo de e-mail estiver correta, vocรช deverรก ver a mensagem de confirmaรงรฃo.
Como enviar e-mails e anexos em HTML CodeIgnorar
A mesma biblioteca de e-mail pode enviar mensagens e arquivos com formataรงรฃo avanรงada. Duas pequenas alteraรงรตes transformam o exemplo de texto simples acima em um e-mail HTML com anexo.
$this->email->set_mailtype('html'); $this->email->message('<h3>Welcome</h3><p>Thanks for joining us.</p>'); $this->email->attach('/path/to/report.pdf');
- set_mailtype('html'): Informa ร biblioteca que o corpo da mensagem contรฉm HTML, para que tags como tรญtulos e links sejam exibidas na caixa de entrada do destinatรกrio.
- anexar(): Adiciona um arquivo de um caminho do servidor ร mensagem; chame-o uma vez para cada arquivo antes de enviar().
Lembre-se de que e-mails em HTML ainda devem incluir uma alternativa em texto simples, e anexos grandes podem ser rejeitados por servidores de e-mail mais rigorosos.

