segunda-feira, 24 de setembro de 2012

PHP , SMTP - Função email autenticado

A função mail() no PHP, é uma função simples e usada largamente por quem deixa ao critério do servidor o envio de emails de dentro dos projecto, e esta função usa o servidor de envio de emails interno para o fazer.

No entanto, recentemente (não sei precisar o tempo) um dos maiores revendedores de serviços de alojamento do nosso país a esotérica, passo a não permitir o envio de email de dentro dos clientes sem que estes se autenticassem via SMTP.

Foi por este motivo que alguém me contacto, e me pediu para resolver o problema.

Pois bem, para começar tive que converter todos os ficheiros que enviavam emails, e retirar a função mail.

PHP - Email autenticado

o PHPMailer é uma classe de php que trata da ligação e de enviar os emails autenticados, por isso bastou importar o ficheiro e tratar do resto.

Para não andar sempre a importar o PHPMailer, decidi criar um ficheiro de envio de email, ao qual chamei smtpMailConfig.php o qual deverá ser adicionado com include() a cada inicio de página onde possa ser necessário.

Ficheiro.php
<?php

# Ficheiro de configurações de SMTP e ligação com PHPMailer
include("smtpMailConfig.php");

?>
smtpMailConfig.php

<?php
require("phpmailer/class.phpmailer.php");

/*
 * Função de Enviar o email
 * $vFrom - Email de Origem
 * $vFromNome - Nome de Origem
 * $vTo - Email de destino
 * $vToNome - Nome de destino
 * $vAssunto - Assunto do Email
 * $vEmail - Texto do Email
 * $vCC - Parametro CC (separados por ;)
 */
function fcEnviarEmail($vFrom,$vFromName,$vTo,$vToName,$vAssunto,$vEmail,$vCC){
global $mail;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;

# Dados de Ligação
$mail->Host = "127.0.0.1";
$mail->Username = "info@byteajudarblog.pt";
$mail->Password = "emailpassword";

# Dados Gerais
$mail->From = $vFrom;
$mail->FromName = $vFromName;
$mail->AddAddress($vTo, $vToName);

if(!empty($vCC)){
$vCCArr = explode(';',$vCC);
foreach($vCCArr as $key){
$mail->AddCC($key);
}
}


$mail->IsHTML(true);
$mail->Subject = $vAssunto;
$mail->Body = $vEmail;

if(!$mail->Send()){
return 0;
//echo $mail->ErrorInfo;
}else{
  return 1; //echo "Email Enviado";
}
}

?>

Enviar email pela função

Após a aplicação dos passos acima, basta chamar a função e passar os parâmetros:

Ficheiro.php
<?php
$assunto = "Email Online";
$texto = "Texto.......texto";


$mailOk = fcEnviarEmail("info@blog.pt","Nome Blog","email@destino.com",'Destino',$assunto,$texto,'cc1@destino.com;cc2@destino.com');

if($mailOk==1)
  echo "Email enviado com sucesso"; # Ou mais código php
else
  echo "Erro a enviar email";
?>


Autenticação nos serviços Esotérica

Para quem tenha mesmo assim erro a enviar email pelo serviço desta empresa, (e esta situação aconteceu comigo) basta no painel de controlo do domínio (s) verificar se no servidor de DNS existe indicação do localhost (IP: 127.0.0.1), caso não exista tem que adicionar.

======================
Nota: As minhas desculpas pelo código não estar com coloração, mas o blogger não tem essa ferramenta.


Sem comentários:

Enviar um comentário