Kleines Newsletterproblem

sonicks

Erfahrenes Mitglied
Hi,
Ich bin gerade an einem Newsletterscript. Es funktioniert auch alles einwandfrei, nur das Problem ist, dass er mir genauso oft die Bestätigung ausgibt, dass der Newsletter versendet wurde, wie User in der Datenbank sind.

Hier der Code:
PHP:
 if(isset($Submit)){
   
    $newsletter_result = mysql_query("SELECT * FROM newsletter ORDER BY id DESC");
    while ($newsletter = mysql_fetch_array($newsletter_result)) { 
    
    $from = $absender;
    $to = $newsletter[email];
    $betreff = $subject;
    $message = $content;

    if(!mail($to, $betreff, $message, $from)) {
         echo "Fehler beim Senden der Mail!";
         exit;
    } else {
         echo "<b>Der Newsletter wurde versendet</b>";
    }
 }
}
 
Das ist ja auch vollkommen richtig so, da du jede Mail einzeln versendest.Wenn du Personalisierte Newsletter verwendest dann funktioniert das auch nicht andest. Nur statt jedes mal sofort den Text "ok" sondern in 2 Variablen mitzählen wie oft erfolgreich und wie oft die mail nicht versendet werden konnte. Dort z.B. noch die email hinterlegen um sie aus den empfängerlisten herauspflegen zu können.
 
Ok, hört sich logisch an, nur versteh ich nicht ganz wie ich die gesendeten und nicht gesendeten zählen kann.

if(!mail) gibt mir ja keine Zahl aus.
Hättest du da ein kleines Beispiel dazu?
 
PHP:
<?php
if (isset($Submit)) {
    $from = $absender;
    $betreff = $subject;
    $message = $content;

    // $counter = 0;
    $failure = array();
    $newsletter_result = mysql_query("SELECT * FROM newsletter ORDER BY id DESC");
    while ($newsletter = mysql_fetch_array($newsletter_result)) { 
        $to = $newsletter['email'];
        if(!mail($to, $betreff, $message, $from)) {
             $failure[] = $to;
             // ++$counter;
        }
    }

    // if ( $counter != 0 ) {}
    if ( sizeof( $failure ) > 0 ) {
        echo "Es traten Fehler auf:\n"
           . "=====================\n";
        foreach ( $failure as $recipient ) {
            echo "$recipient\n";
        }
    }
}
 
Okay danke schön, ich habs jetzt mal so in meinem Code stehen:

PHP:
<?php
if (isset($Submit)) {
    $from = $absender;
    $betreff = $subject;
    $message = $content;

    // $counter = 0;
    $failure = array();
    $newsletter_result = mysql_query("SELECT * FROM newsletter ORDER BY id DESC");
    while ($newsletter = mysql_fetch_array($newsletter_result)) { 
        $to = $newsletter['email'];
        if(!mail($to, $betreff, $message, $from)) {
             $failure[] = $to;
             // ++$counter;
        }
    }

    // if ( $counter != 0 ) {}
    if ( sizeof( $failure ) > 0 ) {
        echo "Es traten Fehler auf:\n"
           . "=====================\n";
        foreach ( $failure as $recipient ) {
            echo "$recipient\n";
        }
    }else{
    echo "Der Newsletter wurde verschickt!";
   }
} 
?>

Wann zeigt er mir denn jetzt Fehler an? Wenn der Server nicht alle E-Mails rausschickt? Oder wenn eine E-Mail adresse nicht exisitiert?
Zudem steht jetzt der Absender in der Nachricht ganz oben in der ersten Zeile.

Noch was: Der Eingabe Editor vom Newsletter ist so ein kleiner WYSIWYG Editor, der das ganze geschriebene natürlich in HTML umwandelt. Wenn ich da jetzt z.B. ein dicken oder kursiven Text schreibe steht bei mir im Thunderbird <i><b> .. etc. also HTML halt. Liegt das jetzt an meinem Programm oder muss ich das noch irgendwie im Script umkodieren?
 
Du sendest die E-Mail als Text und nicht als HTML File, daher wird der Thunderbird es so auch vollkommen korrekt anzeigen.

Um HTML E-Mails zu senden muss im Header der Mime-Type angegeben sein.

Und wann schlägt Mail fehl... wenn der Mailerdeamon deines servers abgeschmiert ist. Und ggf. wenn die emailadresse komplett nicht zustellbar ist.. also z.B. kein @ zeichen enthält. Die werden fehlschlagen. Alle anderen E-mails werden gebounced und landen in einem Mailkonto. In welchem hängt von der Serverkonfiguration ab.

Aber wenn du vor hast Newsletter zu versenden. und willst das sie auch ankommen. Dann empfehle ich dir http://de.php.net/manual/de/ref.mail.php nochmal zu lesen und auch die comments mal so ein wenig zu überfliegen. Da sind sehr viele Hinweise was man tun kann damit die E-Mail nicht sofort in allem Spammfiltern hängen bleibt und sofort von allen E-Mailprovidern erst mal Graylistet wird.
 
Zurück