php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.11.2005, 16:26  
Erfahrener Benutzer
 
Registriert seit: 11.03.2004
Beiträge: 138
Sonja
Standard phpmailer an mehrere Adressen gleichzeitig

http://phpmailer.sourceforge.net geht als einzelnes Mail bestens, doch ich möchte mehrere Adressen aus der DB gleichzeitig bemailen (Newsletter)

Die Datensätze sind vorhanden, aber es geht nur ein Mail raus! Was mache ich falsch?


PHP-Code:
require("phpmailer/class.phpmailer.php"); 
//Adressen holen 
$query "select Mail from testmitglieder"
$result mysql_query($query,$link); 
$num mysql_num_rows($result); 
for (
$i 0$i $num$i++) 

//Start Schleife 
$row mysql_fetch_array($result); 
$mail = new PHPMailer(); 
$mail->From "info@xxxx"
$mail->FromName "xxxxxx"
$mail->AddAddress("$row[Mail]"); 
$mail->AddReplyTo("info@xxxx"); 
$mail->WordWrap 50;  
// wenn 1 PDF 
if(!empty($dateifilea) and empty($dateifileb)) 

copy ($dateifilea,"../pdf/$dateiname"); 
$mail->AddAttachment("../pdf/$dateiname");  

// wenn 2 PDF 
if(!empty($dateifilea) and !empty($dateifileb)) 

copy ($dateifilea,"../pdf/$dateiname"); 
copy ($dateifileb,"../pdf/$dateiname2"); 
$mail->AddAttachment("../pdf/$dateiname"); $mail->AddAttachment("../pdf/$dateiname2");  

//Mail 
$mail->IsHTML(true);                                 
$mail->Subject "$betreff"
$mail->Body    "$MESSAGEHTML"
$mail->AltBody "$messageplain"
// Schluss Schleife 

//Wenn Mail nicht geschickt 
if(!$mail->Send()) 

   echo 
"<h3>Das Mail konnte nicht verschickt werden. "
   echo 
"Mailer Fehler: " $mail->ErrorInfo
   echo 
"</h3>"
   exit; 

echo 
"<h3>Das Mail ist abgeschickt.</h3>"
?> 
Sonja ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.11.2005, 16:35  
Gast
 
Beiträge: n/a
Standard

1.
$mail->AddAddress("$row[Mail]");
--> $mail->AddAddress($row['Mail']);

2.
PHP-Code:
<?php
if(!$mail->Send()) // HIER wird die E-Mail geschickt, die Schleife ist aber schon beendet -> FOLGE: Nur eine E-Mail wird verschickt (an die zuletzt genommene E-Mail Adresse)

   echo 
"<h3>Das Mail konnte nicht verschickt werden. "
   echo 
"Mailer Fehler: " $mail->ErrorInfo
   echo 
"</h3>"
   exit; 

echo 
"<h3>Das Mail ist abgeschickt.</h3>"
 
?>
musst du in die Schleife, da er sonst nur 1 abschicken soll (er macht das was du ihm sagst )

MFG
 
Alt 08.11.2005, 16:59  
Erfahrener Benutzer
 
Registriert seit: 11.03.2004
Beiträge: 138
Sonja
Standard

Danke, aber es geht nicht!

Ist diese Klammer nicht da wenn es keinen Verand gab?

if(!$mail->Send())
{
echo "<h3>Das Mail konnte nicht verschickt werden. ";
echo "Mailer Fehler: " . $mail->ErrorInfo;
echo "</h3>";
exit;
}


ich lese dass wenn $ mail nicht ausgeführt wurde, dann kommt die Fehlermeldung

Habe mal exit; deaktiviert, aber auch das hilft nicht! auch $mail->Send();
alleine bringt nichts. $num gibt die richtige Anzahl Datensätze aus, die sollten also da sein! Doch die Schleife geht nicht! und wenn ich statt einmal require("phpmailer/class.phpmailer.php");
//Adressen holen
mache, sondern in der Schleife ein include, es kommt immer nur ein Mail!!
Sonja ist offline  
Alt 08.11.2005, 20:56  
Gast
 
Beiträge: n/a
Standard

Wenn du deinen Käse mal ordentlich einrücken würdest, dann würde dir auffallen, warum nur eine Mail rausgeht.
PHP-Code:
<?
  
require("phpmailer/class.phpmailer.php");  
  
  
//Adressen holen  
  
