Datei für newsletter aufsplitten

Hallo!

Ich würde gerne einen Newsletter verschicken, was mit 1000 mail() Befehlen allerdings sehr langwierig werden würde. Über Bcc ginge natürlich auch.

Mich würde aber interessieren, wie ich mit split() die Datei nach 500 Mails teilen und dann bei 500-1000 weiterversenden kann.

Bin für jede Hilfe dankbar...
 
Hm,
ich verstehe nicht ganz, was du bei der ganzen Aktion mir split() machen möchtest.
Du möchtest die Mail selbst ja nicht in 500 Teile teilen und verschicken, sondern die Mail 500 mal verschicken, oder?!
In diesem Fall gehe ich mal davon aus, dass du die Mails innerhalb einer Schleife an jeden einzelnen User verschickst.
Das ist mit Sicherheit die bessere Methode im Gegensatz zu BCC, da diese von Anti-Spam-Programmen oft gefiltert werden.

Ich gehe mal davon aus, dass du die Mail-Adressen aus einer Datenbank ausliesst...
Ich würde bei solch einer Menge die Adressen den ganzen Vorgang in mehrere Schleifen und Programmabläufe unterteilen.
d.h. beim Auslesen der Mails aus der Datenbank einfach ein LIMIT setzen und das Programm dann mehrmals mit verschiedenen LIMITs durchlaufen lassen.

Ich hoff, dass ich dein Problem richtig aufgefasst habe ;)
 
Nicht so ganz. ;)

Ich verwende als Datenbank eine Datei. Dort befinden sich im Moment knapp 1500 Adressen.

Wie kann ich meinem Newsletterscript sagen, das es nach 500 Adressen eine Ausgabe macht, im Stil von:

PHP:
echo '500 Mails verschickt..Bitte warten';

Vielleicht hatte ich auch den falschen Denkansatz...
 
Es wäre ganz hilfreich,
wenn du uns zumindest den Teil des Codes offenbarst,
wo du die Mails verschickst,
damit wir zusammen ein wenig dran "rumbasteln" können ;) oder wir dir sagen können, was du tun kannst.
 
Klar, kein Thema...

Ich poste den Code mal komplett, so lang ist er nicht...

PHP:
<html>
<head>
<?php
include ("global.php");
print "<title>Newsletter</title><link rel=\"stylesheet\" type=\"text/css\" href=\"themes/$theme/style.css\">";
?>
</head>
<?
$vars=explode(",","pw,send,subject,message,email,action"); 
foreach($vars as $v){ 
if ($HTTP_GET_VARS[$v]!=""){$$v=$HTTP_GET_VARS[$v];} 
if ($HTTP_POST_VARS[$v]!=""){$$v=$HTTP_POST_VARS[$v];} 
} 
$pass="xxx";
$newsletterlocation="$configarray[36]/newsletter_in.php";
$filelocation="data/newsletter.php";
$lettername="newsletter@$configarray[17]";
$youremail="$configarray[35]";
$pattern = "$configarray[17]";
$welcomemessage = "";
$sorrysignmessage = "<div class=\"warning\"> $email existiert bereits in unserer Datenbank</div>";
$sorryblankmailmessage = "<div class=\"warning\">Sie müssen eine Email eintragen</div>";
$sorryoddmailmessage = "<div class=\"warning\">\"$email\" ist keine gültige Emailadresse</div>";
$sorryownmailmessage = "<div class=\"warning\">Wir möchten unseren Newsletter nicht selber erhalten!</div>";
$subscribemessage = "<div class=\"thanks\">Danke für Ihre Anmeldung!</div>";
$subscribemail = "Danke für Ihre Anmeldung.\n\nSie können sich über\n$newsletterlocation abmelden ";
$unsubscribemessage = "<div class=\"thanks\">Email wurde gelöscht</div>";
$failedunsubscriptionmessage = "<div class=\"warning\">Sorry, aber $email kann nicht abgemeldet werden</div>";

if (!file_exists($filelocation)) {
	$newfile = fopen($filelocation,"w+");
	fclose($newfile);
	}
