Envio de e-mail através de SMTP com PHPMailer

Bloqueio Da Função Mail Do PHP

Hoje 90% dos programadores que precisam enviar informações por meio de seus formulários, utilizam a função “mail” do PHP (conforme exemplo a seguir).

mail("EMAIL QUE RECEBERÁ A MENSAGEM", "ASSUNTO", "MENSAGEM", "$header");

Para uso de Formulário, não há problema algum, pois os recursos usados são mínimos.
A maior dificuldade se dá quando precisar enviar mensagens aos seus clientes ou quando os Servidores bloqueiam a função “mail”!
Se utiliza a função “mail” nos seus websites e passa por isso, certamente tem um problema, pois esse tipo de estratégia dos Servidores prejudicam os serviços.
Hoje existem vários sistemas já prontos na Internet onde pode usar para implementar as suas soluções!

Como Usar O PHPMailer

Uma das soluções encontradas na Internet é o PHPMailer, entre várias outras soluções que tem recursos diversos para ajudar no seu dia a dia.
Infelizmente, várias versões dão erro com facilidade e para evitar transtorno, criamos um exemplo prático de uso que pode adaptar para à sua conta de email.
Agora poderá resolver seu problema facilmente.

Veja esse formulário que preparámos, tem os campos pré-definidos, tudo correcto (conforme o exemplo a seguir).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link type="text/css" rel="stylesheet" media="screen" href="estilo.css">
<script src="scripts/ajax.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function enviar_formulario()
{

  String.prototype.trim = function()   {  return this.replace(/^\s+|\s+$/g,""); }
  String.prototype.ltrim = function()  {  return this.replace(/^\s+/,""); }
  String.prototype.rtrim = function()  {  return this.replace(/\s+$/,""); }

  if( document.getElementById("empresa").value.trim() == '' ){
    document.getElementById("empresa").focus();
    alert( "Preencher campo Empresa !" );    
    return false
  }
  else if( document.getElementById("pessoa_contato").value.trim() == '' ){
    document.getElementById("pessoa_contato").focus();
    alert( "Preencher o campo Pessoa de Contato !" );
    return false
  }
  else if( document.getElementById("telefone").value.trim() == '' ){
    document.getElementById("telefone").focus();
    alert( "Preencher o campo DDD+Telefone !" );
    return false
  }
  else if( document.getElementById("email").value.trim() == '' ){
    document.getElementById("email").focus();
    alert( "Preencher o campo E-mail !" );
    return false
  }  
  else if( document.getElementById("email").value.trim() != '' ){
    
    var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
    var mail = document.getElementById("email").value;
    var valida_mail = 0;
    
    if(typeof(mail) == "string"){
      
      if(er.test(mail)){ 
        valida_mail = 1; 
      }        
    
    } else if(typeof(mail) == "object"){
      if(er.test(mail.value)){
           valida_mail = 1;
      }
    }else{ 
        valida_mail = 0;
    }
    
    if( valida_mail == 0 ){
      document.getElementById("email").focus();
      alert( "Preencher o campo E-mail corretamente !" );
      return false
    }  
    else{

      if( document.getElementById("assunto").value == 0 ){
        document.getElementById("assunto").focus();
        alert( "Preencha o campo Assunto !" );
        return false
      }
    }
  }
}

</script>
<title>Contatos</title>
</head>
<body>
<div>
  <form action="formulario_envia.php" method="post"  name="contato" onsubmit="return enviar_formulario()">
    
    <!-- Inicio da Tabela -->
    <table width="700" border="0" align="center" background="imagens/background_formulario.png">
      <tr>
        <td colspan="4"><br>
          <div id="titulo">Preencha o Formulário de Contato</div>
          <br>
        </td>
      </tr>
      <tr>
        <td><label id="lb_empresa">Empresa:</label></td>
        <td><input name="empresa" type="text" id="empresa" maxlength="50"></td>
        <td><label>Pessoa de Contato:</label></td>
        <td><input name="pessoa_contato" type="text" id="pessoa_contato" maxlength="30">
        </td>
      </tr>
      <tr>
        <td><label>DDD+Telefone:</label></td>
        <td><input name="telefone" type="text" id="telefone" maxlength="15"></td>
        <td><label>Telefone Alternativo:</label></td>
        <td><input name="telefone_alternativo" type="text" id="telefone_alternativo" maxlength="15"></td>
      </tr>
      <tr>
        <td><label>Email:</label></td>
        <td><input id="email" name="email" type="text">
        </td>
        <td><label>Assunto:</label></td>
        <td><input name="assunto" type="text" id="assunto" maxlength="50">
        </td>
      </tr>
      <tr>
        <td><label>OBSERVAÇÕES:</label></td>
        <td colspan="3"><textarea name="observacao" rows="5"></textarea></td>
      </tr>
      <tr>
        <td colspan="4"><div align="right"><input type="image" src="imagens/bt_solicitacao.png" name="solicitacao" alt="Enviar" id="botao" />
          </div></td>
      </tr>
    </table>
  </form>
</div>
</body>
</html>

