Avatar billede artico Novice
19. marts 2014 - 11:45 Der er 1 kommentar og
1 løsning

Mailudsendelses script spammer

Hej Experter

Jeg 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 .= "&nbsp;|&nbsp;";
$output .= $row['adresse'];
$output .= "&nbsp;|&nbsp;";
$output .= $row['postnr'];
$output .= "&nbsp;|&nbsp;";
$output .= $row['postby'];
$output .= "&nbsp;|&nbsp;";
$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 "&nbsp;|&nbsp;";
echo $row['adresse'];
echo "&nbsp;|&nbsp;";
echo $row['postnr'];
echo "&nbsp;|&nbsp;";
echo $row['postby'];
echo "&nbsp;|&nbsp;";
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);
?>
Avatar billede repox Seniormester
19. marts 2014 - 12:41 #1
Må jeg foreslå du starter med at dele din kode lidt mere op, bare for at skabe et overblik?
Det ser frygtelig rodet ud og det er slet ikke til at forstå hvad der sker.
Avatar billede artico Novice
21. marts 2014 - 00:48 #2
Tak, jeg rydder op ....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester