Como enviar e-mail usando CodeIgniter

O e-mail é muito importante em aplicações web. Quando um usuário se inscreve, podemos enviar-lhe um e-mail para verificar seu endereço de e-mail e permitir que o usuário confirme a assinatura. Também usamos e-mail para redefinir senhas esquecidas, enviar faturas e recibos aos clientes, etc. O CodeIgniter torna muito fácil enviar e-mails de nosso aplicativo usando uma variedade de opções.

CodeIgniter possui uma biblioteca de e-mail integrada com a qual podemos trabalhar ao enviar e-mails.

Configuração de e-mail CodeIgniter

Precisamos de um local central onde possamos gerenciar as configurações de e-mail. CodeIgniter 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' => '[email protected]',
    '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-mail. Podem ser configurações de SMTP do Gmail ou configurações de SMTP do seu host
  • 'smtp_host' => 'smtp.example.com', especifica o host smtp. Por exemplo, se quiser usar o Gmail, você terá algo como smtp.gmail.com
  • 'smtp_port' => 465, uma porta aberta no host smtp especificado que foi configurado para correio smtp
  • 'smtp_user' => '[email protected]', 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 para o e-mail do usuário smtp especificado
  • 'smtp_crypto' => 'ssl', especifica o método de criptografia a ser usado, ou seja, SSL, TLS etc.
  • 'email type' => 'text', define o tipo de email a ser usado. Pode ser texto simples ou HTML, dependendo de 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 está definido como TRUE então a quebra de linha está habilitada. Se estiver definido como FALSE, a quebra de linha não está habilitada

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.

Visualização de e-mail do CodeIgniter

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 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('email')?>" 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 email, assunto e mensagem e depois passa os parâmetros para rota de email.

Controlador de e-mail CodeIgniter

Vamos agora criar o controlador que cuidará do envio de e-mail

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,

  • class EmailController estende CI_Controller {…} define nosso controlador de e-mail que expande o controlador CodeIgniter pai.
  • 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
    • $assunto = $this->input->post('assunto'); define o e-mail submetido 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 email. Se o e-mail for enviado com sucesso, a mensagem Seu e-mail foi enviado com sucesso, caso contrário, serão impressas informações de depuração 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 contatos no navegador da web

Vamos iniciar o servidor PHP integrado

Abra o terminal/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 em seu navegador: http://localhost:3000/send-email

Você deverá conseguir ver o seguinte formulário

Rotas de e-mail

Insira o e-mail do destinatário, o assunto e a mensagem de e-mail e clique em Enviar e-mail. Se suas configurações de e-mail estiverem definidas corretamente, você poderá ver a mensagem de sucesso.

Resumo

A biblioteca de e-mail integrada facilita o envio de e-mails com o mínimo de código. A biblioteca também é muito flexível no sentido de que você pode configurá-la para atender às suas necessidades.

Resuma esta postagem com: