php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 20-03-2007, 16:25
jhartlep
 Newbie
Links : Onlinestatus : jhartlep ist offline
Registriert seit: Mar 2007
Beiträge: 5
jhartlep ist zur Zeit noch ein unbeschriebenes Blatt
Standard Newsletter Mailversand - Performancefrage

Moin,

ich habe folgendes Problem:

ich möchte an einen fest definierten Kreis einen Newsletter versenden.

Hierfür habe ich mir zwei Möglichkeiten überlegt - weiss nun aber nicht, wie sich die beiden Versionen von der Performance auswirken.

Version 1:

PHP-Code:
$headers['From'] = 'from@adresse.de';
$headers['Subject'] = 'Newsletter';
$headers['Bcc'] = $recipients;
$headers['Content-Type'] = 'text/html';
$body $nachricht;

// Create the mail object using the Mail::factory method

$mail_object =& Mail::factory('mail'$params);
$mail_object->send('standart@empfaenger.de'$headers$body); 
Version 2:

Hier würde ich Anstelle der Mail mit BCC die Empfängerliste mit foreach durchlaufen lassen und jedem einzeln die Mail zustellen lassen...

Von der Umsetzung ist das kein Problem, nur weiss ich nicht, wie sich die beiden Versionen bei Empfängerzahlen jenseits der 10.000 verhalten...
Könnt Ihr mir da weiterhelfen, welches die Resourcenschonendere Version ist?

MfG
Jens
Mit Zitat antworten
  #2 (permalink)  
Alt 20-03-2007, 16:35
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.721
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
bei Empfängerzahlen jenseits der 10.000 verhalten
also bei der zahl wirst du eh probleme bekommen, egal womit. timeouts, smtp-server macht dicht, spam-filter wird aktiv, usw. frag erst mal bei deinem provider nach, was der dazu sagt.

gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 20-03-2007, 16:35
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

ich hab die besten Erfahrungen damit gemacht die mails per Hand im 30-50er Pack an den Mailserver auszuliefern. Also fsockopen, HELO, 30 mails rauspullern, fclose, fsockopen, usw.

Einzelne mail()-Statements würd ich lassen. mail() macht bei jeder Mail eine neue Verbindung zum Mailserver auf.

BCC halte ich für problematisch, weil das afaik die menge der Adresse von Server zu Server unterschiedlich ist. Aus Spam-Schutz gründen sind da meistens nur 10 oder so zugelassen. Da lasse ich mich aber auch gerne korrigieren
Mit Zitat antworten
  #4 (permalink)  
Alt 20-03-2007, 16:35
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

generell kann ich dir dazu auf anhieb auch nicht helfen... da ich nicht auf Newsletter stehe. Aber du könntest dir selbst einen Benchmark basten. Hier eine gute Seite die dir bei der Erstellung hilft: http://benchmark.nophia.de/benchmarks.html

Generell gehe ich aber davon aus das eine E-Mail mit vielen BCC schneller zu verschicken ist als viele einzelne ^^
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!

Geändert von Bugbuster (20-03-2007 um 16:39 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 20-03-2007, 18:32
jhartlep
 Newbie
Links : Onlinestatus : jhartlep ist offline
Registriert seit: Mar 2007
Beiträge: 5
jhartlep ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also, um den Provider mache ich mir im Moment keine Sorgen.

Der Newsletter wird z.Z. per Hand erstellt und mit einem externen Programm über den Mailserver des Providers geschickt. Der Nachteil ist, daß der ganze Vorgang ewig lange dauert - vor allem das zusammenstellen per Hand.

Daher soll hier halt ein automatisiertes Skript laufen.

@prego
kannst Du mir Deinen Ansatz nochmal näher erläutern?
Ist für mich nämlich mehr oder weniger das erste mal, daß ich überhaupt mit php mails versenden will... zumindest im größeren Stil...
Mit Zitat antworten
  #6 (permalink)  
Alt 20-03-2007, 18:54
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:

define
('MAIL_SMTP_SERVER''smtp.example.com');

if(
$smtp fsockopen(MAIL_SMTP_SERVER25)){
  
$out fgets($smtp1024);  //SMTP-Server ausgabe lesen
  
if (preg_match("/^220/"$out)) { //220 = ok
    
fputs($smtp"HELO ".MAIL_SMTP_SERVER."\r\n"); //SMTP-Serber halo sagen
    
$out fgets($smtp1024); //Rückgabe lesen

    
$i 0;
    foreach(
$arr_mails AS $mail){ //mails abarbeiten

      //prüfen ob wir schon 30 Stück verschickt haben
      //Wenn ja, neu zum SMTP verbinden
      
if($i%30 === 0){
        
fputs($smtp"QUIT");
        
fclose($smtp);
        
$smtp fsockopen(MAIL_SMTP_SERVER25);
        
$out fgets($smtp1024);
        
fputs($smtp"HELO ".MAIL_SMTP_SERVER."\r\n");
        
$out fgets($smtp1024);
      }
      
$i++;

      
//Nachrichtenteile
      
$headers   'From: Absender <noreply@example.com>'"\n" .
                   
'Reply-To: Absender <noreply@example.com>'"\n".
                   
'Content-Type: text/plain; charset=ISO-8859-1'."\n".
                   
'X-Mailer: PHP/' phpversion();
      
//Wenn HTML-Mail dann Content-Type: text/html

      
$to        $target_email//Email Adresse des Empfängers
      
$subject   quoted_printable_encode('ISO 8859-1 Betreff äöü');
      
$message  "Huhu, ich bin eine tolle Mail!!! äöü";      
      
//Hier entsprechend dem User die Mail zusammen bauen.
      //im Idealfall das ganze vorher schon machen und in einem Array speichern
      

      
fputs($smtp"MAIL FROM: Absender <noreply@example.com>\r\n"); //Envelope
      
$from fgets($smtp1024);

      
fputs($smtp"RCPT TO: <".$to."}>\r\n"); //Empfänger bekannt geben
      
$to_out fgets($smtp1024);

      
fputs($smtp"DATA\r\n"); //Mailser sagen, das wir Daten senden
      
$data fgets($smtp1024);

      
$msg 'To: '.$to."\n".$headers."\nSubject: ".$subject."\n".$message."\r\n\r\n";
      
//Mail zusammen bauen

      
fputs($smtp$msg); //der eigentliche Versand
      
$mail fgets($smtp1024);

      if(!
preg_match("/^250/"$mail)){
        echo 
"Fehler beim Versand (".$to.")<br/>";
      }else{
        echo 
"Versandt an ".$to."<br/>";
      }
    }
  
    
fputs($smtp"QUIT"); //Mailserver Tschüss sagen
    
fclose($smtp);  
  }
}


//Funktion zum encoden eines ISO-8859-1 Betreffs in 7-bit-MIME
function quoted_printable_encode$sString$charset 'iso-8859-1' ) {
  
$aMatch = array();
  if(
preg_match('/[^\x21-\x3C\x3E-\x7E\x09\x20]/e'$sString)){
    
$sString preg_replace'/[^\x21-\x3C\x3E-\x7E\x09\x20]/e'
                    
'strtoupper(sprintf( "=%02x", ord ( "$0" ) )) ;',  $sString );
    
preg_match_all'/.{1,73}([^=]{0,3})?/'$sString$aMatch );
    return 
'=?'.$charset.'?Q?'.str_replace(' ''_'implode'=' CR$aMatch[0])).'?=';
  }else{
    return 
$sString;
  }


Das ist im groben das was ich einsetze. Die Kommentare sollten dir zeigen wies funktioniert...

PS: Das Script würde so nicht funktionieren. Ist ziemlich aus meiner Live Anwendung rausgerissen und nur entsprechend gesäubert.
Musst natürlich den $to aus den $arr_mails holen - wie eben auch die $message, etc.

