Jump to content

Enviar itens do MYSQL para varios emails


Toninho
Go to solution Solved by Toninho,

Recommended Posts

Olá,

Preciso enviar os 10 ultimos itens de um mysql para todos os e-mails cadastrados, com codigo abaixo não acontece nada.

<?php
$conn = new mysqli("localhost","user","pass","db"); 
$sql = mysqli_query($conn, "SELECT * FROM jobs");
$numRows = mysqli_num_rows($sql); 
$mail_body = '';

while($row = mysqli_fetch_array($sql)){
  $id = $row["id"];
  $salary = $row["salary"];
  $cargo=$row["title"];
  $description = $row["plot"];
  $mail_body = '';
}

 //colocar a chamada mail dentro do loop que itera sobre os clientes:

$sql = mysqli_query($conn, "SELECT email FROM subscriptions WHERE id=4168");
$numRows = mysqli_num_rows($sql); 
$subject = "New jobs";
$headers  = "From:info@umsite.com\r\n";
$headers .= "Content-type: text/html\r\n";

while($row = mysqli_fetch_array($sql)){
   $email = $row["email"];
   $name = $row["firstname"];
   $mail_result = mail($email, $subject, $mail_body, $headers);
    
			
        
	if ($mail_result) {     
    echo 'ok';
}
	
}	 
?>

 grato por qualquer ajuda

Link to comment
Share on other sites

Para consultar os últimos 10 registos, tens que aplicar uma ordenação e um limite

-- Assumindo que existe uma coluna id (também pode ser um timestamp)
SELECT * FROM jobs ORDER BY id DESC LIMIT 10;

Depois tens que passar o código de enviar email para dentro do WHILE que processas os resultados do primeiro query.

Feito é melhor que perfeito

Link to comment
Share on other sites

De volta, Ivo e demais, somente envia para um e-mail, o que esta errado?

 

$conn = new mysqli("localhost","user","pass","bd"); 
$sql = mysqli_query($conn, "SELECT empregos.id, empregos.city,empregos.state,empregos.title,empregos.plot,empregos.salary,empregos.created_at,empregos.category as cat,subscriptionsbh.city_id,subscriptionsbh.id as ids,subscriptionsbh.email as mail
FROM `empregos`,subscriptionsbh
WHERE empregos.city=subscriptionsbh.city_id AND approved=1 AND created_at BETWEEN NOW() - INTERVAL 3 DAY AND NOW() limit 10");
$numRows = mysqli_num_rows($sql); 
$message = '';

while($row = mysqli_fetch_array($sql)){
  $id = $row["id"];
  $price = $row["salary"];
  $cargo = $row["title"];
  $city = $row["city"];
  $plot = $row["plot"];
  $T20=$city;
$_SESSION['T20']=$T20;
  $message .= '<html><body>';
        $message .= '<table style="background-color:#F3F3F3; text-decoration:none" cellpadding="4">';
		$message .= "<tr><td><a href=/".str_replace(" ","-",strtolower($city)).">".$city."</a></td></tr>";
		$message .= "<tr><td><a href=/".str_replace(" ","-",strtolower($city)).'/mais/'.$id.'-'.str_replace(" ","-",$cargo).">". $cargo."</a></td></tr>";
        $message .= "<tr><td>" . $plot. "</td></tr><br>";
        $message .= "</table>";
        $message .= "</body></html>";

}
 
$sql = mysqli_query($conn, "SELECT * FROM subscriptionsbh WHERE city_id='".$city."'  and is_confirmed=1 AND (last_sent < CURDATE() OR last_sent IS NULL)   " );
$numRows = mysqli_num_rows($sql); 
$subject = "Novos";
$headers  = "From:no-reply@site.com\r\n";
$headers .= "Content-type: text/html\r\n";

while($row = mysqli_fetch_array($sql)){

$emailaddress[] = $row["email"];
   $email = $row["email"];
   //$name = $row["firstname"];
   
 }  
   $i=0;
	foreach($emailaddress as $contactemail) {
	
	
		$replyName = "site";
	$replyEmail = "no-reply@site";

	$contactname = "";
	$headers = "From: ".$replyName." <".$replyEmail.">" . PHP_EOL;
	$headers .= "MIME-Version: 1.0" . PHP_EOL;
	$headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL;
	//$para=$contactemail;
	$hoje=date("d-m-Y");
	$subject = $_GET['msg']." ".$T20." (".$hoje.")";
	// Headers
	
	//echo "ver emails". $contactemail;
	
	
	
	mail($contactemail, $subject, $message, $headers);
	
	$i++;
	
	 echo "<h2>Email notification sent</h2>";
  echo "<h2>".$i." mails sent</h2>";
	
 }

 

Link to comment
Share on other sites

Viva, 

Se executares o query SELECT * FROM subscriptionsbh WHERE city_id='".$city."' ... . num editor de SQL devolve mais do que 1 resultado?

Também podes fazer var_dump($numRows) tens essa variavel em 2 locais, mas não vejo que a uses, mas sempre podes saber o numero de resultados da query, porque assim à partida o problema deve ser aí.

Nota à parte, aconselhava-te a começar a pensar em usar o PDO para ações nas bases de dados (link adicional, explicação do porquê e sugestões), se estiveres a fazer algum curso online e não fale em PDO, pede o dinheiro de volta.

Feito é melhor que perfeito

Link to comment
Share on other sites

Ivo,

var_dump($numRows);  4 registros (cidades)

var_dump($numRows); 1 email (na tabela de teste subscriptionsbh tem 4 e-mails)

 

var_dump($contactemail); 1 email (na tabela de teste subscriptionsbh tem 4 e-mails)

Deveria enviar para os 4  emails e para as cidades correspondentes de cada e-mail, esta enviando somente para um e-mail com varias cidades.

 

Sendo possível me ajude.

Link to comment
Share on other sites

<?php 
  //....
	$message .= "</table>";
    $message .= "</body></html>";
//-- Estas a fechar o WHILE antes do novo query
}

//-- Valor city, é o ultimo dos resultados do query de cima
$sql = mysqli_query($conn, "SELECT * FROM subscriptionsbh WHERE city_id='".$city."'  and is_confirmed=1 AND (last_sent < CURDATE() OR last_sent IS NULL)   " );
$numRows = mysqli_num_rows($sql); 

Esta aí em cima comentado  no código onde está o teu problema atual.

Feito é melhor que perfeito

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.