Martl: Mail an mehrere Adressen verschicken

Hallo Forum,

dieser Scriptausschnitt unter PHP 7.x auf einem Apache 2.x (genauer habe ich es momentan nicht)

...

$mailSubject = "Subject";

$mailMessage = "Text";

$mailHeaders = "Content-Type: text/plain; charset=utf-8";

for($i = 0; $i < count($mailingList); $i++){

	$mailTo = $mailingList[$i];

	mail($mailTo, $mailSubject, $mailMessage, $mailHeaders);

}

...

soll eine Mail an die Empfänger aus $mailingList verschicken, was auch geschieht. Bei der Überprüfung des Ergebnisses habe ich aber festgestellt, daß alle Zieladressen in jeder Mail unter "To:" auftauchen. Sieht dann etwa so aus:

To: adresse_1@example.com adresse_2@example.com adresse_3@example.com ...

Ich hatte angenommen, daß für jeden Schleifendurchgang eine Mail mit jeweils einer Adresse erzeugt wird.

Kann mir jemand erklären, woran das liegt bzw. wo ich ansetzen müsste, um das Ziel "Eine Mail, eine Adresse" zu erreichen?

Grüße, Martl

  1. Hallo

    ...
    
    $mailSubject = "Subject";
    
    $mailMessage = "Text";
    
    $mailHeaders = "Content-Type: text/plain; charset=utf-8";
    
    for($i = 0; $i < count($mailingList); $i++){
    
    	$mailTo = $mailingList[$i];
    
    	mail($mailTo, $mailSubject, $mailMessage, $mailHeaders);
    
    }
    
    ...
    

    soll eine Mail an die Empfänger aus $mailingList verschicken, was auch geschieht. Bei der Überprüfung des Ergebnisses habe ich aber festgestellt, daß alle Zieladressen in jeder Mail unter "To:" auftauchen. Sieht dann etwa so aus:

    To: adresse_1@example.com adresse_2@example.com adresse_3@example.com ...
    

    Wenn da alle Adressen aufgelistet werden, musst du davon ausgehen, dass alle diese Adressen in $mailTo stehen, musst du davon ausgehen, dass alle diese Adressen in $mailingList[$i] stehen. Ansonsten sieht der Code für mich – abseits vom hier und da bestehenden Optimierungspotential – unverdächtig aus.

    Hast du dir mal den Inhalt von $mailingList[$i] ausgeben lassen? Nur, um dich zu vergewissern, dass dort das enthalten ist, was du erwartest. Zum Beispiel so:

    echo '<pre>';
    for($i = 0; $i < count($mailingList); $i++){
      echo htmlspecialchars('Zeile #'. $i .': '. $mailingList[$i] ."\n");
    	//$mailTo = $mailingList[$i];
    
    	//mail($mailTo, $mailSubject, $mailMessage, $mailHeaders);
    
    }
    echo '</pre>';
    

    Ich hatte angenommen, daß für jeden Schleifendurchgang eine Mail mit jeweils einer Adresse erzeugt wird.

    Das sollte eigentlich so sein, falls $mailingList ein eindimensionales Array mit E-Mail-Adressen ist.

    Tschö, Auge

    --
    200 ist das neue 35.
    1. Hallo Auge,

      guter Hinweis, werde dem mal nachgehen. Danke!

      Grüße, Martl

    2. Hallo Auge,

      ja, das wars. Nochmals danke.

      Grüße, Martl

  2. Hi there,

    dieser Scriptausschnitt unter PHP 7.x auf einem Apache 2.x (genauer habe ich es momentan nicht)

    ...
    
    $mailSubject = "Subject";
    
    $mailMessage = "Text";
    
    $mailHeaders = "Content-Type: text/plain; charset=utf-8";
    
    for($i = 0; $i < count($mailingList); $i++){
    
    	$mailTo = $mailingList[$i];
    
    	mail($mailTo, $mailSubject, $mailMessage, $mailHeaders);
    
    }
    
    ...
    

    soll eine Mail an die Empfänger aus $mailingList verschicken, was auch geschieht.

    Hat mit Deinem Problem nicht ursächlich zu tun aber - Du solltest in die for-Schleife eine Pause einbauen - viele Mailserver mögen es überhaupt nicht, wenn sie mit Mailanforderungen ohne Zeitverzögerung bombardiert werden. Hängt natürlich auch von der Menge der Mails ab, bei ein paar zig-Mails ist es vermutlich eher egal, aber wenn's mehr werden, würd' ich jeweils so ca. eine halbe Sekunde warten...