Geändert von prego (20-03-2007 um 19:02 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 18-07-2007, 13:37
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

@prego bzw. @all

Mit bis zu wie vielen Empfängern wird deine Lösung eingesetzt?

Ein Kunde hat eben angefragt und möchte an ca. 25.000 Empfänger einen Newsletter rauslassen.

Wenn ich da so drüber nachdenke, könnten bei 25.000 locker ca. 5.000 dabei sein die z.B. eine @t-online.de Adresse haben oder halt auch viele die bei AOL und diversen Providern ne Mailadresse haben.

Was ich mich frage: Wenn jetzt grob geschätzt innerhalb von 6 - 12 Stunden da eben bei 5.000 t-online Adressen Mails von der gleichen Maschine ankommen (und nehmen wir mal an diese Mails sind nicht personalisiert - also 100% alle identischen Inhalt haben) dann dürfte da doch die Gefahr recht hoch sein, dass t-online (oder eben AOL und Konsorten) die Absender-Adresse oder gar die ganze Maschine komplett blockt, oder bin ich da zu pessimistisch?

Wäre natürlich übel falls da wegen sowas dann die komplette IP des entsprechenden Serves geblockt würde, da wir natürlich mehrere Kunden auf der gleichen Maschine hosten.

Bin auch kein Freund von Newslettern aber in letzter Zeit fragen vermehrt Kunden nach einer Lösung dafür an, sodass wir da wohl doch mal was bereitstellen müssen (und natürlich wollen alle html-Mails senden ).

Deshalb würde mich generell interessieren wie die Gefahr einzuschätzen ist, dass man geblockt wird und wie man ggf. "vorbeugen" könnte (nur-Text-Mails, verzögertes und Paketweises versenden usw.).
Mit Zitat antworten
  #8 (permalink)  
Alt 18-07-2007, 13:55
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
die Absender-Adresse oder gar die ganze Maschine komplett blockt, oder bin ich da zu pessimistisch?
Naja, geh mal davon aus das bei anderen Newsletter Anbietern ähnlich viele Newsletter an den gleichen Provider gehen. Du kannst ja die Adressen nach Absender Name sortieren dann werden die Mails in unterschiedlichen Abständen verschickt. Im Zweifelsfall einfach mal frech bei T-Online & Co nachfragen.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #9 (permalink)  
Alt 18-07-2007, 15:09
xkl1986
 Member
Links : Onlinestatus : xkl1986 ist offline
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
xkl1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Newsletter Mailversand - Performancefrage

Zitat:
Original geschrieben von jhartlep


Von der Umsetzung ist das kein Problem, nur weiss ich nicht, wie sich die beiden Versionen bei Empfängerzahlen jenseits der 10.000 verhalten...
Bei mir sind die Newsletter Geschichten schon etwas her aber "damals" konnte ich ohne Problem 15000 mails/sek schicken. Provider blocken nur wenn die mails an die gleiche Adresse geschickt werden. Also 10000mails an eine Adresse. Domains sind davon eigentlich nicht betroffen.
__________________
"Nicht jeder Mensch kann und soll Programmieren[...]".

Geändert von xkl1986 (18-07-2007 um 15:13 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 01-08-2007, 07:20
bweichel
 Registrierter Benutzer
Links : Onlinestatus : bweichel ist offline
Registriert seit: Aug 2004
Beiträge: 452
bweichel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Na ja, wenn man sich mal das Angebot von eleven.de ansieht, dann ist doch eigentlich klar, dass in Nahe Zukunft Massenemailversendungen nicht mehr durchkommen. Es sei denn man unterteilt diese, wie bereits erwähnt, in einzelne Pakete sortiert nach der Empfängerdomain.
Mit Zitat antworten
  #11 (permalink)  
Alt 01-08-2007, 09:43
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von prego
Einzelne mail()-Statements würd ich lassen. mail() macht bei jeder Mail eine neue Verbindung zum Mailserver auf.
Wir versenden auf einem Server einmal im Monat 50.000 Mails mit dieser Variante - funktioniert.
Mit Zitat antworten
  #12 (permalink)  
Alt 01-08-2007, 11:01
xkl1986
 Member
Links : Onlinestatus : xkl1986 ist offline
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
xkl1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Es gibt da so tolle Anbieter ( A***r.de) an die man ohne ein Problem 10000 Mail an die gleiche Adresse in 1 sek schicken kann.

Mal ausprobiert, script mit der mail() funktion, nach 3 sek laufzeit waren auf einmal 35000 Mail in dem Postfach ^^.

Super Spamschutz sag ich da
__________________
"Nicht jeder Mensch kann und soll Programmieren[...]".
Mit Zitat antworten
  #13 (permalink)  
Alt 26-10-2007, 09:53
ToM80
 Newbie
Links : Onlinestatus : ToM80 ist offline
Registriert seit: Dec 2006
Beiträge: 22
ToM80 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

da ich gerad an dem gleichen thema sitze, habe ich eine weitergehende frage.
wie handelt ihr dass bouncemanagement?
es ist ja immerhin wichtig zu wissen, wieviel meine mail nicht bekommen haben und z. b. warum nicht (mailbox voll, spamabwehr, mailbox gelöscht...)
Mit Zitat antworten
  #14 (permalink)  
Alt 26-10-2007, 14:42
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Mein Postmaster Account übergibt Mails einem Vorfilter, der entscheidet ob es ein Bounce auf den Newsletter ist. Trifft das zu, wird die Mail in ein bestimmtes Verzeichnis gelegt.

Über dieses Verzeichnis geht jeden Tag ein durch Cron getriggertes Script, dass jede Datei liest und abhängig von den Ergebnissen der Analyse entsprechende Updates auf der DB der Newsletterabonnenten macht.
Mit Zitat antworten
  #15 (permalink)  
Alt 05-11-2007, 21:16
ToM80
 Newbie
Links : Onlinestatus : ToM80 ist offline
Registriert seit: Dec 2006
Beiträge: 22
ToM80 ist zur Zeit noch ein unbeschriebenes Blatt
Standard probleme mit mailversand :(

hi, ich habe jetzt obriges script ausprobier

PHP-Code:
$smtp_server="smtp.domain.de";
$username="user@domain.de";
$password="letMeIn";
define('MAIL_SMTP_SERVER'$smtp_server);
if(
$smtp fsockopen(MAIL_SMTP_SERVER25)){
  
$out fgets($smtp1024);  //SMTP-Server ausgabe lesen
  
if (preg_match("/^220/"$out)) { //220 = ok
    
fputs($smtp"HELO ".MAIL_SMTP_SERVER."\r\n"); //SMTP-Serber halo sagen
    
$out fgets($smtp1024); //Rückgabe lesen

    
fputs($smtp"QUIT");
    
fclose($smtp);
    
$smtp fsockopen(MAIL_SMTP_SERVER25);
    
$out fgets($smtp1024);
    
fputs($smtp"HELO ".MAIL_SMTP_SERVER."\r\n");
    
$out fgets($smtp1024);
  
// SMTP authorization
  
fputs($smtp"AUTH LOGIN\n");
  
fputs($smtpbase64_encode($username)."\n");
  
fputs($smtpbase64_encode($password)."\n");


        
$headers 'From: Absender [email]absender@domain.de[/email]\n' .
               
'Reply-To: Absender <absender@domain.de>\n'.
               
'Content-Type: text/plain; charset=ISO-8859-1'."\n".
               
'X-Mailer: PHP/' phpversion();
                             
        
$mailTo "empfaenger@domainZwei.de"//Email Adresse des Empfängers ($target_email)
    
$subject   quoted_printable_encode("Moin Du"); //$maiSubject=Betreff der Mail
    
$message  =  "jetzt habe ich mir doch tatsächlich eine Mail gesendet :)";  //$mailText=Inhalt der Mail  
        
fputs($smtp"MAIL FROM: Absender <absender@domain.de>\r\n"); //Envelope
    
$from fgets($smtp1024);

    
fputs($smtp"RCPT TO: <".$mailTo."}>\r\n"); //Empfänger bekannt geben
    
$to_out fgets($smtp1024);

    
fputs($smtp"DATA\r\n"); //Mailser sagen, das wir Daten senden
    
$data fgets($smtp1024);

    
$msg 'To: '.$mailTo."\n".$headers."\nSubject: ".$subject."\n".$message."\r\n\r\n";
    
//Mail zusammen bauen

    
fputs($smtp$msg); //der eigentliche Versand
    
$mail fgets($smtp1024);
    echo 
"out:".$mail."<br />";

    if(!
preg_match("/^250/"$mail)){
      echo 
"<span style=\"color:#f00;font-weight: bold;\">!!!Fehler beim Versand (".$mailTo.")!!!</span><br/>";
    }else{
      echo 
"Versendet an ".$mailTo."<br/>";
    }
    
  
    
fputs($smtp"QUIT"); //Mailserver Tschüss sagen
    
fclose($smtp);
    }

Soweit so gut.
Es passiert folgendes:
Code:
out:250 is syntactically correct 
Versendet an empfaenger@domainZwei.de
Aber ankommen tuts nicht ( Habe 2 existierende Mailaccounts getestet, beide negativ. Sagt mir das versendet, aber nix passiert (
Any ideas?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:18 Uhr.