Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal eu estava mandando e-mail normalmente com o phpmailler, mas depois que mudei de provedor começou a dar pau. Testando no apache está dando este erro:
Mensagem enviada para: clovis.sardinha@gmail.com
Fatal error: Cannot redeclare class phpmailerException in /home/storage/7/0d/4a/portaldapermuta1/public_html/PHPMailer_v5.1/class.phpmailer.php on line 4637
Alguém pode me dizer o que pode estar acontecendo? Segue abaixo o principal do instanciamento da classe:
require ("../PHPMailer_v5.1/class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP = ('smtp');
$mail -> SMTPDebug = 1;
$mail->Mailer = ('mail');
$mail->Host='smtp.portaldapermuta.com';
$mail->SMTPSecure = 'ssl';
$mail->SMTPAuth = true;
$mail->Port=587;
$mail->Username = ('xxxxxxxx@portaldapermuta.com');
$mail->Password = ('xxxxxxxxxxx');
$mail->Sender = ('xxxxxxxx@portaldapermuta.com');
$mail->From = ('xxxxxxx@portaldapermuta.com');
$mail->FromName = $de;
$mail->AddReplyTo = ('xxxxxxxxx@portaldapermuta.com');
$mail->Wordwrap = 50;
$mail->Subject = ($assunto);
$mail->IsHTML = true;
$mail->AddAddress($para);
$texto = 'Texto alternativo, caso não seja exibido o HTML por algum problema';
$mail->Body = $html;
$mail->AltBody = $texto;
if($mail->Send()){
echo "<hr />Mensagem enviada para: ". $para ."<br />";
//Altero o código para 1 para parar o envio do loop
@mysql_query("UPDATE". $tabela ."SET codStatus = 1 WHERE id = 1".$id);
} else {
echo "Mensagem não enviada para: ". $para ."<br />";
}
}>
Essa mensagem: Cannot redeclare[/size]
Geralmente indica que tem duplicidade no: require ("../PHPMailer_v5.1/class.phpmailer.php"); Verifica se não tem algum outro lugar requerendo este arquivo, algum outro include ao mesmo neste arquivo.
E @ não corrige erros, só esconde. Então, aqui:
@mysql_query("UPDATE". $tabela ."SET codStatus = 1 WHERE id = 1".$id);
Troque para:
mysql_query("UPDATE". $tabela ."SET codStatus = 1 WHERE id = 1".$id) or die(mysql_error());
Obrigado, vou tentar e depois retorno.
Allex, verifiquei que não há duplicidade no include, porém há um laço de repetição para que ele pegue o próximo e-mail e envie. Talvez seja isto. você sabe se há como fechar o include após a repetição? O mysql com o "or die "não apresentou falha.
Poste o código completo para analise.
tente substituir o
require ("../PHPMailer_v5.1/class.phpmailer.php");
por:
require_once ("../PHPMailer_v5.1/class.phpmailer.php");
ao colocar require_once deu este erro:
Could not instantiate mail function. Mensagem não enviada para: clovis.sardinha@gmail.com[/size]
Could not instantiate mail function. Mensagem não enviada para: clovis.sardinha@uol.com.br[/size]
Could not instantiate mail function. Mensagem não enviada para: clovis.sardinha@yahoo.com.br[/size]
codigo completo:[/size]
<?php header ('Content-Type: text/html; charset=utf-8');require_once('../Connections/marketing.php'); //Campos para envio da mensagem $de = utf8_decode('Portal da Permuta'); $para = utf8_decode('atendimento@portaldapermuta.com'); $assunto = utf8_decode('PORTAL DA PERMUTA - Vamos aumentar a participação'); $html = utf8_decode('<!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=utf-8" /><title>Novidades do Portal da Permuta</title><style type="text/css">.informe {font-family: "Comic Sans MS", cursive;font-size: 14px;width: 500px;background-color: #FFF;margin: auto;padding: 20px;}#logos {width: 100%;padding: 0px;}#portal {float: right;}</style></head><body><div class="informe"> <p>Caso não consiga visualizar esta mensagem <a href="http://www.portaldapermuta.com/propaganda/novidade.html">clique aqui</a>. </p> <h2 align="center"> </h2> <p> </p>;</p></div></body></html>'); // CAMPOS UTILIZADOS PARA A CONSULTA $campos = "id_mark, nome, email, codStatus"; // NUMERO MÁXIMO DE ENVIO $quant = 50; // TEMPO ENTRE UM PROCESSO DE ENVIO E OUTRO $seg = 1820; // CONECTA COM O o BANCO mysql_select_db($database_marketing,$marketing); // RESGATA O VALOR DA GLOBAL INICIO $inicio = $_GET["inicio"]; // ATRIBUI O RESULTADO DA SOMA ENTRE INICIO E QUANT $fim = $inicio + $quant; // VERIFICA SE FOI ATRIBUIDO VALOR A VARIAVEL "INICIO" if($inicio == ""){ // ATRIBUI O VALOR 0 CASO NÃO EXISTA VALOR ATRIBUIDO $inicio = 0; }else{ // ATRIBUI O VALOR DA GLOBAL INICIO CASO JA EXISTA VALOR ATRIBUIDO $inicio = $_GET["inicio"]; } // EXECUTA A CONSULTA OU INFORMA UM ERRO CASO OCORRA $sql = mysql_query("SELECT * FROM marketing_participantes WHERE codStatus = 0 LIMIT ". $inicio .",". $quant)or die(mysql_error()); // VERIFICA SE AINDA EXISTEM EMAILS A SEREM ENVIADOS if(mysql_num_rows($sql) == 0){ // ALTERANDO O VALOR DO CAMPO CODSTATUS PARA 0 mysql_query("UPDATE ". $tabela ." SET codStatus = 0")or die(mysql_error());; // INFORMO O TÉRMINO DO PROCESSO echo "Fim do processo de envio!"; }else{ // CONTINUA EFETUANDO O ENVIO echo "<meta http-equiv=\"refresh\" content=\"" . $seg . ",URL=?inicio=". $fim ."\">"; } // CRIA O LAÇO REPETITIVO while($r = mysql_fetch_array($sql)){ // ADICIONAMOS OS PADRÕES DE DESTINATRIO $para = $r["email"]; //Criando a classe PHPMailer para envio de newsletterrequire_once("../PHPMailer_v5.1/class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsSMTP = ('smtp');$mail -> SMTPDebug = 1; $mail->Mailer = ('mail');$mail->Host='smtp.portaldapermuta.com'; $mail->SMTPSecure = 'ssl'; $mail->SMTPAuth = true;$mail->Port=587; $mail->Username = ('xxxxxxxxxxxx@portaldapermuta.com'); $mail->Password = ('xxxxxxxx'); $mail->Sender = ('xxxxxxxxxxxx@portaldapermuta.com'); $mail->From = ('xxxxxxxxx@portaldapermuta.com'); $mail->FromName = $de; $mail->AddReplyTo = ('xxxxxxxxxxx@portaldapermuta.com'); $mail->Wordwrap = 50; $mail->Subject = ($assunto); $mail->IsHTML = true;$mail->AddAddress($para); $texto = 'Texto alternativo, caso não seja exibido o HTML por algum problema'; $mail->Body = $html; $mail->AltBody = $texto; if($mail->Send()){ echo "<hr />Mensagem enviada para: ". $para ."<br />"; //Altero o código para 1 para parar o envio do loop @mysql_query("UPDATE". $tabela ."SET codStatus = 1 WHERE id = 1".$id); } else { echo "Mensagem não enviada para: ". $para ."<br />"; } } ?>
O estranho é quando mando pelo servidor da locaweb. Não dá erro, mas também não chega..hehehe. Continuo estudando...
[sat Aug 30 20:34:00 2014] [error] [client 127.0.0.1] client denied by server configuration: C:/Apache2, referer: http://localhost/
erro do log do apache.
Embora um formulário idêntico, mas sem utilizar o mysql, roda normal pelo apache!
Essa mensagem: Cannot redeclare
Geralmente indica que tem duplicidade no: require ("../PHPMailer_v5.1/class.phpmailer.php"); Verifica se não tem algum outro lugar requerendo este arquivo, algum outro include ao mesmo neste arquivo.
E @ não corrige erros, só esconde. Então, aqui:
Troque para: