Jump to content

Problem sending mass mail


GamerGun

Recommended Posts

Dear,

 

The following code is meant to send the same single 'letter' to all recipients (with an confirmed email address) within the database.

 

This works, but unfortunately it screws up the 'sorting' of addresses and names, so that person X gets the name from person Y.

 

The DB column is set up like this:

 

ID - naam (name) - email - code - bevestigd (confirmed)

 

Any idea on how to fix this? For the record; running this script outputs "Mail verzonden!" 3 times, which matches with the 3 valid email address within the database.

 

Thanks in advance.

 

Best regards,

 

Tommy

 

<?php 

include 'config/connect.php';

$sendmail = mysql_real_escape_string($_GET['sendmail']);

if ($sendmail=="yes") {

    $result = mysql_query("SELECT * FROM berichten WHERE TO_DAYS(NOW())-TO_DAYS(datum) <=7 ORDER BY id DESC")
    or die(mysql_error());

function neat_trim($str, $n, $delim='...') { 
   $len = strlen($str); 
   if ($len > $n) { 
       preg_match('/(.{' . $n . '}.*?)\b/', $str, $matches); 
       return rtrim($matches[1]) . $delim; 
   } 
   else { 
       return $str; 
   } 
}

$sql = "SELECT * FROM nieuwsbrief WHERE bevestigd = '1'";
$query = mysql_query($sql);
$num_rows = mysql_num_rows($query);
if ($num_rows == 0){
echo "Het databeest is boos...";
}
else 
{
   while ($row = mysql_fetch_array($query))
   {
      $naam = $row['naam'];
      $email = $row['email'];

$to = "$email";

$from = "[email protected]";

    $headers  = "Van: $from\r\n";
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=utf-8\r\n"; 

$subject = "Nieuwsbrief www.watmijoverkwam.nl";

$body .= "Beste $naam,";
$body .= "<br /><br />";
$body .= "Hierbij sturen we je de nieuwste verhalen van afgelopen week.";
$body .= "<br /><br />";

while($row = mysql_fetch_array($result)){

    $id = $row['id'];
    $message = $row['bericht'];
    $onderwerp = $row['onderwerp'];
    $titel = $row['titel'];

$titel2 = eregi_replace(' ', '-', $titel);
$titel2 = strtolower($titel2);

$titellink = "<a href=\"http://watmijoverkwam.nl/$titel2-$id.html\">$titel</a>";
$verderlezen = "<a href=\"http://watmijoverkwam.nl/$titel2-$id.html\">Lees verder</a>";
$dezepagina = "<a href=\"http://watmijoverkwam.nl/afmelden.html\">afmeldpagina</a>";
$url = "<a href=\"http://watmijoverkwam.nl/\">http://watmijoverkwam.nl/</a>";

$body .= $titellink;
$body .= " (";
$body .= $onderwerp;
$body .= ")";
$body .= "<br />";
$body .= neat_trim($message, 120);
$body .= "<br />";
$body .= $verderlezen;
$body .= "<br /><br />";

}

$body .= "Je ontvangt deze nieuwsbrief omdat je bent aangemeld op $url.";
$body .= "<br />";
$body .= "Wil je deze nieuwsbrief niet meer ontvangen?";
$body .= "<br />";
$body .= "Meldt je dan af op de ";
$body .= $dezepagina;
$body .= ".";

$body .= "<br /><br />";
$body .= "Met vriendelijke groeten,";
$body .= "<br />";
$body .= "$url";

mail($to, $subject, $body, $headers);

  echo "Mail verzonden!";

}
   }

} else {

  echo "We versturen niks!";

}

?>

Link to comment
https://forums.phpfreaks.com/topic/196117-problem-sending-mass-mail/
Share on other sites

Well, i changed the code into this:

 

<?php

include 'config/connect.php';

$sendmail = mysql_real_escape_string($_GET['sendmail']);

if ($sendmail=="yes")
  {

$from="[email protected]";
$table="nieuwsbrief";
$table_email="email";
$table_naam="naam";

$resultquery = mysql_db_query($database, "select * from $table where bevestigd='1'");
$result = mysql_query("SELECT * FROM berichten WHERE TO_DAYS(NOW())-TO_DAYS(datum) <=7 ORDER BY id DESC") or die(mysql_error());

function neat_trim($str, $n, $delim='...') { 
   $len = strlen($str); 
   if ($len > $n) { 
       preg_match('/(.{' . $n . '}.*?)\b/', $str, $matches); 
       return rtrim($matches[1]) . $delim; 
   } 
   else { 
       return $str; 
   } 
}

    while ($query = mysql_fetch_array($resultquery))
    {

    	$beste=$query[$table_naam];

while($row = mysql_fetch_array($result)){

    	$headers  = "Van: $from\r\n";
    	$headers = "MIME-Version: 1.0\r\n";
    	$headers .= "Content-type: text/html; charset=utf-8\r\n"; 

$subject = "Nieuwsbrief www.watmijoverkwam.nl";

$body .= "Beste $beste,";
$body .= "<br /><br />";
$body .= "Hierbij sturen we je de nieuwste verhalen van afgelopen week.";
$body .= "<br /><br />";

    	$id = $row['id'];
    	$message = $row['bericht'];
    	$onderwerp = $row['onderwerp'];
    	$titel = $row['titel'];

$titel2 = eregi_replace(' ', '-', $titel);
$titel2 = strtolower($titel2);

$titellink = "<a href=\"http://watmijoverkwam.nl/$titel2-$id.html\">$titel</a>";
$verderlezen = "<a href=\"http://watmijoverkwam.nl/$titel2-$id.html\">Lees verder</a>";
$dezepagina = "<a href=\"http://watmijoverkwam.nl/afmelden.html\">afmeldpagina</a>";
$url = "<a href=\"http://watmijoverkwam.nl/\">http://watmijoverkwam.nl/</a>";

$body .= $titellink;
$body .= " (";
$body .= $onderwerp;
$body .= ")";
$body .= "<br />";
$body .= neat_trim($message, 120);
$body .= "<br />";
$body .= $verderlezen;
$body .= "<br /><br />";

$body .= "Je ontvangt deze nieuwsbrief omdat je bent aangemeld op $url.";
$body .= "<br />";
$body .= "Wil je deze nieuwsbrief niet meer ontvangen?";
$body .= "<br />";
$body .= "Meldt je dan af op de ";
$body .= $dezepagina;
$body .= ".";

$body .= "<br /><br />";
$body .= "Met vriendelijke groeten,";
$body .= "<br />";
$body .= "$url";

}

    	$mailto=$query[$table_email];
     	mail($mailto, $subject, $body, $headers);
	echo 'Mail sent to '.$beste.' '.$mailto.'<br>';
        sleep($seconds);
    }
    echo 'Mails sent.';
  }
  else
  {
    echo 'Error.';
  }
  ?>

 

