domingo, 26 de janeiro de 2014

Enviando e-mail com Laravel 4

Olá galera,

No post de hoje vamos mostrar como enviar e-mail usando o Laravel 4 com SMTP. Vamos aos códigos.

No arquivo app/routes.php. Crie duas novas rotas.

    Route::get('form', 'ContatosController@form');
    Route::post('send', 'ContatosController@send');
  

Dentro de app/controllers, crie o ContatosController.php e adicione o código abaixo.

    <?php
    class ContatosController extends BaseController {
      public function form()
      {
        return View::make('contatos.form');
      }

      public function send()
      {
        $input = Input::all();
        Mail::send('emails.contatos.index', $input, function($message) {
          $message->to('email@dominio_do_site.com.br')->replyTo(Input::get('email'))->subject('Contato do site');
        });
        return Redirect::to('form');
      }
    } 
  

Criei o controller bem simples, mas você pode adicionar validações e messagens de erro e sucesso. Note que na linha 12, estou capturando do formulário o e-mail informado.

Crie dentro de app/views/contatos, o arquivo form.blade.php. Como criar o formulário não é o foco desse post, vou deixar que você monte um formulário a sua escolha. Para exemplificar, vou adotar que o formulário tenha os seguintes campos: nome, email, telefone, assunto.

Crie dentro de app/views/emails/contatos, o arquivo index.blade.php e adicione o código abaixo.

    <!DOCTYPE html>
    <html lang="pt-br">
      <head>
        <meta charset="utf-8">
      </head>
      <body>
        <h2>Dados do contato</h2>
        <p>Nome: {{ $nome }}</p>
        <p>E-mail: {{ $email }}</p>
        <p>Telefone: {{ $telefone }}</p>
        <p>Assunto: {{ $assunto }}</p>
      </body>
    </html>
  

Perceba que estou usando como nome das variáveis os nomes dos campos do formulário.

Se você fizer o submit vai notar que não funciona, pois não temos os parâmetros do e-mail configurado. O arquivo a ser configurado é o app/config/mail.php. Para exemplificar, vamos usar a configuração de dois servidores de hospedagem.

Primeiro a configuração para o KingHost.

    <?php
    return array(
      'driver' => 'smtp',
      'host' => 'smtp.dominio_do_site.com.br',
      'port' => 465,
      'from' => array('address' => 'email@dominio_do_site.com.br', 'name' => 'Meu site'),
      'encryption' => 'ssl',
      'username' => 'email@dominio_do_site.com.br', //Utilize um e-mail criado com o seu domínio
      'password' => 'minha_senha', //Utilize a senha do e-mail criado
      'sendmail' => '/usr/sbin/sendmail -bs',
      'pretend' => false,
    );
  

Segundo a configuração para o HostGator.

    <?php
    return array(
      'driver' => 'smtp',
      'host' => 'gator2024.hostgator.com',
      'port' => 465,
      'from' => array('address' => 'email@dominio_do_site.com.br', 'name' => 'Meu site'),
      'encryption' => 'ssl',
      'username' => 'meu_usuario', //Utilize o usuário informado na criação da conta do HostGator
      'password' => 'minha_senha', //Utilize a senha recebida por e-mail pelo HostGator
      'sendmail' => '/usr/sbin/sendmail -bs',
      'pretend' => false,
    );
  

A configuração do mail.php vai depender muito do servidor onde a aplicação vai ser hospedada.

Espero que vocês tenham gostado e qualquer dúvida é só postar no blog.

Grande abraço a todos e até a próxima.

4 comentários:

  1. Desta forma o email será enviado de forma automática é? Após criar um form para envio de emails que parâmetro deve ser passando para que este reconheça a função send do Controller criado acima? Este exemplo serve para recebimento ou envio de email? Ou os dois?

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      O post acima se refere a um formulário de contato que é preenchido e enviado para um e-mail pré-definido.

      Abraço

      Excluir
  2. Tá .. entendi. Mas aquele arquivo index ali serve pra que?

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Esse arquivo é o template que será enviado ao e-mail cadastrado.

      Abraço

      Excluir