php script für importiern von csv datei in einen email script

Joined
Apr 30, 2009
Messages
643
Reaction score
0
hallo leute ist es irgendwie möglich das man den php einen befehl gibt das es zb emails aus einer csv oder txt datei lesen soll und dan gleich verwendet ?

(dient zum massen email versand wegen newsletter)


also zum beispiel wie das ich ihn den pfad angeben kan und nicht immer einzeln reinhaun muss
 
Du solltest mal versuchen dein Problem in einzelne Teil-Probleme zu zerlegen und nicht alles auf einmal machen. Suche nicht nach einer allmächtigen Funktion die eine CSV-Datei liest und dann E-Mails schickt, mache eins nach dem anderen:

- Wie kann ich eine CSV-Datei öffnen?
- Wie lese ich die Werte darin bzw. Trenne die Werte voneinander?
- Wie schreibe ich E-Mails mit PHP (und wo kommt da die E-Mail Adresse ins Spiel)?

Wenn du das gelöst hast ist der Rest (E-Mail Adresse in einer Schleife durch gelesene Werte ersetzen) ein Kinderspiel.

CSV-Dateien hab ich noch nie gelesen aber es sind ja nur Textdateien, hier sollte file_get_contents() schon reichen. Die Werte trennen sollte mit explode() o.Ä. funktionieren. Zum E-Mails Schreiben guckst du dir am besten mal die mail()-Funktion an.

Bei HTML-E-Mails oder E-Mails mit Anhang benutzt du am besten ein Framework wie PHPMailer. Tutorials dazu sind normalerweise beim Download dabei.
 
ich danke dir vielmals für deine antwort ^^ ich probiers mal aus und doofe frage wegen den schleifen welche is da besser dowhile oder while oO?

€ danke hat wunderbar funktioniert :D nur muss ich noch rausfinden wie ich das auf Bcc stelle
danke dir :D
 
Last edited:
Für CSV-Dateien gibt es eine spezielle PHP Funktion http://de2.php.net/manual/de/function.fgetcsv.php

Ansonsten hat sHiRoKKo schon das wichtigste angesprochen. Falls du den Weg über ein Mail Framework umgehen willst, so sind sicherlich die Kommentare und zugehörigen RFCs unter http://de2.php.net/manual/de/function.mail.php hilfreich.

Wie man ebenso anhand der Beispiele sieht, musst du für BBC nur
Code:
'Bcc: name@example.com' . "\r\n";
in den Header einfügen.

###

ich danke dir vielmals für deine antwort ^^ ich probiers mal aus und doofe frage wegen den schleifen welche is da besser dowhile oder while oO?

Der Unterschied zwischen den beiden Schleifen ist, dass bei einer Do-While-Schleife Schleife der Codeblock zunächst ausgeführt wird und danach erst die While-Bedingung geprüft wird. Es wird also immer min. einmal ausgeführt.
Im Gegensatz dazu wird bei einer While-Schleife zunächst die While-Bedingung geprüft und danach erst der Code ausgeführt.

Welche nun sinniger ist liegt dabei ganz an deinem Quellcode.
 
danke für deine antwort und den Bcc hau ich dan einfach so in den wo er das einliest oder dort wo er die daten ausgibt o.O? wenst wilst schick ich dir mal das zeug per pm das wir das mal bereden könen ^^ danke dir
 
Genau den Headerzusatz fügst du einfach in die mail-Funktion unter $additional_headers (4. Paramteter) ein.
Wichtig ist nur, dass du auf den Zeilenumbruch am Ende des Headers achtest.
 
pfuh du könten wir sich da per pm zusamenreden ? wär sehr hilfreich ^^ <-- bin neu in php changre
 
Ich denke ich mach dir einfach mal ein einfaches Beispiel, dann ist es gleich was für jeden :)

Also zunächst benötigen wir für deinen Fall eine CSV-Datei.

Um eine Zeile dieser Datei zu verarbeiten gibt es wie schon gesagt die PHP FUnktion fgetcsv.

Angenommen deine Datei ist in folgendem Format:
Code:
Klaus,Meier,klaus.meier@host.de
Egon,Krust,fade12@host.de
Inge,Neumann,ingeborg@host2.de

Dann könnte man es wie folgt schreiben:
PHP:
<?php
try
{
	$filepath = './dateiname.csv';
	
	$mailfrom = 'webmaster@example.com';
	$mailreceiver = 'root@world.org';
	$mailsubject = 'Nur so';
	$mailmessage = 'Hallo du!';

	if(is_readable($filepath))
	{
		$mode = 'r';
		$handle = fopen($filepath, $mode);

		if(is_resource($handle))
		{
			$mailheader =
				'From: ' . $mailfrom . "\r\n" .
				'X-Mailer: PHP/' . phpversion();
			
			$mailbcc = array();
			while (!feof($handle))
			{
				$row = fgetcsv($handle);
				
				/*
					$row[0] beinhaltet den Vornamen
					$row[1] beinhaltet den Nachnamen
					$row[2] die E-Mail-Adresse
				*/
				
				// Vorname Name <E-Mail-Adresse>
				$mailbbc[] = $row[0] . ' ' $row[1] . ' <' . $row[2] . '>';
			}
			fclose($handle);
			
			if(count($mailbcc) > 0)
			{
				$mailheader .= "\r\n" . 'Bcc: ' . implode(', ', $mailbcc);
				
				if(!mail($mailreceiver, $mailsubject, $mailmessage, $mailheader))
				{
					throw new Exception('Can\'t send mail.');
				}
			}
			else
			{
				throw new Exception('Can\'t find a receiver.');
			}
		}
		else
		{
			throw new Exception(sprintf('Cannot open file "%s" with mode "%s".', $filepath, $mode));
		}
	}
	else
	{
		throw new Exception(sprintf('The file "%s" doesn\'t exist or isn\'t readable.', $filepath));
	}
}
catch(Exception $e)
{
	echo (string) $e;
}
Dies ist nur so runtergeschreiben und wurde von mir nicht getestet.

Ich denke wenn du dir diese Zeilen einmal durchliest und verstanden hast was dort passiert, dann sollte es für dich kein Problem sein es nach deinen Wünschen anzupassen :)
 
ah :D danke jezt raffs ichs erst wie du das gemeint hatest mit dem header ^^ danke dir
 
Back
Top