The database contains:

 

Name: A

Email: [email protected]

 

Name: B

Email: [email protected]

 

Name: C

Email: [email protected]

 

(All confirmed)

 

When running the script, it says:

 

Mail sent to A [email protected]

Mail sent to B [email protected]

Mail sent to C [email protected]

Mails sent.

 

So that is correct, but all the users (A, B and C) get an e-mail which says: Beste (Dear) A.

 

So something goes wrong with the loop and the

 

	$body .= "Beste $beste,";

 

Any idea why?

 

Thanks in advance.

Fixed it, changed the way of working but oh well:

 

send.php

<?php include '../header.php'; ?>

<div id="content">
<div id="contentleft">

<h2>Nieuwsbrief opstellen</h2>
<form method="post" action="mailer.php">
Speed<br>
<select name="speed">
  <option value="1">Insane</option>
  <option value="4">Fast</option>
  <option value="8" selected="selected">Normal</option>
  <option value="12">Slow</option>
</select>
<br>
Message:<br>
<textarea name="message" rows="25" cols="75" wrap="off">

<?php

$result = mysql_query("SELECT * FROM berichten WHERE TO_DAYS(NOW())-TO_DAYS(datum) <=14 ORDER BY id DESC") or die(mysql_error());

function neat_trim($str, $n, $delim='...') { 
   $len = strlen($str); 
   if ($len > $n) { 
       preg_match('/(.{' . $n . '}.*?)\b/', $str, $matches); 
       return rtrim($matches[1]) . $delim; 
   } 
   else { 
       return $str; 
   } 
}

while($row = mysql_fetch_array($result)){ 

$id = $row['id'];
$message = $row['bericht'];
$onderwerp = $row['onderwerp'];
    
$titel = $row['titel'];
$titel2 = eregi_replace(' ', '-', $titel);
$titel2 = strtolower($titel2);

$titellink = "<a href=\"http://domain/$titel2-$id.html\">$titel</a>";
$verderlezen = "<a href=\"http://domain/$titel2-$id.html\">Lees verder</a>";

echo $titellink;
echo  " (";
echo  $onderwerp;
echo  ")";
echo  "\n<br />";
echo  neat_trim($message, 120);
echo  "\n<br />";
echo  $verderlezen;
echo  "\n\n<br /><br />";

}

?>

</textarea>
<br>
<input type="submit" name="start sending" value="Start Sending" >
</form>

<br />
</div><!-- Closing contentleft -->

<?php include '../menu.php'; ?>

<?php include '../footer.php'; ?>

</div>

</body>
</html>

 

mailer.php

<?php include '../header.php'; ?>

<div id="content">
<div id="contentleft">

<h2>Nieuwsbrieven versturen</h2>

<?php

    $inum1 = rand(0,255);
    $inum2 = rand(0,255);
    $inum3 = rand(0,255);
    $inum4 = rand(0,255);
    $ip = $inum1.'.'.$inum2.'.'.$inum3.'.'.$inum4;

$sql = mysql_query('SELECT * FROM `nieuwsbrief` WHERE `bevestigd` = 1') or die(mysql_error());
$num_rows = mysql_num_rows($sql)or die(mysql_error());

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

$slp = $_POST["speed"];
sleep($slp);
$beste = $row["naam"];
$to = $row["email"];

$week = date('W');

$subject = "Nieuwsbrief www.domain week $week";
$sender = "admin@domain";

$headers = "From: $sender\r\n";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";  
$headers .= "Reply-To: $sender";

$dezepagina = "<a href=\"http://domain/afmelden.html\">afmeldpagina</a>.";
$url = "<a href=\"http://domain\">http://domain/</a>";

$msg = $_POST["message"];

$var1 = "Beste $beste,<br /><br />Hierbij sturen we je de nieuwste verhalen van afgelopen week.<br /><br />";
$var2 = $msg;
$var3 = "Je ontvangt deze nieuwsbrief omdat je bent aangemeld op $url.<br />Wil je deze nieuwsbrief niet meer ontvangen?<br />Meldt je dan af op de $dezepagina";
$var4 = "<br /><br />Met vriendelijke groeten,<br />$url";

$fullmsg = $var1.$var2.$var3.$var4;

mail($to,$subject,$fullmsg,$headers);
echo "Nieuwsbrief verzonden aan: " . $row["naam"] . " - " . $row["email"] . "<br />\n";
}

?>

<br />
</div><!-- Closing contentleft -->

<?php include '../menu.php'; ?>

<?php include '../footer.php'; ?>

</div>

</body>
</html>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

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.