Martin: PHP Mailer BCC Funktion

<?php
while ($i<$anzahl) {

$empfaenger = explode(";",$_POST['bbc']);
$xtra    = "From:$absender\r\n";
$xtra   .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
$xtra   .= "X-Mailer: PHP ". phpversion();
foreach ($empfaenger as $k => $v) {
    $xtra .= "Bcc: $v\r\n";
  }
mail("$receiver","$betreff","$nachricht","$xtra");
print "<center>Status: $i mails versendet<br></center>";
$i++;

}
?>

hi,
so sieht der quelltext aus. davor ist ein formmailer (mit name=bcc etc.). ich geb in das bcc forumlarfeld dieses ein: email@1.de;email@2.de;email@3.de
getrennt habe ich es mit einem ";" wie festgelegt ($empfaenger = explode(";",$_POST['bbc']);)
aber irgendwie funktioniert es nicht :(

kann mir jemand helfen?

martin.

  1. hi,

    foreach ($empfaenger as $k => $v) {
        $xtra .= "Bcc: $v\r\n";
      }

    anschließende debugausgabe?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. anschließende debugausgabe?

      welche aussage? :/
      @dennis
      mag sein, aber das löst nicht mein problem =(

      martin.

      1. Hi Martin,

        anschließende debugausgabe?

        welche aussage? :/

        Aussage != Ausgabe ;-)

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Krieg ist Gottes Art, den Amerikanern Geographie beizubringen. (Häfft)
      2. echo $begrüßung;

        anschließende debugausgabe?

        welche aussage? :/

        Er schrieb Ausgabe, nicht Aussage. Du wirst den Fehler finden, wenn du dir mal den Inhalt von $xtra ausgeben lässt, am besten mit einem <pre> davor, damit dir die Zeilenumbrüche erhalten bleiben, oder du schaust direkt in den Browser-Quelltext.)

        echo "$verabschiedung $name";

        1. so ausgabe von $extra:
          From:emai@l.de Content-Type: text/html Content-Transfer-Encoding: 8bit X-Mailer: PHP 4.3.11Bcc:

          also am bcc teil ist irgendwas falsch :(

          1. echo $begrüßung;

            so ausgabe von $extra:
            From:emai@l.de Content-Type: text/html Content-Transfer-Encoding: 8bit X-Mailer: PHP 4.3.11Bcc:

            also am bcc teil ist irgendwas falsch :(

            Oder an dem code, der zu dessen Erzeugung führt. Wenn du noch error_reporting auf E_ALL stellst, bekommst du noch einen weiteren Hinweis auf einen Vertipper.

            Schau dir außerdem die obige Ausgabe im Browserquelltext an, dann solltest du noch einen fehlenden Umbruch sehen.

            echo "$verabschiedung $name";

            1. Oder an dem code, der zu dessen Erzeugung führt. Wenn du noch error_reporting auf E_ALL stellst, bekommst du noch einen weiteren Hinweis auf einen Vertipper.

              ahhhhhhhhhh gefunden :D *g*
              man ich doof ^^ (bcc statt bbc lol^^)
              habe aber 3 probleme/fragen:

              1.
              ok der zeilumbruch war nicht so schlimm, aber ich bekomme den auch nicht hin :/
              ich weiß nicht wo ich dieses \r\n setzen soll
              -> $xtra   .= "X-Mailer: PHP ". phpversion();
              habe alle stellen ausprobiert aber es will nit gehen :(

              2.
              verschicke ich jetzt eine email (von: bla@bla.de , an: hi@hi.de , bcc: cu@cu.de) so steht in dem email account von dem bcc:
              Betreff:  Hi
              Von:  bla@bla.de <- RICHTIG
              An:  hi@hi.de <- FALSCH, da sollte dann cu@cu.de stehen :/
              Datum:  10.06.05 15:19:22

              3.
              ích kann keine mails an accounts schicken die einen "unterstrich" in ihrer mail habe z.b. bla_bla@web.de geht nicht :/

              =)
              martin

              1. echo $begrüßung;

                ich weiß nicht wo ich dieses \r\n setzen soll
                -> $xtra   .= "X-Mailer: PHP ". phpversion();

                Wie fügt man Strings zusammen? Mit dem . als Operator. Dass dabei ein String aus einer Funktion kommt und nicht direkt im Quellcode steht ist dabei egal.
                $x = $a . b() . "c";  (oder halt mit $x .= ... wenn was an $x angehängt werden soll)

                verschicke ich jetzt eine email (von: bla@bla.de , an: hi@hi.de , bcc: cu@cu.de) so steht in dem email account von dem bcc:
                An:  hi@hi.de <- FALSCH, da sollte dann cu@cu.de stehen :/

                Das ist so. Das ist das gleiche Verhalten wie beim CC, nur dass der "An" nicht sieht, wer im "BCC" steht. Individuell adressierte Mails musst du individuell absenden. Es sei denn, dass es da noch eine Möglichkeit gibt, die mir nicht bekannt ist.

                ích kann keine mails an accounts schicken die einen "unterstrich" in ihrer mail habe z.b. bla_bla@web.de geht nicht :/

                Da muss ich passen.

                echo $verabschiedung . str_repeat(' ', 1) . $name;

                1. so habe das ganze umgeändert. und zwar will ich im empfängerfeld die adressen eingeben und dann mit der foreach schleife wird immer eine mail gesendet. so sieht das aus:

                  $empfaenger = explode(";",$_POST['receiver']);
                  $xtra    = "From:$absender\r\n";
                  $xtra   .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
                  $xtra   .= "X-Mailer: PHP ". phpversion()."\r\n";
                  foreach ($empfaenger as $k => $v) {
                      $receiver2 .= "$v";
                  mail("$receiver2","$betreff","$nachricht","$xtra");
                    }

                  klappt leider nicht *g*
                  gibt auch keine fehlermeldung :/
                  wenn ich nur einen receiver eintrage (hi@hi.de) dann gehts aber sobald ich 2 eintrage (hi@hi.de;hu@hu.de) wird nur zu der ersten email die nachricht geschickt.
                  habe ich was übersehen oder kann man meine überlegung garnicht realisieren?

                  1. echo $begrüßung;

                    so habe das ganze umgeändert. und zwar will ich im empfängerfeld die adressen eingeben und dann mit der foreach schleife wird immer eine mail gesendet. so sieht das aus:

                    $empfaenger = explode(";",$_POST['receiver']);
                    foreach ($empfaenger as $k => $v) {
                        $receiver2 .= "$v";
                    mail("$receiver2","$betreff","$nachricht","$xtra");
                      }

                    So wie du das machst, wird in jedem Schleifendurchlauf an n = n + 1 Empfänger eine Mail gesendet. Beim ersten Durchlauf erhält der erste die Mail. Beim zweiten bekommen der erste und der zweite eine Mail. Beim dritten der 1., 2. und 3. usw. Ist das beabsichtigt?

                    Und außerdem verknüpfst du die Adressen nicht wie vorgesehen (siehe: Parameters - to - 2. bzw. 4. Beispiel)

                    Eines der wichtigsten Elemente beim Fehlersuchen ist das Ausgeben von Variableninhalten (in diesem Fall $receiver2), um zu sehen, ob auch das rauskommt was man sich vorgestellt hat.
                    Ein echo $variable; ist schnell getippt, eine Forumsantwort kann erfahrungsgemäß viel länger dauern. :-)

                    echo "$verabschiedung $name";

                    P.s. Anführungszeichen um Variablen sind überflüssig, wenn außer dem Inhalt der Variablen nichts weiter im Ergebnisstring stehen soll.

                    1. ich habe die email adresse mit ";" getrennt weil ich das ja im explode teil so festgelegt hatte ;)

                      naja habe jetzt einfach die adresse mit kommata getrennt und die foreach schleife etc alles rausgenommen:

                      $xtra    = "From:$absender\r\n";
                      $xtra   .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
                      $xtra   .= "X-Mailer: PHP ". phpversion()."\r\n";

                      mail($receiver,$betreff,$nachricht,$xtra);

                      Funzt auch. alle eingetragenen email adresse bekommen die email. aber dann steht da:
                      Betreff:  Bla
                      Von:  info@bla.de
                      An:  bla1l@web.de, bla2@web.de
                      Datum:  10.06.05 23:43:14

                      bei AN: sollte eigentlich nur die adresse stehen, die dem email account zugeordnet ist.
                      sonst stehen bei AN: nachher 100te email adressen, das will ich ja vermeiden.
                      anscheinend geht das wohl nicht :(

                      1. echo $begrüßung;

                        ich habe die email adresse mit ";" getrennt weil ich das ja im explode teil so festgelegt hatte ;)

                        Bei einem explode() geht das Trennzeichen "verloren".

                        bei AN: sollte eigentlich nur die adresse stehen, die dem email account zugeordnet ist.
                        sonst stehen bei AN: nachher 100te email adressen, das will ich ja vermeiden.

                        Du warst doch schon auf dem richtigen Weg. Eine foreach-Schleife zu verwenden war in Ordnung.
                        Du musst nur die Sache mit dem $receiver2 weglassen und gleich $v stattdessen einsetzen. So sähe das dann aus:

                        foreach ($empfaenger as $v) {
                          mail($v, $betreff, $nachricht, $xtra);
                        }

                        echo "$verabschiedung $name";

                        1. ich bins wieder.
                          danke erstmal dass du mir so umfangreich hilfst :)

                          aber leider klappt es immer noch nit :/

                          $empfaenger = explode(";",$_POST['receiver']);
                          $xtra    = "From:$absender\r\n";
                          $xtra   .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
                          $xtra   .= "X-Mailer: PHP ". phpversion()."\r\n";
                          foreach ($empfaenger as $v) {
                            mail($v, $betreff, $nachricht, $xtra);
                          }

                          auch wenn ich das so schreibe, bekommt jeder email account die volle variable von "receiver". also bei AN: stehen dann alle email adresse die ich eingegeben habe :/

                          mensch is das kompliziert :(

                          1. ich habs hinbekommen *g*
                            die adresse werden ja mit "," getrennt und nicht mit ";"
                            also war die zeile:
                            $empfaenger = explode(";",$_POST['receiver']);
                            falsch und so müsste sie richtig sein:
                            $empfaenger = explode(",",$_POST['receiver']);

                            funktioniert auch so wie ichs möchte. big thx an dich, dedlfix

                            =)

  2. Hi Martin,

    mail("$receiver","$betreff","$nachricht","$xtra");

    Anmerkung: Die Anführungszeichen sind allesamt überflüssung - was du da machst ist _ganz_ schlechter Stil.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)