$query "select Mail from testmitglieder";  
  
$result mysql_query($query,$link);  
  
$num mysql_num_rows($result);  
  
  for (
$i 0$i $num$i++)  
  {  
     
//Start Schleife  
     
$row mysql_fetch_array($result);  
     
$mail = new PHPMailer();  
     
$mail->From "info@xxxx";  
     
$mail->FromName "xxxxxx";  
     
$mail->AddAddress("$row[Mail]");  
     
$mail->AddReplyTo("info@xxxx");  
     
$mail->WordWrap 50;
     
     
// wenn 1 PDF  
     
if(!empty($dateifilea) and empty($dateifileb))  
     {  
        
copy ($dateifilea,"../pdf/$dateiname");  
        
$mail->AddAttachment("../pdf/$dateiname");   
     }  
     
     
// wenn 2 PDF  
     
if(!empty($dateifilea) and !empty($dateifileb))  
     {  
        
copy ($dateifilea,"../pdf/$dateiname");  
        
copy ($dateifileb,"../pdf/$dateiname2");  
        
$mail->AddAttachment("../pdf/$dateiname"); $mail->AddAttachment("../pdf/$dateiname2");   
     }  
     
     
//Mail  
     
$mail->IsHTML(true);                                  
     
$mail->Subject "$betreff";  
     
$mail->Body    "$MESSAGEHTML";  
     
$mail->AltBody "$messageplain";  
     
// Schluss Schleife  
  
}  
  
  
//Wenn Mail nicht geschickt  
  
if(!$mail->Send())  
  {  
     echo 
"<h3>Das Mail konnte nicht verschickt werden. ";  
     echo 
"Mailer Fehler: " $mail->ErrorInfo;  
     echo 
"</h3>";  
     exit;  
  }  
  
  echo 
"<h3>Das Mail ist abgeschickt.</h3>";  
?>
Da du in der Schleife jedes mal ein neues Object anlegst, bleibt am guten Schluss der Schleife genau die letzte EMail-Adresse in der DB über.

Alles was mit dem phpMailer zu tun hat, gehört vor die Schleife. Nur die Zeile

PHP-Code:
$mail->AddAddress("$row[Mail]"); 
bleibt darin.
PHP-Code:
<?
  
require("phpmailer/class.phpmailer.php");  
  
  
//Adressen holen  
  
$query "select Mail from testmitglieder";  
  
$result mysql_query($query,$link);  
  
$num mysql_num_rows($result);  
  
  
$mail = new PHPMailer();  
  
$mail->From "info@xxxx";  
  
$mail->FromName "xxxxxx";  
  
$mail->AddReplyTo("info@xxxx");  
  
$mail->WordWrap 50;
     
  
// wenn 1 PDF  
  
if(!empty($dateifilea) and empty($dateifileb))  
  {  
     
copy ($dateifilea,"../pdf/$dateiname");  
     
$mail->AddAttachment("../pdf/$dateiname");   
  }  
     
  
// wenn 2 PDF  
  
if(!empty($dateifilea) and !empty($dateifileb))  
  {  
     
copy ($dateifilea,"../pdf/$dateiname");  
     
copy ($dateifileb,"../pdf/$dateiname2");  
     
$mail->AddAttachment("../pdf/$dateiname"); $mail->AddAttachment("../pdf/$dateiname2");   
  }  
     
  
//Mail  
  
$mail->IsHTML(true);                                  
  
$mail->Subject "$betreff";  
  
$mail->Body    "$MESSAGEHTML";  
  
$mail->AltBody "$messageplain";    
  
  for (
$i 0$i $num$i++)  
  {  
     
//Start Schleife  
     
$row mysql_fetch_array($result);  
     
$mail->AddAddress("$row[Mail]");  
     
// Schluss Schleife  
  
}  
  
  
//Wenn Mail nicht geschickt  
  
if(!$mail->Send())  
  {  
     echo 
"<h3>Das Mail konnte nicht verschickt werden. ";  
     echo 
"Mailer Fehler: " $mail->ErrorInfo;  
     echo 
"</h3>";  
     exit;  
  }  
  
  echo 
"<h3>Das Mail ist abgeschickt.</h3>";  
?>
Ich würde mir aber noch überlegen, ob ich nicht lieber BCC nehmen würde.

Gruß
phpfan
 
