Mailversand - Headerfehler

escapet

Grünschnabel
Hallo comunity
Ich finde leider den Fehler nicht, mein Skript sendet immer 2 Mails an den Empfänger in der Form:

name@gmx.ch und
namegmx.ch@www.xxxxxx.ch (xxx = Homepage)

Hier mal den Code:
PHP:
        // Additional headers
        $header_to = explode('@',$to_user);
        $headers  = "MIME-Version: 1.0" . "\r\n" .
                    "Content-type: text/html; charset=UTF-8" . "\r\n" .
                    "To: ".ucfirst($header_to[0])." <".
                    $header_to[0].$header_to[1].">"."\r\n".
                    "From: ".ucfirst($brand)." <".$servermail.">" . "\r\n" .
                    "X-Mailer: PHP/".phpversion();
        // Mail it
        if (@mail($to_user, $subject, $message_join, $headers)) {
            return true; 
        } else {
            return false;
        }  
    }

Ich denke, dass ist auch der Grund warum einige Empfänger die Mail dann im Spamordner finden.

Für jede Hilfe dankbar
Gruss escapet
 
Mehrfache Ausführung von Code kommt nur durch das mehrfache Aufrufen der Funktionen zu stande. Da du hier keine Schleifen im Beispiel hast, gehe ich mal davon aus, dass es nicht möglich ist, programatisch den Code zwei mal auf zu rufen. Bleibt also nur die Möglichkeit, dass das Script zwei mal aufgerufen wird. Entweder durch doppeltes Ansurfen der URL oder bspw. durch mehrfachen Include des Scripts in andere Scripte.

Wenn es in deinem Code doch noch eine Schleife in der Form while(){}, for(){}, foreach(){}, do{}while(); gibt, wirst du etwas mehr Code zeigen müssen.
 
Hi Saftmeister
Ich habe mal die betroffene php hier rein gepackt.
 

Anhänge

  • filesend.php.zip
    7,3 KB · Aufrufe: 6
Ok, die Funktion sendMailTakeThatStyleTorecipient() wird innerhalb einer Schleife aufgerufen. Hast du mal geprüft, was in $receipientsLIST für Inhalt drin ist? In Zeile 777 wird die foreach-Schleife gestartet. Am besten du gibst davor mal den Inhalt von $receiptientsLIST mittels var_dump() aus:

PHP:
  //send to receipient multiple files Jul 2014
  if (count($receipientsLIST) > 1) {
    var_dump($receipientsLIST);
    foreach ($receipientsLIST as $row) {
      sendMailTakeThatStyleTorecipient(
        $row["to_send"],
        $row["log_sender"],
        "Du hast Dateien via FileFactory.ch erhalten",
        $row["messsage_body_recip"],
        $row["messsage_user"],
        $row["log_filename"],
        $row["secret"],
        $row["files_path"],
        $row["servermail"],
        $row["brand"],
        $row["namesender"], $row["files_list"]
      );
    }
  }

Meiner Theorie zu Folge müsste der Empfänger dann doppelt da drin sein. Wenn dem so ist, kannst du dich auf die Suche machen, wo das Array befüllt wird. In dem Script jedenfalls nicht.
 
Mh... ich komme halt wirklich nicht so draus... wenn ich var_dump() einfüge zeigt mir mein Editor einen Fehler an.
Aber wie kann ich dann den Inhalt auslesen, das aufrufen der Datei filesend.php bringt ja nur eine leere Seite. :-(

Scheint doch etwas komplizierter zu sein als ich erhofft hatte. Danke dir trotzdem für deinen Versuch zu Helfen!
 
Dann anders. Schreibe die Liste der Empfänger in eine Datei, während die Mail versendet wird:

PHP:
  //send to receipient multiple files Jul 2014
  if (count($receipientsLIST) > 1) {
    $fd = fopen('empfaenger.txt', 'w');
    foreach ($receipientsLIST as $row) {
      fprintf($fd, "%s\n", $row['to_send']);
      sendMailTakeThatStyleTorecipient(
        $row["to_send"],
        $row["log_sender"],
        "Du hast Dateien via FileFactory.ch erhalten",
        $row["messsage_body_recip"],
        $row["messsage_user"],
        $row["log_filename"],
        $row["secret"],
        $row["files_path"],
        $row["servermail"],
        $row["brand"],
        $row["namesender"], $row["files_list"]
      );
    }
    fclose($fd);
  }

Dann schaust du in die Datei empfaenger.txt, ob da was doppelt drin ist.
 
Nutze einen Debugger!

Einen Debugger zu nutzen, ist viel einfacher als var_dump() oder fprintf(). Wenn man sowas einmal eingerichtet hat, ist das Debuggen viel komfortabler und schneller!
 
ich habe sogar den absoluten Pfad angegeben, aber da wird nichts reingeschrieben...

PHP:
    $fd = fopen('http://www.xxxxx.ch/empfaenger.txt', 'w');
 
Das ist nicht der absolute Pfad! Du musst den Pfad von deiner Festplatte angeben und nicht die URI, über die deine Website nach außen hin erreichbar ist.
 
bringt auch nicht, Datei bleibt leer (schreibrechte sind auf 777)
Code:
/var/www/vhosts/xxxx.ch/httpdocs/empfaenger.txt
 

Neue Beiträge

Zurück