Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Web Design Valdeci

Corpo da mensagem desconfigurada utilizando a funçao mail()

Recommended Posts

Boa Tarde,

 

Tenho um sistema que envia mensagens via script via formulário para emails cadastrados no banco de dados. Ele funciona em diversos servidores mas na King Host tive que adaptar meu código utilizando um script que eles me passaram enviando emails com a função mail(), Configurei para que o script envie de 1 em 1 email a cada 14 segundos pois o servidor lá somente aceita que envie 250 mensagens por hora e somente aceita um destinatário por vez até ai ok. Mas quando envio ocorrem 2 problemas:

 

1 - Ele envia mas a mensagem chega desconfigurada, mostrando o cabeçalho no corpo da mensagem (desculpem minha ignorância mas estou aprendendo php e tentei de diversas formar arrumar isso e nao consegui) Envio abaixo o codigo que estou utilizando.

<?php 
if($_POST[elm1] != "")
$_SESSION[msg] = stripslashes($_POST[elm1]);
$msg = $_SESSION[msg];
if($_POST[assunto] != "")
$_SESSION[assunto] = $_POST[assunto];
$assunto = $_SESSION[assunto];

if($_POST[ramo] != "")
$_SESSION[ramo] = $_POST[ramo];

$ramo = $_SESSION[ramo];

//configurações do banco 
$host = "mysql.meubanco.com.br"; 
$banco = "nomedobanco"; 
$usuario = "usuario"; 
$senha = "senha"; 
$tabela = "emails"; 
$campos = "id,email,status"; //campos da tabela 

//configurações do e-mail 
$email_assunto = $assunto; 

$email_conteudo = $msg; 
$nome_remetente = "nome da empresa"; 
$email_remetente = "email@emaildodominio.com.br\r\n"; 

$quant = 1; //número de mensagens enviadas de cada vez 
$sec = 14; //tempo entre o envio de um pacote e outro (em segundos) 
?> 

<?php 
$conexao = mysql_connect($host,$usuario,$senha); 
mysql_select_db($banco); 
?> 

<?php 
$ok = 0; 
$inicio = 0; 
$fim = $inicio + $quant; 
?> 

<?php 
$sql = "select $campos from $tabela where status = 0 limit $inicio,$fim"; 
$query = mysql_query($sql,$conexao); 
$registros = mysql_num_rows($query); 
?> 

<?php 
if($registros==0){ 
mysql_query("update $tabela set status = 0"); 
printf("<font face=’tahoma’>todas as mensagens foram enviadas!</font>"); 
$ok = 1; 
} 
?> 