Alt 08.11.2005, 23:51  
Erfahrener Benutzer
 
Registriert seit: 11.03.2004
Beiträge: 138
Sonja
Standard

Danke

Jetzt geht das Maiul an alle Adressaten, aber in Feld an kommen alle Empfänger. Und das will ich natürlich nicht!

Ich wollte eigentlich einzelne Mails generieren, so dass niemend siht wer das Mail sonst auch noch bekommen hat, und doch nicht per BCC, denn diese gehen zum Teil ja auch direkt in den Spam-Ordner.

Ich wollte die Schleife nicht bei der Adresse machen, sondern beim Mail, so dass das System eine entsprechend EAnzahl Mails generiert. Von der Performance her sollte es kein Problem sein.

Gruss und eine interessante Nacht
Sonja
Sonja ist offline  
Alt 09.11.2005, 08:44  
Gast
 
Beiträge: n/a
Standard

Probiers mal so (mailversand mit in die Schleife) -->



PHP-Code:
<?php
  
require("phpmailer/class.phpmailer.php"); 
  
//Adressen holen 
  
$query "select Mail from testmitglieder"
  
$result mysql_query($query,$link); 
  
$num mysql_num_rows($result); 

  
// START Schleife 
  
for ($i 0$i $num$i++) { 
    
$row mysql_fetch_array($result); 
    
$mail = new PHPMailer(); 
    
$mail->From "info@xxxx"
    
$mail->FromName "xxxxxx"
    
$mail->AddReplyTo("info@xxxx"); 
    
$mail->AddAddress($row['Mail']); 
    
$mail->WordWrap 50
    
// PDF 1
    
if(!empty($dateifilea) and empty($dateifileb)) { 
      
copy ($dateifilea,"../pdf/$dateiname"); 
      
$mail->AddAttachment("../pdf/$dateiname");  
    } 
    
// PDF 2
    
if(!empty($dateifilea) and !empty($dateifileb)) { 
      
copy ($dateifilea,"../pdf/$dateiname"); 
      
copy ($dateifileb,"../pdf/$dateiname2"); 
      
$mail->AddAttachment("../pdf/$dateiname"); $mail->AddAttachment("../pdf/$dateiname2");  
    } 
    
//Mail 
    
$mail->IsHTML(true);                                 
    
$mail->Subject "$betreff"
    
$mail->Body    "$MESSAGEHTML"
    
$mail->AltBody "$messageplain"
    if(!
$mail->Send()) { 
      echo 
"<h3>Die E-Mail konnte nicht an [i]"$row['Mail'] ."[/i] verschickt werden. "
      echo 
"  Mailer Fehler: "$mail->ErrorInfo
      echo 
"</h3>"
      exit; 
    } else {
      echo 
"<h3>Die E-Mail wurde abgeschickt.</h3>";  
    }
  } 
  
// ENDE Schleife

?>
 
Alt 09.11.2005, 10:02  
Gast
 
Beiträge: n/a
Standard

@HK
Sorry, das ist so Quatsch. In der Schleife wird jedes mal ein neues Object angelegt und immer wieder Variablen gesetzt, wozu? Da Sonja zu diesem Thema noch einen Thread (unverständlicherweiser) eröffnet hat, habe ich hier weitergemacht: http://www.phpfriend.de/forum/ftopic49826.html

Gruß
phpfan
 
Alt 09.11.2005, 12:50  
Erfahrener Benutzer
 
Registriert seit: 11.03.2004
Beiträge: 138
Sonja
Standard

http://www.phpfriend.de/forum/viewtopic.php?p=344185

Sorry, ich weiss nicht weshalb, vermutlich war es mein nervöser Finger
Sonja ist offline  
Alt 09.11.2005, 12:55  
Erfahrener Benutzer
 
Registriert seit: 11.03.2004
Beiträge: 138
Sonja
Standard

Die Lösung von HK geht, nur musste ich noch die Bestätigung rausnehmen.

PHP-Code:
<?php
<?php 
  
require("phpmailer/class.phpmailer.php");  
  
//Adressen holen  
  
$query "select Mail from testmitglieder";  
  
$result mysql_query($query,$link);  
  
$num mysql_num_rows($result);  

  
// START Schleife  
  
