ilch Forum » Allgemein » HTML, PHP, SQL,... » Newsletter fehler suche/verbesserung

Geschlossen
  1. #1
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Moin :I

    Ich habe gerade ein newsletter gefunden der wohl funktioniert aber irgendwie anscheinend nicht richtig :/

    Oehm das Problem ist er versendet wohl den Newsletter aber irgendwie nicht an alle sondern bricht einfach ab?? :/ Woran könnte dies liegen? Server? db? am Script?

    newsletter
    extract($_GET);
    extract($_POST);
    
    function myCheckDNSRR($hostName, $recType = '')
    {
         if(!empty($hostName))
         {
            if( $recType == '' ) $recType = "MX";
            exec("nslookup -type=$recType $hostName", $result);
            foreach ($result as $line)
            {
                if(eregi("^$hostName",$line))
                {
                    return true;
                }
            }
            return false;
        }
        return false;
    }
    
    if (isset($hauweg)) {
    
    	$sql = mysql_query("SELECT email FROM account_daten WHERE newsletter = 'ja'");
    
             While($tdatensatz = mysql_fetch_array($sql)) {
             $empfaenger = $tdatensatz['email'];
       if(myCheckDNSRR($empfaenger, "")) {
       	$no_mail .= $empfaenger . "<br>";
       }else{
      	$betreff = "Newsletter" . $newsl_betreff;
    	$text = $newsl_inhalt;
      	mail($empfaenger, $betreff, $text, "FROM: Account <account@online.de>","account@online.de");
    }}
    	echo '<span class="contentfat">Der Newsletterversand wurde erfolgreich durchgeführt.<br>Kein Newsletter geht an<br>';
    	echo $no_mail .'</span><p>';
    }else{
    echo '<font color="#FF0000"><b>Achtung</b></font>: Der Newsletter wird hier automatisch an jeden User gesendet, der ihn in seinem Profil akzeptiert hat. User mit
    abgelehnten oder nicht nicht akzeptieren Accounts werden nicht vom Newsletter verfasst. Des Weiteren kann es sein, dass
    manche User den Newsletter nicht empfangen, weil ihr Provider solche Mails blockt. In diesem Fall bin ich noch zu keiner
    L&ouml;sung gekommen.
    <br><br>
    <form action="index.php?menu-newsletter_verschicken&admin_tool=newsl" method="post" enctype="multipart/form-data" name="newsletter">
    <table cellpadding="0" cellspacing="0" id="contenttable" class="contenttext">
    	<tr>
    	<td valign="top" width="15%"><b>Betreff:</b></td>
    	<td><input type="text" size="40" name="newsl_betreff"></td>
    	</tr>
    	<tr>
    	<td><br /></td>
    	<td></td>
    	</tr>
    	<tr>
    	<td valign="top"><b>Inhalt:</b></td>
    	<td><textarea name="newsl_inhalt" cols="45" rows="20"></textarea></td>
    	</tr>
    	<tr>
    	<td> </td>
    	<td align="right"><input type="submit" name="hauweg" value="Newsletter versenden"></td>
    	</tr>
    </table>
    </form>';
    }


    Ich weiß auch nicht was function myCheckDNSRR($hostName, $recType = '') ist dies ist nicht von mir.

    Ihr habt doch immer Rat und könnt mir sicher weiterhelfen zwinker


    Zuletzt modifiziert von Siggi am 23.02.2013 - 05:00:01
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    Auf den ersten Blick:
    - eregi ist eine deprecacated Funktion
    - überhaupt keine Sicherheitsprüfung
    - aus der Funktion myCheckDNSRR werde ich auch nicht schlau
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    lächeln

    Hm Ja dann entfern ich das myCheckDNSRR einfach mal lachen

    Sicherheit doch es ist eine drin bzw halb du kannst nur newsletter schreiben bzw die seite einsehen wenn du rechte hast oder reicht dies nicht als sicherheit?

    oeh kanns mit tipps geben für anderes ausßer eregi oder so? vllt nen link oder was man anders nutzt wie es heißt.
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    Zum Beispiel ein einfaches Newsletterscript, hab es schnell geschrieben aber nicht getestet:

    <?php
    defined ('main') or die ('no direct access');
    defined ('admin') or die ('only admin access');
    
    // Einstellungen
    $from = 'FROM: Name <name@email.de>';
    
    // Emailpruefung
    function mailcheckDNS($mail) {
    	$email = htmlspecialchars($mail);
    	$r = false;
    	if(preg_match('/(.*?)\@(.*?)\.(\w){2,6}/i', $email)) {
    		$split = explode('@', $email);
    		$split2 = explode('.', $split[1]);
    		if(preg_match('/([a-z]){3,64}/i', $split2[0])) {
    			if(preg_match('/([a-z0-9\!\"\$\&\/\(\)\?\~\#\+\.\:\_\-]+){1,64}[^\@]/i', $split[0])) {
    				$MXCheck = getmxrr($split[1], $mxhosts);
    				if(!empty($MXCheck)) {
    					$r = true;
    				}
    			}
    		}
    	}
    	return $r;
    }
    
    // Versand
    if(isset($_POST['btnSend'])) {
    	
    	$subject = $_POST['subject'];
    	$message = $_POST['message'];
    
    	$sql = mysql_query('SELECT email FROM account_daten WHERE newsletter = "ja"');
    	while($dbMails = mysql_fetch_array($sql)) {
    		$to = $dbMails['email'];
    		if (mailcheckDNS($to)) {
    			$res = mail($to,$subject,$message,$from);
    			if($res) {
    				echo 'Nachricht wurde zu <b>'.$to.'</b> versendet';
    			} else {
    				echo 'Versandfehler bei der E-Mailadresse: <b>'.$to.'</b>';
    			}
    		} else {
    			echo 'Fehlerhaft eingetragene E-Mailadresse: <b>'.$to.'</b>';
    		}
    	}
    
    // Formular
    } else {
    
    	echo '
    		<form name="emailform" id="emailform" action="newsletter.php" method="post" enctype="multipart/form-data">
    			<table width="400" border="0">
    				<tr>
    					<td>Betreff:</td>
    					<td><input type="text" name="subject" id="subject" /></td>
    				</tr>
    				<tr>
    					<td>Nachricht:</td>
    					<td><textarea name="message" id="message" cols="45" rows="5"></textarea></td>
    				</tr>
    				<tr>
    					<td colspan="2" align="center"><input type="submit" name="btnSend" id="btnSend" value="Absenden" /></td>
    				</tr>
    			</table>
    		</form>
    	';
    }
    
    ?>


    Was halt fehlt zB. eine ESCAPE Funktion wie bei Ilch um SQL Injektion zu verhindern!
    rules :: doku :: faq :: linkus
    1 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Okay Danke schonmal lächeln

    bekomme nun beim absenden den fehler
    Fatal error: Call to undefined function getmxrr() in C:\Inetpub\vhosts\httpdocs\cms\include\contents\sess\newsletter_verschicken.php on line 25

    <?php
    $title = $allgAr['title'];
    $hmenu = 'Newsletter schreiben';
    $design = new design ( $title , $hmenu );
    $design->header();
    
    $from = 'FROM: Name <name@name.com>';
    
    // Emailpruefung
    function mailcheckDNS($mail) {
        $email = htmlspecialchars($mail);
        $r = false;
        if(preg_match('/(.*?)\@(.*?)\.(\w){2,6}/i', $email)) {
            $split = explode('@', $email);
            $split2 = explode('.', $split[1]);
            if(preg_match('/([a-z]){3,64}/i', $split2[0])) {
                if(preg_match('/([a-z0-9\!\"\$\&\/\(\)\?\~\#\+\.\:\_\-]+){1,64}[^\@]/i', $split[0])) {
                    $MXCheck = getmxrr($split[1], $mxhosts);
                    if(!empty($MXCheck)) {
                        $r = true;
                    }
                }
            }
        }
        return $r;
    }
    
    // Versand
    if(isset($_POST['btnSend'])) {
    
        $subject = $_POST['subject'];
        $message = $_POST['message'];
    
        $sql = mysql_query('SELECT email FROM account_daten WHERE newsletter = "ja"');
        while($dbMails = mysql_fetch_array($sql)) {
    //        $to = $dbMails['email'];
              $to = 'bot-bot@web.de';
            if (mailcheckDNS($to)) {
                $res = mail($to,$subject,$message,$from);
                if($res) {
                    echo 'Nachricht wurde zu <b>'.$to.'</b> versendet';
                } else {
                    echo 'Versandfehler bei der E-Mailadresse: <b>'.$to.'</b>';
                }
            } else {
                echo 'Fehlerhaft eingetragene E-Mailadresse: <b>'.$to.'</b>';
            }
        }
    
    }else{
    // Formular
    echo '<div class="contentfat">
    <font color="#800000"><b>Achtung</b></font>: Der Newsletter wird hier automatisch an jeden User gesendet, der ihn in seinem Profil akzeptiert hat. User mit
    abgelehnten oder nicht nicht akzeptieren Accounts werden nicht vom Newsletter verfasst.
    <br><br></div>
    	<form name="emailform" id="emailform" action="index.php?menu-newsletter_verschicken" method="post" enctype="multipart/form-data">
                <table width="400" border="0">
                    <tr>
                        <td><b>Betreff:</b></td>
                        <td><input type="text" name="subject" id="subject" size="45" style="border: solid 1px black; background-color:#cfcfcf" /></td>
                    </tr>
                    <tr>
                        <td valign="top"><b>Nachricht:</b></td>
                        <td><textarea name="message" id="message" cols="45" rows="20" style="border: solid 1px black; background-color:#cfcfcf"></textarea></td>
                    </tr>
                    <tr>
                        <td colspan="2" align="center"><input type="submit" name="btnSend" id="btnSend" value="Absenden" style="border: solid 1px black; background-color:#cfcfcf" /></td>
                    </tr>
                </table>
            </form>';
    }
    
    $design->footer();
    ?>
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    hm bringt mich leider auch nicht weiter aber woher bekommt er den $mail die er ja braucht bzw das ja checkt
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Hier versuche es mal so.

    newsletter.php

    <?php
    $title = $allgAr['title'];
    $hmenu = 'Newsletter schreiben';
    $design = new design ( $title , $hmenu );
    $design->header();
     
    $from = 'FROM: Name <XXX.XXXXXXX@XXX.de>';
     
    // Emailpruefung
    function myCheckDNSRR($mail) {
        $email = htmlspecialchars($mail);
        $r = false;
        if(preg_match('/(.*?)\@(.*?)\.(\w){2,6}/i', $email)) {
            $split = explode('@', $email);
            $split2 = explode('.', $split[1]);
            if(preg_match('/([a-z]){3,64}/i', $split2[0])) {
                if(preg_match('/([a-z0-9\!\"\$\&\/\(\)\?\~\#\+\.\:\_\-]+){1,64}[^\@]/i', $split[0])) {
                    $MXCheck = getmxrr($split[1], $mxhosts);
                    if(!empty($MXCheck)) {
                        $r = true;
                    }
                }
            }
        }
        return $r;
    }
     
    // Versand
    if(isset($_POST['btnSend'])) {
     
        $subject = $_POST['subject'];
        $message = $_POST['message'];
     
        $data = array();
        
        $sql = ('SELECT email FROM prefix_newsletter');
    	$q = db_query($sql);
            while( $row = db_fetch_assoc($q) ) {  
               $data[$row['email']] = array('email' => $row['email']);
              $to = $row['email'];
            if (myCheckDNSRR($to)) {
                $res = mail($to,$subject,$message,$from);
                if($res) {
                    echo 'Nachricht wurde zu <b>'.$to.'</b> versendet';
                } else {
                    echo 'Versandfehler bei der E-Mailadresse: <b>'.$to.'</b>';
                }
            } else {
                echo 'Fehlerhaft eingetragene E-Mailadresse: <b>'.$to.'</b>';
            }
        }
     
    }else{
    // Formular
    echo '<div class="contentfat">
    <font color="#800000"><b>Achtung</b></font>: Der Newsletter wird hier automatisch an jeden User gesendet, der ihn in seinem Profil akzeptiert hat. User mit
    abgelehnten oder nicht nicht akzeptieren Accounts werden nicht vom Newsletter verfasst.
    <br><br></div>
        <form name="emailform" id="emailform" action="index.php?newsletter-send" method="post" enctype="multipart/form-data">
                <table width="400" border="0">
                    <tr>
                        <td><b>Betreff:</b></td>
                        <td><input type="text" name="subject" id="subject" size="45" style="border: solid 1px black; background-color:#cfcfcf" /></td>
                    </tr>
                    <tr>
                        <td valign="top"><b>Nachricht:</b></td>
                        <td><textarea name="message" id="message" cols="45" rows="20" style="border: solid 1px black; background-color:#cfcfcf"></textarea></td>
                    </tr>
                    <tr>
                        <td colspan="2" align="center"><input type="submit" name="btnSend" id="btnSend" value="Absenden" style="border: solid 1px black; background-color:#cfcfcf" /></td>
                    </tr>
                </table>
            </form>';
    }
     
    $design->footer();
    ?>



    Zuletzt modifiziert von corian am 23.02.2013 - 19:31:50
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Kommt der gleiche Fehler
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    also ich habe es bei mir getestet und es geht....
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Bei mir nicht habs auch mal fast 1zu1 nun gemacht aber kommt immer gleiche Fehler

    Lese immer das diese Version nicht immer unter Windows laeuft?


    Zuletzt modifiziert von Siggi am 23.02.2013 - 21:32:29
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Welche PHP Version hast du bei dir?
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    PHP Version 5.2.17
    0 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    Du testest es offline?
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Nein Online wieso?

    Oeh nur andere datenbank da zum testen nicht alle user mails erhalten sollen zwinker
    0 Mitglieder finden den Beitrag gut.
  16. #16
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    ZitatZitat
    Fatal error: Call to undefined function getmxrr() in C:\Inetpub\vhosts\httpdocs\cms\include\contents\sess\newsletter_verschicken.php on line 25


    Die ganze Funktion mailcheckDNS() sollte eigentlich nur die Email und das Vorhandensein des Hosts prüfen, kann aber genauso entfernt werden. Das Script geht auch ohne diese Prüfung.


    Zuletzt modifiziert von Lord|Schirmer am 24.02.2013 - 01:04:02
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  17. #17
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    oehm kA zeigt er immer so an ist ein Windows vServer von Hosteurope

    Okay wenn ich es weglasse geht es.

    Aber was wir bisher hatten war das der Newsletter wohl ging aber mitten drin abbrach? Dauert es zulang wenn mail per newsletter an 200 Leute rausgeht oder woran koennte es liegen?

    bzw kA ob es nun mit den neuen newsletter hier geht aber frag trotzdem lächeln
    0 Mitglieder finden den Beitrag gut.
  18. #18
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    Bei Servereinstellungen bin ich jetzt nicht fit, aber evtl. die max_execution_time() oder set_time_limit() also Zeitlimits für Ausführungen!
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  19. #19
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    hm okay habs gerade nochmal getestet hatte zwar meine email angegeben aber wohl nicht die anzahl aus der db also hab ich gerade 246 Mails bekommen lachen

    Also scheint es wohl zu gehen lächeln


    Zuletzt modifiziert von Siggi am 24.02.2013 - 04:02:26
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten