Como enviar um e-mail autenticado com CodeIgniter

Olá, tudo bem?

Hoje, se você enviar um e-mail simplesmente usando a função mail() do PHP ou então usando a porta 25, muito provavelmente seu e-mail cairá na caixa de SPAM do destinatário.

Isso porque a porta 25 não exige autenticação para enviar um e-mail, o que faz com que seja possível você se passar como dono de qualquer conta de e-mail e enviar para seus destinatários.

Nem preciso falar na treta que dá isso né?

Então, a solução para que seu e-mail chegue na caixa de entrada do seu destinatário, é enviar sua mensagem autenticada, ou seja, conectando a um servidor SMTP com autenticação e com encriptação SSL, inclusive.

Hoje vamos ver como utilizar o servidor SMTP do gmail para enviar e-mails autenticados usando a sua conta no Google.

O primeiro passo é você criar um arquivo de configuração do seu e-mail.

Crie um arquivo chamado email.php e salve-o dentro da pasta application/config.

Ao fazer isto, o CodeIgniter já vai identificar automaticamente que existe uma configuração de e-mail a ser utilizada e vai passar a ler os dados deste arquivo.

Você até pode colocar estas configurações direto no seu Controller antes de enviar o e-mail, mas isso não tem muito sentido, pois você terá que chamar esta configuração a cada vez que for enviar um e-mail novo.

O ideal mesmo é criar o arquivo como falado acima.

Dentro do arquivo, você vai colocar o seguinte código:

$config['smtp_host'] = 'ssl://smtp.gmail.com';
$config['smtp_port'] = 465;
$config['smtp_user'] = 'seu_usuario@gmail.com';
$config['smtp_pass'] = 'sua_senha';
$config['protocol']  = 'smtp';
$config['validate']  = TRUE;
$config['mailtype']  = 'html';
$config['charset']   = 'utf-8';
$config['newline']   = "\r\n";

As configurações acima são auto explicativas, mas as mais importantes são o servidor SMTP, que de preferência deve ter SSL, a porta, o seu email e sua senha ativos no Gmail.

Feito isto, o próximo passo agora é você enviar o e-mail desejado, mas antes você precisa carregar a biblioteca.

Se você for usar somente em um único método dentro do seu controller, basta carregar a biblioteca somente neste método, caso vá utilizar para todo o controller, coloque no __construct(), para toda a classe poder utilizá-lo.

Ou então, coloque no autoload.php dentro da pasta config, assim quando a aplicação rodar, já estará disponível.

$this->load->library('email');

Certo, agora basta enviar o email.

Para isto, use o código abaixo:

$this->email->from("seu_email@gmail.com", 'Meu E-mail');
$this->email->subject("Assunto do e-mail");
$this->email->reply_to("email_de_resposta@dominio.com");
$this->email->to("email_destinatario@dominio.com"); 
$this->email->cc('email_copia@dominio.com');
$this->email->bcc('email_copia_oculta@dominio.com');
$this->email->message("Aqui vai a mensagem ao seu destinatário");
$this->email->send();

Bom, o código também é autoexplicativo. Você não precisa colocar tudo que está ali, como CC, BCC ou REPLY_TO por exemplo.

Sem isto já dá pra enviar emails.

Quando você chamar a função send() ela vai retornar TRUE quando o e-mail for enviado com sucesso e FALSE caso não.

Você pode também saber qual erro ocorreu ao enviar o e-mail analisando a função $this->email->print_debugger().

Ao dar um echo nesta função ele irá retornar todo o conteúdo do e-mail com o erro gerado.

Anexos

Você também pode enviar anexos no seu e-mail e é muito simples.

Basta adicionar a linha abaixo antes do send():

$this->email->attach('/path/to/photo1.jpg');

Você também pode anexar uma URL com um arquivo, por exemplo:

$this->email->attach('http://example.com/filename.pdf');

Bom, neste post eu mostrei o básico para poder enviar e-mails usando o CodeIgniter.

Esta biblioteca tem mais algumas opções interessantes, mas para isto sugiro dar uma olhada no artigo original clicando aqui.

É isto, dúvidas comente abaixo.

Abraços

Fábio

Fábio S. Reszko

Sou Programador PHP desde 2006 e eu acredito sinceramente que programar usando um Framework PHP é a solução para os problemas de códigos desorganizados, difíceis de entender e de dar manutenção no futuro. Se você também acredita nisto, então fique à vontade em explorar meu blog.