Newsletter-Batch-Import

Gesperrt
panyasan

Newsletter-Batch-Import

Beitrag von panyasan »

Hallo,

ich hatte das Problem, eine größere Anzahl von Newsletteradressen importieren zu müssen. Habe schnell ein kleines Modul geschrieben, das die Aufgabe löst. Here it is:

Code: Alles auswählen

<?php

// Newsletter Adressen- Batch Import / Delete
// 10.9.2004 Christian Boulanger
// http://www.panyasan.de

if (strstr($mode,"newsletter_batch")){

  // ist überhaupt etwas eingegeben?

  if(!trim($emails)) { 

	  $msg = "Keine Adressen eingegeben!";

  } else {

	  $lines = explode("\n",$emails);
	  $no=0; $dbl = 0; $invalid = array(); $miss=0;
	  if($mode=="newsletter_batch_import") $import = true;
	  
	  foreach($lines as $line) {
		  $parts = explode(";",trim($line));
		  $email = trim($parts[0]); 
		  $name = trim($parts[1]?$parts[1]:$email);
		  
		  if($email and preg_match('/^[.\w-]+@([\w-]+\.)+[a-zA-Z]{2,6}$/', $email)){

			/* Check if the recipient already exists */
			$sql = "SELECT idnewsrcp 
			  	FROM ".$cfg["tab"]["news_rcp"]." 
				WHERE idclient='$client' and idlang='$lang' and email='$email'";
				
			$db->query($sql);

			if (!$db->next_record()){
				
				// recipient does not exist
				
				if($import){
					
					// then import recipient

					$newsrcpid = $db->nextid($cfg["tab"]["news_rcp"]);
					$timestamp = date("Y-m-d H:i:s"); 
		
					for ($i=0;$i<10;$i++){$r .= rand();}
					$hash = md5($r);
					
					$sql = 'INSERT INTO '.$cfg["tab"]["news_rcp"].'
					SET
						name="'.$name.'",
						email="'.$email.'",
						deactivated="0",
						created="'.$timestamp.'",
						lastmodified="'.$timestamp.'",
						idclient="'.$client.'",
						confirmed="1",
						idlang="'.$lang.'",
						hash="'.$hash.'",
						idnewsrcp = "'.$newsrcpid.'"';
		 
					$db->query($sql);
					$no++;
				} else {
					
					// or count as missing when deleting
					$miss++;
				}
					
			} else {
				
				// recipient does exist
				
				if(!$import) {
					
					// delete entry
					$sql = "DELETE FROM ".$cfg["tab"]["news_rcp"]."
							WHERE idclient='$client' and idlang='$lang' and email='$email'";
					$db->query($sql);
					$del++;
					
				} else {
					
					// or count as already existing
					$dbl++; 
				}
			}
			
		  } else {
			  // count as invalid email address
			  $invalid[] = $email;
			  
		  }
	  } // endforeach
	  
	  // final message
	  
	  $inv = count($invalid);
	  
	  if($import){
		  
	  	$msg = "$no Adresse(n) importiert, $dbl Doublette(n) und ".
		"$inv ungültige Adresse(n) ignoriert.<br/><br/>";
		
	  } else {
		  
	  	$msg = "$del Adresse(n) gelöscht, $miss Adresse(n) war(en) nicht in der ".
		"Datenbank vorhanden und $inv war(en) ungültig.";
		
	  }
	  
	  if($inv) {
		  $msg.="<br/>Die folgenden Emailadressen waren ungültig:<br/>";
		  foreach($invalid as $email) $msg.= $email.", ";
	  }

  } // endif 
  
} // endif

?>
<h1>Newsletter- Adressenimport</h1>
<p> Bitte geben Sie Email-Adressen ein, eine pro Zeile. Sie können, 
mit einem ";" getrennt, auch einen Namen angeben.</p>
<span style="color:red"><?php echo $msg;?></span>
<form action="front_content.php" method="post">
     <input type="hidden" name="idcatart" value="<?php echo $idcatart; ?>">
     <textarea cols="30" rows="20" name="emails"><?php echo $emails;?></textarea>
	 <select name="mode">
	 	<option value="newsletter_batch_import" selected>Adressen importieren</option>
		<option value="newsletter_batch_delete">Adressen löschen</option>
	 </select>
     <input type="submit">
</form>
Kann lange Email-Listen importieren und löschen. Ich erzeugte dafür ein neues Template und eine Seite in einem geschützten Bereich.

Hoffe es nützt.

Gruß,

Christian
Zuletzt geändert von panyasan am Sa 11. Sep 2004, 12:49, insgesamt 1-mal geändert.
ulisteinle
Beiträge: 53
Registriert: Sa 13. Mär 2004, 21:59
Wohnort: D -> BW -> HN
Kontaktdaten:

Beitrag von ulisteinle »

Hallo Christian,

Vielen Dank für das Script! - Ist genau das, was heute auf meiner ToDo -Liste stand!

Klasse!

Gruß
Uli
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Wird das Modul mit der Newsletter-Überarbeitung für V4.4.x verwendet, muss es in dieser Variante verwendet werden (z.Z. ungetestet):

Code: Alles auswählen

<?php

// Newsletter Adressen- Batch Import / Delete
// 10.09.2004 Christian Boulanger
// 26.04.2005 HerrB: urlencode added (Newsletter-Update for V4.4.x)
// http://www.panyasan.de

