Ago

Não tem função mail()? Aprenda a usar o PHPMailer com SMTP autenticado


Certamente se está a ler este artigo é porque em alguma altura já se deve ter reparado com o seguinte erro:

Warning: mail() has been disabled for security reasons in /home/username/public_html/mail.php

Na WebHS a função mail() do PHP encontra-se inactiva para prevenir a sua utilização abusiva, normalmente realizada devido a scripts mal programados / com falhas de segurança ou eventualmente devida a terceiros com intenções de efectuar envio massivo de spam. Nestas situações aconselhamos os nossos clientes a enviar o email por um servidor de SMTP autenticado.  Se usa WordPress pode ler este artigo, se usa Joomla leia este.

Se não usa nenhum CMS então o mais provável é ter de implementar a solução por si mesmo, e é nesse sentido que vem este artigo, onde iremos mostrar como enviar email por um servidor de SMTP autenticado usando o PHPMailer.

O que é o PHPMailer?

Basicamente é uma classe do PHP que possui funções mais avançadas que a classe mail() padrão. Uma das suas diferenças é permitir o envio seguro, principalmente a servidores que tenham como requisito a autenticação. A classe faz a autenticação do utilizador/password do SMTP no servidor e garante que aquele e-mail está a ser realmente enviado pela conta autenticada. No uso da função mail() padrão, não há autenticação, por isso os servidores podem rejeitar o acolhimento desses emeail – que é o que acontece em grande parte dos fornecedores.

 

Como enviar e-mails pelo PHP usando o PHPMailer

 

  1. Vamos começar por efectuar o download do código aqui.
  2. Após ter realizado o download descompacte o arquivo “PHPMailer-master.zip” e coloque os ficheiros “class.phpmailer.php” e “class.smtp.php” numa pasta chamada “phpmailer” dentro do seu site.  Após colocar os ficheiros, vamos começar a programar o envio dos e-mails.
  3. Fora da pasta “phpmailer” vamos criar um novo ficheiro chamado “enviarmail.php” (veja que a extensão do ficheiro é .php) e vamos lá colocar o seguinte código.

 

<?php

#
# Exemplo de envio de e-mail SMTP PHPMailer
#
# Inclui os ficheiros class.phpmailer.php localizado na pasta phpmailer
require_once("phpmailer/class.phpmailer.php");
require_once("phpmailer/class.smtp.php");

# Inicia a classe PHPMailer
$mail = new PHPMailer();

# Define os dados do servidor e tipo de conexão
$mail->IsSMTP(); // Define que a mensagem será SMTP
$mail->Host = "localhost"; # Endereço do servidor SMTP, na WebHS basta usar localhost caso a conta de email esteja na mesma máquina de onde esta a correr este código, caso contrário altere para o seu desejado ex: mail.nomedoseudominio.pt
$mail->Port = 587; // Porta TCP para a conexão
$mail->SMTPAutoTLS = false; // Utiliza TLS Automaticamente se disponível
$mail->SMTPAuth = true; # Usar autenticação SMTP - Sim
$mail->Username = 'seumail@nomedoseudominio.pt'; # Login de e-mail
$mail->Password = 'password'; // # Password do e-mail
# Define o remetente (você)
$mail->From = "seumail@nomedoseudominio.pt"; # Seu e-mail
$mail->FromName = "Nome do Remetente"; // Seu nome
# Define os destinatário(s)
$mail->AddAddress('fulano@dominio.pt', 'Pessoa Nome 1'); # Os campos podem ser substituidos por variáveis
#$mail->AddAddress('webmaster@nomedoseudominio.pt'); # Caso queira receber uma copia
#$mail->AddCC('pessoa2@dominio.pt', 'Pessoa Nome 2'); # Copia
#$mail->AddBCC('pessoa3@dominio.pt', 'Pessoa Nome 3'); # Cópia Oculta
# Define os dados técnicos da Mensagem
$mail->IsHTML(true); # Define que o e-mail será enviado como HTML
#$mail->CharSet = 'iso-8859-1'; # Charset da mensagem (opcional)
# Define a mensagem (Texto e Assunto)
$mail->Subject = "Mensagem Teste"; # Assunto da mensagem
$mail->Body = "Este é o corpo da mensagem de teste, em <b>HTML</b>! :)";
$mail->AltBody = "Este é o corpo da mensagem de teste, somente Texto! \r\n :)";

# Define os anexos (opcional)
#$mail->AddAttachment("c:/temp/documento.pdf", "documento.pdf"); # Insere um anexo
# Envia o e-mail
$enviado = $mail->Send();

# Limpa os destinatários e os anexos
$mail->ClearAllRecipients();
$mail->ClearAttachments();

# Exibe uma mensagem de resultado (opcional)
if ($enviado) {
echo "E-mail enviado com sucesso!";
} else {
echo "Não foi possível enviar o e-mail.";
echo "<b>Informações do erro:</b> " . $mail->ErrorInfo;
}
?>

Poderá efectuar o download deste exemplo aqui.

Lembramos que as configurações utilizadas para o PHPMailer foram efectuadas para serem usadas nos serviços de alojamento da WebHS. Repare que existem funções comentadas neste código, sendo que a opção de as usar (ou não) depende das necessidades de cada um.