Seite 1 von 1

Newsletter-Batch-Import

Verfasst: Fr 10. Sep 2004, 19:40
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

Verfasst: Sa 11. Sep 2004, 09:10
von ulisteinle
Hallo Christian,

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

Klasse!

Gruß
Uli

Verfasst: Di 26. Apr 2005, 18:14
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

newsletteradressen importien in 4.6.x

Verfasst: Sa 12. Nov 2005, 11:25
von katerk
hallo

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

gruss / katerK

Verfasst: Sa 12. Nov 2005, 13:01
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

funktioniert wunderbar

Verfasst: Sa 12. Nov 2005, 19:54
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

Verfasst: Do 24. Nov 2005, 18:19
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!

Verfasst: Do 24. Nov 2005, 21:52
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

Verfasst: Do 24. Nov 2005, 22:29
von stefkey
ahha, ist das dieser Hash-Wert in der Datenbank? Oder welcher sonst?

Danke

Verfasst: Do 24. Nov 2005, 22:47
von HerrB
Yep.

Gruß
HerrB