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