Mailudsendelses script spammer
Hej ExperterJeg har nedenstående mail script der udsender nyhedsbreve, via formen til brugere, inddelt i brugertyper, scriptet har virket fint indtil for nylig, jeg må have lavet en fejl, som jeg ikke kan finde?
Når jeg tester, udsendes mail som de skal, tilsyneladende, for det er sket, at enkelte brugere har modtaget op til 100 mails, ved samme mail udsendelse?
Mystisk nok er det ikke alle på maillisten, der har modtaget "spam", jeg er selv på maillisten, og ved samme udsendelse har jeg "kun" modtaget 1 mail som også er meningen.
Som ses i scriptet logger jeg udsendelserne i databasen, og en af de brugere der siger hun har modtaget 100 mails med samme indhold, er "kun" logget én gang, så det er meget mystisk?
Kan nogen herinde hjælpe mig med at finde fejlen i scriptet, eller komme med en god ide til hvordan jeg kan efterprøve (andet end at sende til mig selv, for det virker åbenbart fint), sidste men ikke mindst, kan det være noget med webhotellet, eller andet end scriptet jeg burde kikke på?
<?php
if(isset($_POST['send_nyheden']) && isset($_POST['brugertyper'])){
$henter_nyhed = mysql_query("SELECT
n.nyhedsmail_id,
n.nyheds_navn,
n.nyhed,
date_format(n.oprettet, '%d.%m.%Y %H:%i') AS oprettet2,
date_format(n.sidst_opdateret, '%d.%m.%Y %H:%i') AS opdateret2,
n.synlig,
i.indehaver_id,
i.firmanavn,
i.adresse,
i.postnr,
i.postby,
i.telefon,
i.web,
i.indehaver_email,
s.firmalogo,
s.nyhedsbrev_footer
FROM nyhedsmail n, indehaver i, system s
WHERE n.nyhedsmail_id = '".$_POST['nyhedsmail_id']."'
") or die ("Fejl ved hentning af nyhedstekst: ".mysql_error());
if($row = mysql_fetch_array($henter_nyhed))
{
$output .= "<head>\n";
$output .= '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
$output .= " <link rel='stylesheet' href='".$ADMIN_generelt['hp']."/css/style_udskrifter.css' type='text/css'>\n";
$output .= "</head>\n";
$output .= "<body topmargin=\"0\" bgcolor=\"#EEEEEE\">\n";
// Indholdstester her
$output .= "<table bgcolor=\"#FFFFFF\" width='600' border=\"0\" cellspacing=\"0\" cellpadding=\"4\" style=\"border-collapse: collapse\" >";
$output .= " <tr>\n";
$output .= " <td>\n";
$output .= $row['nyhed'];
$output .= "<div align='center'>";
$output .= "<hr>";
$output .= "Ønsker du ikke at modtage vores nyhedsbrev mere, kan du afmelde det her ";
$output .= "<br>";
$output .= "<a href=\"$ADMIN_generelt[hp]/kundedata/afmeld_nyhedsbrev.php?kmail=![EMAIL]!\">Afmeld nyhedsbrev</a>";
$output .= "</div>";
$output .= "<hr>";
$output .= "<div align='center'>";
$output .= " <img src='".$ADMIN_firma['logo'].$row['firmalogo']."' border='0' alt='' />\n";
$output .= "<br>";
$output .= "<a href='".$ADMIN_generelt['hp']."' target='_blank'>".$ADMIN_generelt['titelnavn']."</a>\n";
$output .= "<br>";
$output .= $row['firmanavn'];
$output .= " | ";
$output .= $row['adresse'];
$output .= " | ";
$output .= $row['postnr'];
$output .= " | ";
$output .= $row['postby'];
$output .= " | ";
$output .= $row['telefon'];
$output .= "</div>";
$output .= "</td>\n";
$output .= " </tr>\n";
$output .= "</table>\n";
}
$output .= " </body>\n";
$output .= "</html>\n";
//Vi tjekker vi har et nummer som brugertype og nyhedsmail
if(isset($_POST['brugertyper']) && is_numeric($_POST['brugertyper']) && $_POST['brugertyper'] > 0 && isset($_POST['nyhedsmail_id']) &&
is_numeric($_POST['nyhedsmail_id']) && $_POST['nyhedsmail_id'] > 0){
$brugertype = intval($_POST['brugertyper']);
$nyhedsmail = intval($_POST['nyhedsmail_id']);
//Vi finder alle vores brugere som er interesseret i at modtage nyhedsbreve.
$query = mysql_query("SELECT brugere_id,email FROM brugere WHERE modtage_reklame_mail = 'ja' AND brugertype = ".$_POST['brugertyper'].";");
//Har vi nogle modtagere ?
if(mysql_num_rows($query)>0){
echo '<h5>Påbegynder afsendelse af nyhedsbrev</h5>';
echo 'Hvis ikke du ser teksten: <b>Alle emails er afsendt ok</b>, længere nede, så skal du sende igen<br />';
while($row = mysql_fetch_assoc($query)){
echo 'Forbereder afsendelse til: <b>' . $row['email'] . '</b> - STATUS : ';
//Vi laver ekstra tjek, om de har modtaget nyhedsbrevet før.
$sub_query = mysql_query("SELECT sent FROM mass_email WHERE bruger_id = ".$row['brugere_id']." AND nyheds_id = ".$nyhedsmail." AND sent = 1 LIMIT 1;");
//Har de modtaget før ?
if(mysql_num_rows($sub_query)==1){
//Modtageren har modtaget nyhedsbrevet før, stop her.
echo '<b>modtaget tidligere</b><br />';
}else{
//Modtageren har ikke modtaget nyhedsbrevet, fortsæt.
$modtagere = $row['email'];
$subject = $_POST['overskrift'];
$message = str_replace("![EMAIL]!", $row['email'], $output);
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'To: ' . $to . "\r\n";
$headers .= 'From: ' . $ADMIN_generelt['titelnavn'] . $ADMIN_generelt['sitemail'] . "\r\n";
//Afsendes email ok, opdateres tabellen med sent = 1
if(mail($modtagere, $subject, $message, $headers)){
mysql_query("INSERT INTO mass_email (bruger_id, nyheds_id, sent, sidst_afsendt)VALUES(".$row['brugere_id'].",".$nyhedsmail.",1, NOW()) ON DUPLICATE KEY UPDATE sent = 1");
echo '<b>email afsendt</b><br />';
//Afsendes email ikke ok, opdateres tabellen med sent = 0
}else{
mysql_query("INSERT INTO mass_email (bruger_id,nyheds_id,sent)VALUES(".$row['brugere_id'].",".$nyhedsmail.",1) ON DUPLICATE KEY UPDATE sent = 0");
echo '<b>email ikke afsendt</b><br />';
}
}
}
echo '<b>Alle email er afsendt ok</b><br />';
}else{
echo 'Fejl: Der er ingen modtagere<br />';
}
}else{
echo 'Fejl: Forkert angivet brugertype og/eller nyhedsmail<br />';
}
}else {
$result_nyhed = mysql_query("SELECT
n.nyhedsmail_id,
n.nyheds_navn,
n.nyhed,
date_format(n.oprettet, '%d.%m.%Y %H:%i') AS oprettet2,
date_format(n.sidst_opdateret, '%d.%m.%Y %H:%i') AS opdateret2,
n.synlig,
i.indehaver_id,
i.firmanavn,
i.adresse,
i.postnr,
i.postby,
i.telefon,
i.web,
i.indehaver_email,
s.firmalogo,
s.nyhedsbrev_footer
FROM nyhedsmail n, indehaver i, system s
WHERE n.nyhedsmail_id = '".$_GET['id']."'
") or die ("Fejl ved hentning af nyheder: ".mysql_error());
if($row = mysql_fetch_array($result_nyhed))
{
echo "<form action=\"index.php?id=".$row['nyhedsmail_id']."&nx=nyhedsmail/send_nyhed\" method=\"post\" accept-charset=\"UTF-8\">";
echo "<table border=\"1\" bordercolor=\"#cccccc\" cellspacing=\"0\" cellpadding=\"4\" style=\"border-collapse: collapse\" >";
echo " <tr>";
echo " <td>";
echo "<table bgcolor=\"#F5F5F5\" width='600' border=\"1\" bordercolor=\"#cccccc\" cellspacing=\"0\" cellpadding=\"4\" style=\"border-collapse: collapse\" >";
echo " <tr>";
echo " <td>N Y H E D S M A I L</td>";
echo " <td></td>";
echo " <td><a href='".$_SERVER['PHP_SELF']."?id=".$row[0]."&nx=nyhedsmail/ret_nyhed'>Ret indhold</a></td>";
echo " </tr>";
echo " <tr>";
echo " <td valign='top'>";
echo " </td>";
echo " <td align='right'>Dagsdato:</td>";
echo " <td>";
echo $dagsdato;
echo "</td>";
echo " </tr>";
echo " <tr>";
echo " <td colspan='3'>";
echo " <table style='width: 100%;border: 0;padding:2;' >";
echo " <tr>";
echo " <td>";
// modtager
echo "Overskrift (mailemne): ";
echo "</td>";
echo " <td><input type='text' name='overskrift' size='40' value='".$row['nyheds_navn']."' /></td>";
echo " </tr>";
echo " </table>";
echo "</td>";
echo " </tr>";
echo " <tr>";
echo " <td colspan='3' bgcolor='white'>";
echo " <table width='100%' border='0' cellspacing='2' cellpadding='4'>";
echo " <tr>";
echo " <td >";
echo " </td>";
echo " </tr>";
echo " <tr>";
echo " <td bgcolor='white' style='vertical-align:top;'>";
// Mail indholdet her
echo $row['nyhed'];
echo "<hr>";
echo "<br>";
echo "<div align='center' class='smallgreytxt'>";
echo $row['nyhedsbrev_footer'];
echo "</div>";
echo "<br>";
echo "<hr>";
echo "<div align='center'>";
echo " <img src=\"".$ADMIN_firma['logo'].$row['firmalogo']."\" border='0' alt='' />\n";
echo "<br>";
echo $row['firmanavn'];
echo " | ";
echo $row['adresse'];
echo " | ";
echo $row['postnr'];
echo " | ";
echo $row['postby'];
echo " | ";
echo $row['telefon'];
echo "</div>";
echo "</td>";
echo " </tr>";
echo " </table>";
echo " </td>";
echo " </tr>";
echo " </table>";
echo "<input type='hidden' name='nyhedsmail_id' value='".$_GET['id']."'>";
echo "<input type='hidden' name='email_afsender' value='".$row['indehaver_email']."'>";
/// HTML mail slut
echo " </td>";
echo " <td style='vertical-align:top;'>";
$hentvg2 = mysql_query("select brugertyper_id, brugertype, synlig
FROM brugertyper
WHERE synlig = 'ja'
")or die ("Fejl ved hentning af brugertyper: ".mysql_error());
echo " <table border='0' cellspacing='2' cellpadding='4'>";
echo " <tr>";
echo " <td colspan='2' >Vælg modtager gruppe (antal)</td>";
echo " </tr>";
if (mysql_num_rows($hentvg2) > 0) {
while($rowvg2 = mysql_fetch_assoc($hentvg2)) {
echo " <tr>";
$sql = "SELECT COUNT(DISTINCT brugere_id) FROM `brugere` WHERE modtage_reklame_mail = 'ja' AND brugertype = ".$rowvg2['brugertyper_id']."";
$r_total = mysql_query( $sql ) or die( mysql_error() );
$s_total = mysql_fetch_row( $r_total );
$ordre_total = $s_total[0];
echo " <td class=\"u_line\">".$rowvg2['brugertype']." (".$ordre_total."):</td>";
echo " <td class=\"u_line\"><input type=\"radio\" name=\"brugertyper\" value=\"".$rowvg2['brugertyper_id']."\" /></td>\n";
}}
echo " </tr>";
echo " </table>";
echo "</td>";
echo " <td align='center' valign='top'>";
echo "<input type='submit' name='send_nyheden' style='height: 60px; width:100px; margin-bottom:5px;' value='afsend nyhed'>";
echo "</td>";
echo " </tr>";
echo " </table>";
echo " </td>";
echo " </tr>";
echo " </table>";
echo "</form>";
}
}
mysql_close($connection);
?>