if (strstr($mode,"newsletter_batch")){

  // ist überhaupt etwas eingegeben?

  if(!trim($emails)) { 

	  $msg = "Keine Adressen eingegeben!";

  } else {

	  $lines = explode("\n",$emails);
	  $no=0; $dbl = 0; $invalid = array(); $miss=0;
	  if($mode=="newsletter_batch_import") $import = true;
	  
	  foreach($lines as $line) {
		  $parts = explode(";",trim($line));
		  $email = trim($parts[0]);
		  $encoded_email = urlencode($email); 
		  $name = urlencode(trim($parts[1]?$parts[1]:$email));
		  
		  if($email and preg_match('/^[.\w-]+@([\w-]+\.)+[a-zA-Z]{2,6}$/', $email)){

			/* Check if the recipient already exists */
			$sql = "SELECT idnewsrcp 
			  	FROM ".$cfg["tab"]["news_rcp"]." 
				WHERE idclient='$client' and idlang='$lang' and email='$encoded_email'";
				
			$db->query($sql);

			if (!$db->next_record()){
				
				// recipient does not exist
				
				if($import){
					
					// then import recipient

					$newsrcpid = $db->nextid($cfg["tab"]["news_rcp"]);
					$timestamp = date("Y-m-d H:i:s"); 
		
					for ($i=0;$i<10;$i++){$r .= rand();}
					$hash = md5($r);
					
					$sql = 'INSERT INTO '.$cfg["tab"]["news_rcp"].'
					SET
						name="'.$name.'",
						email="'.$encoded_email.'",
						deactivated="0",
						created="'.$timestamp.'",
						lastmodified="'.$timestamp.'",
						idclient="'.$client.'",
						confirmed="1",
						idlang="'.$lang.'",
						hash="'.$hash.'",
						idnewsrcp = "'.$newsrcpid.'"';
		 
					$db->query($sql);
					$no++;
				} else {
					
					// or count as missing when deleting
					$miss++;
				}
					
			} else {
				
				// recipient does exist
				
				if(!$import) {
					
					// delete entry
					$sql = "DELETE FROM ".$cfg["tab"]["news_rcp"]."
							WHERE idclient='$client' and idlang='$lang' and email='$encoded_email'";
					$db->query($sql);
					$del++;
					
				} else {
					
					// or count as already existing
					$dbl++; 
				}
			}
			
		  } else {
			  // count as invalid email address
			  $invalid[] = $email;
			  
		  }
	  } // endforeach
	  
	  // final message
	  
	  $inv = count($invalid);
	  
	  if($import){
		  
	  	$msg = "$no Adresse(n) importiert, $dbl Doublette(n) und ".
		"$inv ungültige Adresse(n) ignoriert.<br/><br/>";
		
	  } else {
		  
	  	$msg = "$del Adresse(n) gelöscht, $miss Adresse(n) war(en) nicht in der ".
		"Datenbank vorhanden und $inv war(en) ungültig.";
		
	  }
	  
	  if($inv) {
		  $msg.="<br/>Die folgenden Emailadressen waren ungültig:<br/>";
		  foreach($invalid as $email) $msg.= $email.", ";
	  }

  } // endif 
  
} // endif

?>
<h1>Newsletter- Adressenimport</h1>
<p> Bitte geben Sie Email-Adressen ein, eine pro Zeile. Sie können, 
mit einem ";" getrennt, auch einen Namen angeben.</p>
<span style="color:red"><?php echo $msg;?></span>
<form action="front_content.php" method="post">
     <input type="hidden" name="idcatart" value="<?php echo $idcatart; ?>">
     <textarea cols="30" rows="20" name="emails"><?php echo $emails;?></textarea>
	 <select name="mode">
	 	<option value="newsletter_batch_import" selected>Adressen importieren</option>
		<option value="newsletter_batch_delete">Adressen löschen</option>
	 </select>
     <input type="submit">
</form>
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
katerk
Beiträge: 11
Registriert: Do 27. Okt 2005, 19:32
Kontaktdaten:

newsletteradressen importien in 4.6.x

Beitrag von katerk »

hallo

frage? gibt es dieses modul auch schon fuer 4.6.2?
waere fein, wenn man es anpassen koennte!

gruss / katerK
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Für V4.6.x kannst Du die zweite gepostete Variante verwenden. Wenn Du mit importieren fertig bist, rufst Du über den Browser .../contenido/tools/convert_recipient_keys.php auf - fertig.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
katerk
Beiträge: 11
Registriert: Do 27. Okt 2005, 19:32
Kontaktdaten:

funktioniert wunderbar

Beitrag von katerk »

hallo HerrB!

import unter 4.6.2 funktioniert wunderbar!!! danke fuer den hinweis!
waere das nicht fein als kernfunktion beim contenido-newsletter? weiss jemand, ob sowas angedacht ist?

katerK
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Beitrag von stefkey »

Super hat bei mir auch super geklappt. :)
Warum das Script? .../contenido/tools/convert_recipient_keys.php

Was verändert das an den/der Daten/Datenbank?
Verstehe den Code nicht, da ich kein PHP beherrsche
Danke!
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Das Skript oben fügt die neuen Empfänger ein - ab V4.6.x muss aber jeder Empfänger über einen eindeutigen Schlüssel verfügen (dies ist im Skript nicht berücksichtigt).

Das Skript trägt diesen Schlüssel bei den Einträgen ein, die noch nicht über einen Schlüssel verfügen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Beitrag von stefkey »

ahha, ist das dieser Hash-Wert in der Datenbank? Oder welcher sonst?

Danke
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Yep.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Gesperrt