Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Enviando e-mails com anexo autenticados ou com servidor SMTP externo

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Enviando e-mails com anexo autenticados ou com servidor SMTP externo

    Um problema muito comum para quem usa servidores gratuitos é a não possibilidade de envio de e-mails.
    A maioria simplesmente não permite. Outros, como o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... permitem que você configure SMTP externo.
    Vou mostrar aqui como utilizar um SMTP externo e autenticado para enviar e-mails, independente da configuração do servidor.
    Estou usando a classe Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
    Para exemplificar, vamos criar um formulário de contato.
    Crie uma pasta chamada 'anexos' na mesma localização do script. Caso esteja em um Unix ou derivado, dê CHMOD 777 na mesma.
    AVISO: Qualquer tipo de arquivo pode ser enviado. O que está em questão aqui é o envio de e-mails, e não um upload seguro.
    Vamos começar criando o formulário em si.
    Dica: aqui estou usando tabelas para dispor o formulário. Os últimos padrões WEB não recomendam isso, afinal, pela semântica, uma tabela é... uma tabela! Serve para exibir alguma coisa única, e não para controlar toda a página [Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...].
    Apesar disso, vou usar tabelas por ser algo fácil de ser entendido ao leitor iniciante de HTML.

    contato.html
    Código HTML:
    <html>
    <head>
    <title>Formulário de contato</title>
    </head>
    <body>
    <form method="post" action="contato.php" enctype="multipart/form-data">
    <!-- Faça o que eu digo.
           Não faça o que eu faço! -->
    <table>
      <tr>
        <td>Nome: </td>
        <td><input type="text" name="nome"></td>
      </tr>
      <tr>
        <td>E-mail: </td>
        <td><input type="text" name="email"></td>
      </tr>
      <tr>
        <td>Anexo (se necessário): </td>
        <td><input type="file" name="anexo"></td>
      <tr>
        <td>Mensagem: </td>
        <td><textarea rows="7" cols="30" name="mensagem"></textarea></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><input type="submit" value="Enviar mensagem"></td>
      </tr>
    </table>
    </form>
    </body>
    </html>
    Agora vamos obter os dados do formulário e enviá-los por e-mail.
    Note que não vou validar nenhum dado, pois o objetivo deste artigo é simplesmente mostrar o funcionamento da classe PHPMailer, e não de dar dicas de como criar formulários.

    contato.php
    Código PHP:
    <?php
    // vamos obter os dados do formulario
    // protegendo-os de qualquer tipo de tag HTML
    $nome htmlspecialchars($_POST['nome']);
    $email htmlspecialchars($_POST['email']);
    /* agora, para obter o conteúdo da mensagem, teremos um problema:
       quebras de linha não serão exibidas.
       mas é para isso que existe a função nl2br() né? :-) */
    $mensagem nl2br(htmlspecialchars($_POST['mensagem']));
    // vamos obter o IP do rementente
    $ip $_SERVER['REMOTE_ADDR'];

    // e montar a mensagem
    $msg 'Olá, tudo bem? <br>
    '
    .$nome.' ('.$ip.') lhe enviou a seguinte mensagem:<br>
    '
    .$mensagem.'<br>
    Quer respondê-la? Utilize o e-mail abaixo:<br>
    '
    .$email.'<hr size="1" color="black">
    <sup>Enviando e-mails autenticados, com servidor externo e anexos com PHP by 0KaL</sup>'
    ;

    // será que houve anexo?
    if($_FILES) { // se algum arquivo foi enviado
      
    $anexo $_FILES['anexo']['name'];
      
    $arquivo_temporario $_FILES['anexo]['tmp_name'];
      move_uploaded_file($arquivo_temporario, '
    anexos/'.$anexo);
    }

    // agora, vamos começar o envio
    // primeiro, incluímos a classe
    require_once("class.phpmailer.php");

    // agora, a magia da programação orientada a objetos
    // vamos chamar a classe e setá-la para português
    // vamos também dizer ao PHPMailer que serão enviadas tags HTML
    $envia = new PHPMailer();
    $envia->SetLanguage("br");
    $envia->CharSet = '
    UTF-8';
    $envia->IsSMTP();
    $envia->IsHTML(true);

    // vamos agora definir o envio da mensagem
    $envia->Host = "smtp.yahoo.com.br"; // servidor SMTP

    // caso não precise de autenticação, apague desde aqui
    $envia->SMTPAuth = true; // autenticacao ligada
    $envia->Username = '
    seuemail@yahoo.com.br'; // usuário do servidor SMTP
    $envia->Password = '
    nao-fiquei-doido-ainda'; // senha do servidor SMTP
    // caso não precise de autenticação, apague até aqui

    $envia->From = '
    seuemail@yahoo.com.br'; // aqui vai o seu e-mail
    $envia->FromName = $nome; // nome do rementente que pegamos no formulário

    // agora, é possível adicionar mais de um destinatário
    // como exemplo, vamos adicionar um destinatário, uma cópia carbono e uma cópia carbono oculta
    $envia->AddAddress('
    emailquerecebe@hotmail.com');
    $envia->AddCC('
    copiacarbono@gmail.com');
    $envia->AddBCC('
    cco@bol.com.br');

    $envia->Subject = '
    Do formulário de contato do site'; // assunto
    $envia->Body = $msg;
    // mas e se, por algum motivo, o servidor não aceitar a mensagem com HTML? Removeremos todas as tags rapidamente com a função strip_tags() :D
    $envia->AltBody = strip_tags($msg);

    if(isset($anexo)) { // se houver anexo
      $envia->AddAttachment($anexo, basename($anexo)); // ele será enviado
    }

    // agora vamos enviar o e-mail
    $manda = $envia->Send();

    // e limpar o cache
    $envia->ClearAllRecipients();
    $envia->ClearAttachments();

    // será que foi enviado mesmo?
    if($manda) { // se foi enviado
      echo '
    ObrigadoSua mensagem foi enviada.';
    } else { // senão
      echo '
    Por algum motivo não foi possível enviar a mensagem.<br>
    Detalhes técnicos: <br>
    <
    pre>'.$envia->ErrorInfo;.'</pre><br>
    Desculpe-nos...';
    }
    // fim!
    ?>
    Até mais!
    Este material pode ser compartilhado, desde que os devidos créditos sejam dados.



    Notify-list · Twitter · Blog

    Nova lei: Invadir computadores protegidos é crime.
    Lógica: Se eu invadi, não é protegido. Logo, não é crime :-)
    Similar Threads

  • Font Size
    #2
    Excelente.
    "If you're good at something, never do it for free".
    Joker

    Não, eu não estou aqui para financiar a sua empresa!!!

    Comment

    X
    Working...
    X