for ($i 0$i $num$i++) {  
    
$row mysql_fetch_array($result);  
    
$mail = new PHPMailer();  
    
$mail->From "info@xxxx";  
    
$mail->FromName "xxxxxx";  
    
$mail->AddReplyTo("info@xxxx");  
    
$mail->AddAddress($row['Mail']);  
    
$mail->WordWrap 50;  
    
// PDF 1 
    
if(!empty($dateifilea) and empty($dateifileb)) {  
      
copy ($dateifilea,"../pdf/$dateiname");  
      
$mail->AddAttachment("../pdf/$dateiname");   
    }  
    
// PDF 2 
    
if(!empty($dateifilea) and !empty($dateifileb)) {  
      
copy ($dateifilea,"../pdf/$dateiname");  
      
copy ($dateifileb,"../pdf/$dateiname2");  
      
$mail->AddAttachment("../pdf/$dateiname"); $mail->AddAttachment("../pdf/$dateiname2");   
    }  
    
//Mail  
    
$mail->IsHTML(true);                                  
    
$mail->Subject "$betreff";  
    
$mail->Body    "$MESSAGEHTML";  
    
$mail->AltBody "$messageplain";  
    if(!
$mail->Send()) {  
      echo 
"<h3>Die E-Mail konnte nicht an [i]"$row['Mail'] ."[/i] verschickt werden. ";  
      echo 
"  Mailer Fehler: "$mail->ErrorInfo;  
      echo 
"</h3>";  
      exit;  
    } 
  }  
 echo 
"<h3>Die E-Mail wurde abgeschickt.</h3>";   

  
// ENDE Schleife 

?>
?>
Wenn ich die Bestätigung nach dem if im else drin habe kommen soviele Bestätigungen wie Mails rausgingen. und da es schulssendlich an die 200 Mail sein werden, käme 200x der Text.

Danke allen für die Hilfe und nochmals sorry wegen den 2 Einträgen
Sonja ist offline  
Alt 09.11.2005, 13:04  
Gast
 
Beiträge: n/a
Standard

Stimmt, aber ich glaube die Lösung ist nicht so schön weil die gleich bleibenden Variablen unnütz in der schleife sind. DIe müsste man vor die schleife schreiben aber dann passt es mit $mail = new PHPMailer(); nicht mehr ... kein plan und zeit dies zu testen

vielleicht auf phpfans antwort warten ich bin schließlich auch noch Anfänger
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Doppelte E-Mail Adressen herausfinden r-ene PHP Tipps 2008 16 16.07.2008 12:54
PHPMailer Problem ochsi PHP Tipps 2008 7 08.07.2008 10:34
phpmailer & Autenfizierung von Postausgansserver Klaus PHP Tipps 2006 3 25.09.2006 14:57
phpmailer + 2 verschiedene E-Mails Sebja PHP-Fortgeschrittene 3 25.06.2006 21:18
phpmailer: Bei smtpf html-Formatierung weg... PHP Tipps 2006 31 11.02.2006 15:43
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
PHPMailer findet eigene Variable net seejay PHP Tipps 2007 6 04.01.2006 12:55
PHPMailer mailt nicht Smiley PHP Tipps 2007 4 06.12.2005 16:33
phpmailer Fehler bei den Adressen Cyberbob_at_tot PHP Tipps 2007 3 30.11.2005 14:40
phpmailer an mehrere Adressen gleichzeitig Sonja PHP Tipps 2007 4 09.11.2005 12:48
Ein Nutzer mehrere IP Adressen innerhalb von Minuten? CSS PHP Tipps 2005 14 23.05.2005 20:59
phpmailer: Problem mit Pfad PHP Tipps 2005 4 10.02.2005 15:13
Formatprobleme mit PHPMailer PHP-Fortgeschrittene 2 09.02.2005 17:46
umlaute im phpmailer PHP Tipps 2005 3 26.01.2005 15:07
Verstecken von e-mail adressen vor Spamrobots PHP Tipps 2005 22 12.01.2005 23:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
phpmailer addaddress, phpmailer bcc, phpmailer addadress, addaddress phpmailer, phpmailer addreplyto, addreplyto phpmailer, phpmailer mehrere bcc, php mailer addaddress, phpmailer mehrere adressen, schleife mit attachments phpmailer, phpmailer schleife, phpmailer mehrere empfänger, phpmailer add address, php mailer addadress, addattachment pdf, phpmailer in schleife, addreplyto, \phpmailer\ bcc, phpmailer $mail->addaddress, phpmailer mehrere bcc empfänger

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.