<?php 
while($result = mysql_fetch_array($query)){ 
$id = $result[0]; 
$email_destinatario = $result[1]; 
$status = $result[2]; 

if($email_destinatario != ""){

//REMETENTE --> ESTE EMAIL TEM QUE SER VALIDO DO DOMINIO
        //====================================================
        $email_do_remetente = $email_remetente; // deve ser um email do dominio
        //====================================================
 
 
        //Configurações do email, ajustar conforme necessidade
        //====================================================
        //$email_destinatario = $to; // qualquer email pode receber os dados
        $email_reply = "valdeci.alves@gmail.com";
        //$email_assunto = $subject;
        //====================================================
 
 
        //Monta o Corpo da Mensagem
        //====================================================
        //$email_conteudo = $body;
        //====================================================
 
 
        //Seta os Headers (Alerar somente caso necessario)
        //====================================================

		$email_headers = "MIME-Version: 1.0\r\n";
        $email_headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        $email_headers .= "From: $nome_remetente <$email_do_remetente>";
        $email_headers .= "Reply-To: $email_reply\n"; // Endereço (devidamente validado) que o seu usuário informou no contato
        $email_headers .= "Return-Path:  $email_remetente"; // Endereço (devidamente validado) que o seu usuário informou no contato
        //====================================================
 
 
        //Enviando o email
        //====================================================
        if (mail ($email_destinatario, $email_assunto, $email_conteudo, $email_headers)){
                echo "</b>E-Mail enviado com sucesso!</b>";
        }
        else{
                echo "</b>Falha no envio do E-Mail!</b>";
        }
        //====================================================
}
mysql_query("update $tabela set status = 1 where id = $id"); 
printf("<font face=’tahoma’>$id ) mensagem para <b>$email_destinatario</b> <font color=’#ff0000’><b>enviada com sucesso!</b></font></font> 
"); 
 
}
?> 

<?php 
mysql_free_result($query); 
mysql_close($conexao); 
?> 

<?php 
if(!$ok){ 
echo("<meta http-equiv=\"refresh\" content=\"" . $sec . "\">"); 
} 
?> 

Vejam como o corpo da mensagem chega:

 

Date: Mon, 29 Dec 2014 21:23:17 -0200 (BRST)

Return-Path: <ecommerce@paramontmg.com.br>

X-Antivirus: avast! (VPS 141229-1, 29/12/2014), Inbound message

X-Antivirus-Status: Clean

 

Reply-To: valdeci.alves@gmail.com

Subject: Promoção teste

Return-Path: emaildaempresa@dominio.com.br

 

 

MIME-Version: 1.0

X-Priority: 3

Content-type: text/html; charset=iso-8859-1

 

<p><img src="http://www.site.com.br/newsletter/imgnews/1419894855804108.jpg" border="0" alt="" /></p> <br />

 

 

2 - A primeira mensagem chega para o destinatário com todos os campos, assunto e corpo mesmo que errado como acima. Mas as outras, parece que na hora do loop perdem os campos assunto e corpo.

 

Poderiam ver onde eu errei. Agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite,

Após alguns testes e seguindo a sugestão do amigo Lucas Guima, utilizei o PHPMailler.

Ele continua exibindo mensagem enviada mas nao chega. Reparei uma coisa.

Eu cadastrei 3 emails no banco de dados para envio. O sistema faz um loop para enviar de 1 em 1 a cada 14 segundos. Quando dou comando para enviar ele aparece que enviou mas nao chega o email para os cadastrados no banco, coloquei tambem para enviar uma copia para meu email do dominio, nele eu recebo a mensagem correta so apenas no primeiro loop dos 3. Os outros ele perde o conteúdo e o assunto que foi recebido pelo form. Mas o que preciso é que ele enviar para os emails recebidos na consulta.

 

Creio que o erro está neste local.

<?php 

while($result = mysql_fetch_array($query)){ 
$id = $result[0]; 
$to = $result[1]; 
$status = $result[2]; 

if($to != ""){

// Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer
	require("../testemail/class.phpmailer.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 = "smtp.dominio.com.br"; // Endereço do servidor SMTP
	$mail->SMTPAuth = true; // Usa autenticação SMTP? (opcional)
	$mail->Username = 'marketing@dominio.com.br'; // Usuário do servidor SMTP
	$mail->Password = 'senha'; // Senha do servidor SMTP
	 
	// Define o remetente
	// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	$mail->From = "marketing@dominio.com.br"; // Seu e-mail
	$mail->FromName = "Aqui vai o nome da empresa"; // Seu nome
	 
	// Define os destinatário(s)
	// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	$mail->AddAddress = $to;
	$mail->AddAddress('marketing@dominio.com.br');
	//$mail->AddCC('ciclano@site.net', 'Ciclano'); // Copia
	//$mail->AddBCC('fulano@dominio.com.br', 'Fulano da Silva'); // 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 = $subject; // Assunto da mensagem que recebo do form
	$mail->Body = $body; // Corpo da mensagem que recebo do form
//	$mail->AltBody = "TESTE" alt=":)" class="wp-smiley" height="15" width="15">;
	 
	// Define os anexos (opcional)
	// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	//$mail->AddAttachment("c:/temp/documento.pdf", "novo_nome.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
	if ($enviado) {
	echo "E-mail enviado com sucesso!";
	} else {
	echo "Não foi possível enviar o e-mail.<br /><br />";
	echo "<b>Informações do erro:</b> <br />" . $mail->ErrorInfo;
	}
mysql_query("update $tabela set status = 1 where id = $id"); 
printf("<font face=’tahoma’>$id ) mensagem para <b>$to</b> <font color=’#ff0000’><b>enviada com sucesso!</b></font></font> 
"); 
 }
}
?> 

Eu reparei que para os emails do banco nao chegam. Para o que coloquei com copia do dominio no primeiro loop recebe tudo direitinho, os outros ele perde e a mensagem chega sem assunto e sem corpo. Nao sei se é porque criei uma array para receber os campo email e ele nao está aceitando, poderiam dar uma força aí?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia Lucas,

 

Ele somente envia para o email com copia que coloquei que é do mesmo domínio. Para os emails que vem do banco de dados ele nao envia.

Creio que o erro esteja nesta parte, como estou armazenando os registros em array, ele pode nao aceitar isso.

while($result = mysql_fetch_array($query)){ 
$id = $result[0]; 
$to = $result[1]; 
$status = $result[2]; 

A parte que recebe a variavel $to; está aqui

// Define os destinatário(s)
	// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	$mail->AddAddress = $to;
	$mail->AddAddress('marketing@dominio.com.br');
	//$mail->AddCC('ciclano@site.net', 'Ciclano'); // Copia
	//$mail->AddBCC('fulano@dominio.com.br', 'Fulano da Silva'); // Cópia Oculta
	 

Para o $mail->AddAddress('marketing@dominio.com.br'); ele envia, mas para o $to; que vem do banco de dados ele nao envia. E o estranho é que ele envia para o email $mail->AddAddress('marketing@dominio.com.br'); somente no primeiro loop com os dados, nos outros dois loops que faz, o email chega mais vazio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, obrigado pela ajuda. Eu alterei para:

// Define os destinatário(s)
	// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	$mail->AddAddress ('$to');
	$mail->AddCC('marketing@dominio.com.br'); // Copia
	//$mail->AddBCC('fulano@dominio.com.br', 'Fulano da Silva'); // Cópia Oculta

Apareceru a seguinte mensagem:

 

Não foi possível enviar o e-mail.

Informações do erro:
SMTP Error: The following SMTP Error: Data not accepted.$to1 ) mensagem para contato@emailcad.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia Lucas,

 

Obrigado mesmo pela sua ajuda. Pode deixar que estudarei bastante.

Agora sim chega, mas como havia dito antes, no primeiro loop, o primeiro email é enviado com os dados, no seguinte ele perde os dados do form. O que fiz de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Notice: Use of undefined constant elm1 - assumed 'elm1' in /home/site/www/newsletter/enviaEmail4_2.php on line 4

Notice: Use of undefined constant msg - assumed 'msg' in /home/site/www/newsletter/enviaEmail4_2.php on line 5

Notice: Use of undefined constant elm1 - assumed 'elm1' in /home/site/www/newsletter/enviaEmail4_2.php on line 5

Notice: Use of undefined constant msg - assumed 'msg' in /home/site/www/newsletter/enviaEmail4_2.php on line 6

Notice: Use of undefined constant assunto - assumed 'assunto' in /home/site/www/newsletter/enviaEmail4_2.php on line 7

Notice: Use of undefined constant assunto - assumed 'assunto' in /home/site/www/newsletter/enviaEmail4_2.php on line 8

Notice: Use of undefined constant assunto - assumed 'assunto' in /home/site/www/newsletter/enviaEmail4_2.php on line 8

Notice: Use of undefined constant assunto - assumed 'assunto' in /home/site/www/newsletter/enviaEmail4_2.php on line 9

Notice: Use of undefined constant ramo - assumed 'ramo' in /home/site/www/newsletter/enviaEmail4_2.php on line 11

Notice: Undefined index: ramo in /home/site/www/newsletter/enviaEmail4_2.php on line 11

Notice: Use of undefined constant ramo - assumed 'ramo' in /home/site/www/newsletter/enviaEmail4_2.php on line 14

Notice: Undefined index: ramo in /home/site/www/newsletter/enviaEmail4_2.php on line 14

Deprecated: Function eregi() is deprecated in /home/site/www/testemail/class.phpmailer.php on line 599
E-mail enviado com sucesso!1 ) mensagem para contato@emailcad.com.br enviada com sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pesquisei na net e ví que faltava aspas simples nas variaves que recebiam os dados do post. Ele sumiu a maioria dos erros, Agora aprece este:

 

Deprecated: Function eregi() is deprecated in /home/site/www/testemail/class.phpmailer.php on line 599

 

e ao fim dos envios mensagem:

 

Notice: Undefined index: elm1 in /home/site/www/newsletter/enviaEmail4_2.php on line 4

Notice: Undefined variable: _SESSION in /home/site/www/newsletter/enviaEmail4_2.php on line 6

Notice: Undefined index: assunto in /home/site/www/newsletter/enviaEmail4_2.php on line 7

Notice: Undefined variable: _SESSION in /home/site/www/newsletter/enviaEmail4_2.php on line 9

 

Esta parte do erro está nesta parte do codigo

if($_POST['elm1'] != "")
$_SESSION['msg'] = stripslashes($_POST['elm1']);
$msg = $_SESSION['msg'];
if($_POST['assunto'] != "")
$_SESSION['assunto'] = $_POST['assunto'];
$assunto = $_SESSION['assunto'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Pesquisei na net e vi que faltou isto:

 

session_start ();

 

Coloquei no incio do código e funcionou.

Muito obrigado pela atenção e disposição de tempo.

Estou estudando php para ficar fera como você.

 

RESOLVIDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.