$newfile = fopen($filelocation,"r");
$content = fread($newfile, filesize($filelocation));
fclose($newfile);
$content=stripslashes($content);
$out="";
$lines = explode("\n",$content);
foreach($lines as $l){
	if ($l != $email){$out .= "\n".$l;}
	else{$found=1;}
}
if ($pw	== $pass){
	if ($send != "yes" && $send != "test"){
		print'<form method="post" name="sform"><input type="hidden" name=pw value='.$pass.' /><input type="hidden" name="send" value="yes">
		<br /><b>Newsletter Editor:</b><br /><br />
	Betreff	:<br />
		<input type="text" onKeyPress="this.value=this.value.substr(0,10)" class="forminput" name="subject" size="60" value="';

 echo $configarray[0]; 

 print ' Newsletter vom ';

$today = date("d.m.y");

 echo $today;

 print '"><br />
	Nachricht	:<br />
		<textarea cols="85" rows="10" class="forminput" wrap="virtual" name="message">





-----------------
Sie können sich über ';
echo $newsletterlocation;

print ' abmelden

</textarea> <br><br><input type="submit" value="Abschicken" class="formbutton" name="submitbutton"></form>Bitte haben sie Geduld, bei großen Datenbanken dauert der Versand der Emails einige Zeit. Während dieser Zeit das Fenster bitte nicht schliessen!';
	}
	$mailheaders = "From: $lettername\n";
	$mailheaders .= "Reply-To:$youremail\n";


//	$mailheaders .= "Content-Type: text/html; charset=iso-8859-1\n";
	if ($send == "yes"){
		$message="".stripslashes($message);
		$subject=stripslashes($subject);
		$lines = explode("\n",$content);
		foreach ($lines as $l){mail ($l,$subject,$message,$mailheaders);}
		print "<b>Folgende Nachricht wurde versandt:</b>";
		print "<pre>$subject\n$message</pre>";
	}
}
if ($pw != $pass && $disp != "no"){
	print $welcomemessage;
	print'
	<form method="post">
	Your email: <input type="text" name="email" class="inputsmall" value="" size="20" /> 
	<input type="radio" name="action" value="sign" checked="checked" />subscribe 
	<input type="radio" name="action" value="delete" />unsubscribe 
	<input type="submit" value="Abschicken" class="button" /> 
	</form>
	';
}


function checkmail($string){
	return preg_match("/^[^\s()<>@,;:\"\/\[\]?=]+@\w[\w-]*(\.\w[\w-]*)*\.[a-z]{2,}$/i",$string);
}
?>
</html>
 
Hi,
mach doch eine Zählvariable.
Und bei jedem Verschicken wird sie dann um 1 erhöt.
dann machste da noch ne Abfrage rein
if($zaehler == 500)
echo $meldung;

Fertig.

Grtz MrF
 
Unter der Annahme, dass in jeder Zeile deiner Datei eine E-Mail Adresse steht, würde ich es wie folgt machen:

1. Alle Mailadressen in ein Array einlesen
2. Für jede Mailadresse eine Mail rausschicken. Dazwischen natürlich ein paar Millisekunden warten, da sonst dein Mailserver überlastet wird. Bei dieser Methode erkennt der Empfänger auch, an welche Adresse der Newsletter verschickt wurde. Finde ich persönlich die bessere Variante, aber dauert natürlich etwas länger.

Wenn du pro Mail 500 Adressaten erreichen möchtest, würde ich als erstes die Adressen 1-500 auslesen, dann die nächsten 500 etc. Das kannst du ja so machen, dass 500 Adressen kommasepariert als String in einem Array-Element stehen. Und anschließend für jedes Array-Element eine Mail rausschicken.

Gruß,
matt
 
das mit den seperaten Strings is ne Idee... Wenn ich was hab, das werd ich das mal posten.

Seid doch bitte so nett, und schaut euch mein Problem mit den Layern auch grad an. Ich find den Fehler einfach nicht!

Dankeschön
 
Zurück