Veja que ele transfere oconteúdo para o ficheiro “formulario_envia.php”. É nesse ficheiro que faremos as configurações!

Exemplo:

<?php
session_start();
setlocale(LC_CTYPE,"pt_PT");
function sendMail($para,$de,$mensagem,$assunto){
//DADOS SMTP
$smtp    = "seudominio.com"; //      < ---- Alterar o smtp
$utilizador = "teste@seudominio.com"; //      < ---- Alterar o email
$senha   = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //      < ---- Alterar a senha
// NAO ALTERAR
require_once 'smtp/smtp.php';
$mail = new smtp;
$mail->Delivery('relay');
$mail->Relay($smtp, $usuario, $senha, 465, 'login', true);
$mail->TimeOut(10);
$mail->Priority('high');
$mail->From($de);
$mail->AddTo($para);
$mail->Html($mensagem);
  if($mail->Send($assunto)){

    //echo "MENSAGEM ENVIADA COM SUCESSO";
    $_SESSION['feedback'] = "MENSAGEM ENVIADA COM SUCESSO";
    header ("Location: index.php");
    //return true;
  }else {

    //echo "MENSAGEM FALHOU AO SER ENVIADA, TENTE MAIS TARDE";
    $_SESSION['feedback'] = "MENSAGEM FALHOU AO SER ENVIADA, TENTE MAIS TARDE";
    header ("Location: index.php");
    //return false;
  }


  // Recebe os valores mandado pelo formulario
  $empresa        = $_POST['empresa'];
  $pessoa_contato = $_POST['pessoa_contato'];
  $telefone       = $_POST['telefone'];
  $telefone_alternativo = $_POST['telefone_alternativo'];
  $email          = $_POST['email'];
  $assunto        = $_POST['assunto'];
  $observacao     = $_POST['observacao'];
  
// Variavel guarda todo o html com a informações que será o corpo do email
$corpo='
<html>
<head>
<title>Contato</title>
</head>
<body>
  <table width="700" border="1">
      <tr>
        <td><label id="lb_empresa">Empresa:</label></td>
        <td>'.$empresa.'</td>
        <td><label>Pessoa de Contato:</label></td>
        <td>'.$pessoa_contato.'</td>
      </tr>
      <tr>
        <td><label>DDD+Telefone:</label></td>
        <td>'.$telefone.'</td>
        <td><label>Telefone Alternativo:</label></td>
        <td>'.$telefone_alternativo.'</td>
      </tr>
      <tr>
        <td><label>Email:</label></td>
        <td>'.$email.'</td>
        <td><label>CEP:</label></td>
        <td>'.$assunto.'</td>
      </tr>
      <tr>
        <td><label>OBS:</label></td>
        <td colspan="3">'.$observacao.'</td>
      </tr>
    </table>
</body>
</html>';

// Chama a função para enviar o email.
// Ex: sendMail("Email que recebe","Email que envia","Corpo do email","Titulo do email");
sendMail($email,"suporte@suadominio.com",$corpo,'Formulário de Contato'); // < ---- Alterar os dados de envio do email

?>

Veja que em parte do código, disponibilizei a mensagem: “não alterar”. Mas essa mensagem é justamente para quem não conhece nada de configuração!

OBSERVAÇÕES:

No ficheiro acima, pode ver que existem algumas linhas comentadas, correto?
Elas descrevem as configurações necessárias e explicam o que pode fazer.
A parte mais mais importante é onde aparece a informação a seguir:

$mail->Relay($smtp, $utilizador, $senha, 465, 'login', true);

Veja que aparece o número 465, correto?
Esse é o número da Porta utilizada no Sistema!
Muitos administradores tem problemas, pois os Web Servers (principalmente Linux) vem com a Porta 25 bloqueada, impossibilitando qualquer envio.
No Linux essa será a porta utilizada e dificilmente será o problema.

Agora pode fazer adaptações que necessitar.

Bem… o ficheiro acima está em anexo e poderá ser melhorado de acordo com sua necessidade!

Observações
Existem alguns erros que podem ocorrer, por isso alertamos para o seguinte:

  • Aparece o erro Warning: fsockopen() [function.fsockopen]: unable to connect to seusite.com: Este erro ocorre, pois os dados de acesso não estão corretos ou o Servidor não permite o acesso. Verifique se o seu Servidor bloqueia as portas SMTP (25, 465 ou 587) para visualização de Servidor externo.
  • Aparece o erro 535 authorization failed (#5.7.0)”: Se você tentou utilizar o Yahoo, GMail ou outro Programa de envio de email e foi negado é pq o seu e-mail não permite acesso pop3 nem smtp. Para isto deve efetuar as configurações devidas diretamente no Servidor para corrigir o problema.
  • Só para reforçar: Não se esqueça de alterar os dados de acesso e os emails destinatários, para que as mensagens não sejam enviadas a caixa de email do exemplo mas para a sua.
 Fonte: http://www.webmaster.pt/envio-email-smtp-phpmailer-9722.html

 

Tem mais dúvidas? Submeter um pedido

0 Comentários

Por favor, entrar para comentar.