Enviando e-mail via SMTP autenticado com PHP

De Durand Wiki
Ir para: navegação, pesquisa

Introdução

Alguns servidores, por questões de segurança, podem ter a função mail do PHP bloqueada, nestes casos é recomendado o uso da classe PHPMailer para envio de mensagens se conectando diretamente ao servidor SMTP de seu domínio de forma autenticada.

A classe PHPMailer é gratuita e pode ser encontrada para download em: http://code.google.com/a/apache-extras.org/p/phpmailer/

Download da Classe

O PHPMailer está disponível para download no Sourceforge através do endereço: http://code.google.com/a/apache-extras.org/p/phpmailer/

O Uso

Descompacte a classe e envie para seu servidor, no arquivo de seu formulário, faça o include do arquivo class.phpmailer.php, feito isto basta configurar conforme exemplo abaixo:

  <?php
  
  // Faz o include da classe PHPMailer
  include("/caminho/para/classe/PHPMailerAutoload.php");
  
  // Inicializa a classe PHPMailer
  $mail = new PHPMailer(true); 
  
  // Informa que o envio será feito via SMTP
  $mail->IsSMTP();
  
  // Define que o e-mail será HTML
  $mail->IsHTML(true);
  
  // Tenta fazer o envio
  try {
    
    // Aqui você deve informar o endereço do servidor SMTP de seu domínio
    $mail->Host = "SMTP.SEUDOMINIO.COM.BR";
    
    // Aqui é informado que o SMTP é autenticado
    $mail->SMTPAuth = true; 
  
    // Informe o usuário
    $mail->Username = "SEU USUARIO DE EMAIL";
  
    // Informe a senha
    $mail->Password = "A SENHA DO EMAIL";
    // Configura a porta 587 do smtp
       $mail->Port = 587;


    // Endereço do Remetente, recomenda-se sempre usar um e-mail válido de seu domínio, pois se neste campo for colocado o endereço do remetente, a mensagem pode ser recusada por restrições em SPF
    $mail->SetFrom('EMAIL@REMETENTE-UM-EMAIL-@SEUDOMINIO.COM.BR', 'NOME REMETENTE');
  
    // Endereço de Resposta (Neste campo pode ser colocado o e-mail do remetente)
    $mail->AddReplyTo('EMAIL@PARA-RESPOSTADOEMAIL-O-EMAIL-DE-QUEM-POSTOU-O-FORM', 'Nome');
  
    // Endereço de Destino do formulário
    $mail->AddAddress('EMAIL@DESTINO-DO-FORMULARIO', 'NOME-DE-DESTINO');
  
    // Assunto do e-mail
    $mail->Subject = 'ASSUNTO DO E-MAIL';
  
    // Conteúdo do e-mail em modo texto, caso você monte o corpo em uma variável, pode coloca-la aqui, pois a expressão regular irá remover todas as TAGS HTML
    $mail->AltBody = ereg_replace("<([^>]+)>", "", "CONTEUDO-EM-MODO-TEXTO");
  
    // Conteúdo do e-mail em HTML
    $mail->Body = "CONTEUDO-EM-HTML";
  
    // Caso queira ativar o debug dos erros, e do envio do smtp, descomente esta linha
    //$mail->SMTPDebug  = 2; 
  
    // Envia a mensagem
    $mail->Send();
  
    // Em caso de sucesso exibe que a mensagem foi enviada
    echo "Mensagem enviada.";
  
  // Em caso de erro do PHPMailer, exibe
  } catch (phpmailerException $e) {
    echo $e->errorMessage();
  
  // Em caso de erro do PHP, exibe
  } catch (Exception $e) {
    echo $e->getMessage();
  }
  
  ?>