php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.06.2004, 09:03  
Gast
 
Beiträge: n/a
Standard [Erledigt] Mails und MySQL

Ich sitz grad an nem Webmail und lasse mir von verschiedenen Pop-Konten Emails auslesen und in ner Datenbank speichern. Soweit so gut...
Wie kann ich die Emails wieder auslesen, sodaß bei Plain-Nachrichten die Formatierung beibehalten wird. Momentan laufen die Mails in ein Blob-Feld, ist das Falsch? Kann es sein, daß ich die Mails irgendwie kodieren muß, damit ich sie richtig formatiert zurückbekomme?

Dasselbe Problem hab ich nicht nur mit dem Mailbody, sondern auch mit Anhängen.
Hab ich irgeneinen größeren Fehler gemacht?
Code:
function pop($UserID, $popserver, $username, $password, $host_webmail, $user_webmail, $pwd_webmail, $database_webmail) {

	$Server = "{".$popserver."/pop3:110}" ;
	$mbox = imap_open($Server, $username, $password);
	if ($mbox) {
		echo("Sie sind mit dem Postfach verbunden!



"); 
	} else { die(imap_last_error()); }
	
	for ($i = 1; $i <= imap_num_msg($mbox); $i++) {
	
		$header = imap_header($mbox, $i);
		$Structure = imap_fetchstructure($mbox, $i);
		/* ?><PRE><? print_r($header) ?></PRE><? */
		/* ?><PRE><? print_r($Structure) ?></PRE><? */
		
		$SenderInfo = imap_fetchbody($mbox, $i, 0);
		
		$answered = $header->Answered;
		$ccaddress = $header->ccaddress;
		$ccMailbox = "";
		$ccHost = "";
		for ($j = 0; $j < count($header->cc); $j++) {
			$ccMailbox .= $header->cc[$j]->mailbox.";";
		 	$ccHost  .= $header->cc[$j]->host.";";
		}
		$ccMailbox = substr($ccMailbox, 0, strlen($ccMailbox)-1);
		$ccHost = substr($ccHost, 0, strlen($ccHost)-1);
		
		
		$bccaddress = $header->bccaddress;
		$bccMailbox = "";
		$bccHost = "";
		for ($j = 0; $j < count($header->cc); $j++) {
			$bccMailbox .= $header->bcc[$j]->mailbox.";";
		 	$bccHost  .= $header->bcc[$j]->host.";";
		}
		$bccMailbox = substr($bccMailbox, 0, strlen($bccMailbox)-1);
		$bccHost = substr($bccHost, 0, strlen($bccHost)-1);
		
		
		/* print_r ($ccMailbox); */
		$date =  $header->Date;
		$fromaddress = $header->fromaddress;
		$fromPersonal ="";
		$fromHost = "";
		$fromMailbox ="";
		for ($j = 0; $j < count($header->from); $j++) {
			$fromPersonal .= $header->from[$j]->personal.";";
			$fromMailbox .= $header->from[$j]->mailbox.";";
		 	$fromHost  .= $header->from[$j]->host.";";
		}
		/* print_r($fromPersonal); */
 		$fromPersonal = substr($fromPersonal, 0, strlen($fromPersonal)-1);
		$fromMailbox = substr($fromMailbox, 0, strlen($fromMailbox)-1);
		$fromHost = substr($fromHost, 0, strlen($fromHost)-1);
		
		
		$MailDate = $header->MailDate;
		$message_id = $header->message_id;
		$Msgno = $header->Msgno;
		$recent = $header->Recent;
		$replytoaddress = $header->reply_toaddress;
		
		
		$replytoPersonal ="";
		$replytoMailbox ="";
		$replytoHost ="";
		
		for ($j = 0; $j < count($header->reply_to); $j++) {
			$replytoMailbox .= $header->reply_to[$j]->personal.";";
			$replytoPersonal .= $header->reply_to[$j]->mailbox.";";
		 	$replytoHost  .= $header->reply_to[$j]->host.";";
		}
		$replytoMailbox = substr($replytoMailbox, 0, strlen($replytoMailbox)-1);
		$replytoPersonal = substr($replytoPersonal, 0, strlen($replytoPersonal)-1);
		$replytoHost = substr($replytoHost, 0, strlen($replytoHost)-1);
		
		$senderaddress = $header->senderaddress;
		$senderMailbox ="";
		$senderPersonal ="";
		$senderHost ="";
		
		for ($j = 0; $j < count($header->sender); $j++) {
			$senderMailbox .= $header->sender[$j]->mailbox.";";
			$senderPersonal .= $header->sender[$j]->personal.";";
		 	$senderHost  .= $header->sender[$j]->host.";";
		}
		$senderMailbox = substr($senderMailbox, 0, strlen($senderMailbox)-1);
		//$senderPersonal = substr($senderPersonal, 0, strlen($senderPersonal)-1);
		$senderHost = substr($senderHost, 0, strlen($senderHost)-1);
		
		
		$Size = $header->Size;
		$subject = $header->Subject;
		$toaddress = $header->toaddress;
		
		$toaddress = $header->senderaddress;
		$toMailbox ="";
		
		$toHost ="";
		
		for ($j = 0; $j < count($header->to); $j++) {
			$toMailbox .= $header->to[$j]->mailbox.";";
			$toHost  .= $header->to[$j]->host.";";
		}
		$toMailbox = substr($toMailbox, 0, strlen($toMailbox)-1);
		$toHost = substr($toHost, 0, strlen($toHost)-1);
		
       	$udate = $header->udate;
		$unseen = $header->Unseen;
		$Flagged = $header->Flagged;
		$Deleted = $header->Deleted;
		$Draft = $header->Draft;
		
		
				
		$body = ( imap_body ($mbox, $i));

		$body = ereg_replace("'","\'",$body);
		$body = ereg_replace('"',"\"",$body);
		
		$subject = ereg_replace("'","\'",$subject);
		$subject = ereg_replace('"',"\"",$subject);
		
		$SenderInfo = ereg_replace("'","\'",$SenderInfo);
		$SenderInfo = ereg_replace('"',"\"",$SenderInfo);
		
		
		
		$Werte = "answered".chr(2).$answered.chr(2)."ccaddress".chr(2).$ccaddress.chr(2)."ccMailbox".chr(2).$ccMailbox.chr(2)."ccHost".chr(2).$ccHost.chr(2)."date".chr(2).$date.chr(2)."fromaddress".chr(2).$fromaddress.chr(2)."fromPersonal".chr(2).$fromPersonal.chr(2)."fromMailbox".chr(2).$fromMailbox.chr(2)."fromHost".chr(2).$fromHost.chr(2)."MailDate".chr(2).$MailDate.chr(2)."message_id".chr(2).$message_id.chr(2)."Msgno".chr(2).$Msgno.chr(2)."recent".chr(2).$recent.chr(2)."replytoaddress".chr(2).$replytoaddress.chr(2)."replytoPersonal".chr(2).$replytoPersonal.chr(2)."replytoMailbox".chr(2).$replytoMailbox.chr(2)."replytoHost".chr(2).$replytoHost.chr(2)."senderaddress".chr(2).$senderaddress.chr(2)."senderMailbox".chr(2).$senderMailbox.chr(2)."senderPersonal".chr(2).$senderPersonal.chr(2)."senderHost".chr(2).$senderHost.chr(2)."Size".chr(2).$Size.chr(2)."subject".chr(2).$subject.chr(2)."toaddress".chr(2).$toaddress.chr(2)."toMailbox".chr(2).$toMailbox.chr(2)."toHost".chr(2).$toHost.chr(2)."udate".chr(2).$udate.chr(2)."unseen".chr(2).$unseen.chr(2)."Flagged".chr(2).$Flagged.chr(2)."Deleted".chr(2).$Deleted.chr(2)."Draft".chr(2).$Draft.chr(2)."body".chr(2).$body.chr(2)."UserNr".chr(2).$UserID.chr(2)."SenderInfo".chr(2).$SenderInfo.chr(2)."bccaddress".chr(2).$bccaddress.chr(2)."bccMailbox".chr(2).$bccMailbox.chr(2)."bccHost".chr(2).$bccHost;


		
	$pruefUID = selectString($host_webmail, $user_webmail, $pwd_webmail, $database_webmail, "Mail", "message_id", "message_id", $message_id);
	if ($pruefUID != $message_id) {
		SectionEintrag($mbox, $i, $Structure, $message_id, $host_webmail, $user_webmail, $pwd_webmail, $database_webmail);
		insertString ($host_webmail, $user_webmail, $pwd_webmail, $database_webmail, "Mail", $Werte);
	}
		
		
	}
imap_close($mbox);
}

function SectionEintrag($mbox, $Msgno, $Structure, $message_id, $host_webmail, $user_webmail, $pwd_webmail, $database_webmail) {
	if (! $Structure->parts) {
		$type = $Structure->type;
		$subtype = $Structure->subtype;
		$encoding = $Structure->encoding;
		$bytes = $Structure->bytes;
		$attribute = $Structure->parameters[0]->attribute;
		$value = $Structure->parameters[0]->value;
		$disposition = $Structure->disposition;
		$section = imap_fetchbody($mbox, $Msgno, 1);
			
		$section = ereg_replace("'","\'",$section);
		$section = ereg_replace('"',"\"",$section);
		$Werte = "type".chr(2).$type.chr(2)."subtype".chr(2).$subtype.chr(2)."encoding".chr(2).$encoding.chr(2)."bytes".chr(2).$bytes.chr(2)."attribute".chr(2).$attribute.chr(2)."value".chr(2).$value.chr(2)."disposition".chr(2).$disposition.chr(2)."Section".chr(2).$section.chr(2)."message_id".chr(2).$message_id.chr(2)."SectionID".chr(2)."1";
	
		insertString($host_webmail, $user_webmail, $pwd_webmail, $database_webmail, "Sections", $Werte);
		
		
	} else {
		for ($zz = 0; $zz < (count($Structure->parts)); $zz++) { 
			$type = $Structure->parts[$zz]->type;
			$subtype = $Structure->parts[$zz]->subtype;
			$encoding = $Structure->parts[$zz]->encoding;
			$bytes = $Structure->parts[$zz]->bytes;
			$attribute = $Structure->parts[$zz]->parameters[0]->attribute;
			$value = $Structure->parts[$zz]->parameters[0]->value;
			$disposition = $Structure->parts[$zz]->disposition;
	
	
			?><PRE><? print_r($Structure) ?></PRE><? 
			$section = imap_fetchbody($mbox, $Msgno, $zz+1);
			/* print($section);
			echo("<hr>"); */
			$section = ereg_replace("'","\'",$section);
			$section = ereg_replace('"',"\"",$section);
			
			
			
			
			$Werte = "type".chr(2).$type.chr(2)."subtype".chr(2).$subtype.chr(2)."encoding".chr(2).$encoding.chr(2)."bytes".chr(2).$bytes.chr(2)."attribute".chr(2).$attribute.chr(2)."value".chr(2).$value.chr(2)."disposition".chr(2).$disposition.chr(2)."Section".chr(2).$section.chr(2)."message_id".chr(2).$message_id.chr(2)."SectionID".chr(2).$zz;
	
			insertString($host_webmail, $user_webmail, $pwd_webmail, $database_webmail, "Sections", $Werte);
		}
	}
}
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.06.2004, 18:56  
Gast
 
Beiträge: n/a
Standard

Moin

MEDIUMTEXT müsste eigentlich für eine kodierte Mail ausreichen, aber das ist Geschmacksache. Der Trick ist, wie du richtig erkannt hast, die Daten in die Datenbank zu schreiben und unverändert wieder zu lesen. Das funktioniert meistens schon mit:

Code:
$data = base64_encode($data);
... Schreibroutine in die DB
und beim Lesen

Code:
$data = base64_decode($data_aus_mysql);
// Ausgabe als HTML
print htmlentities($data);
Damit lassen sich teilweise ganze PHP-Strukturen unverändert in die Datenbank abspeichern und wieder rekonstruieren. Beispiel:

Code:
$arr = array (
    'subject' => 'Hello Bill!',
    'to' => 'bill@msn.com',
    'from' => 'marketing@msn.com',
    'body' => 'Blah blah blah.\nIf compiles, it sells, Bill!\n\n'
    );
$data = base64_encode(serialize($data));
// Schreibroutine in die DB
(...)

// ...und später das Wiedereinlesen von $arr 
$data = mysql_fetch...usw.
$arr = unserialize(base64_decode($data));
// Gucken was drin steht:
print_r($arr);

Hast du in deinem PHP auch noch die ZipLib eincompiliert (was eigentlich schon seit einigen Versionen standard ist), solltest du vor dem MIME-kodieren mit base64_encode größere Datenvariablen mit gzcompress() packen, da a) base64_encode() ca. 30% mehr Datenplatz braucht als die ursprüngliche zu kodierende Datenmenge und b) bei HTML-Anwendungen deine übertragene Datenmenge zwischen Webserver und Datenbankserver deutlich reduziert wird.

Dann sieht das Packen unter Umständen so aus:

Code:
$data = base64_encode(gzcompress(serialize($data)));
Das Wiedereinlesen kannst du dir womöglich schon ausdenken

Grüsse

Lev
  Mit Zitat antworten
Alt 10.06.2004, 13:25  
Gast
 
Beiträge: n/a
Standard

Fettes Merci!
Das ist bislang die einzige Antwort, die Sinn macht und mir weiter hilft!
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
MySQL Abfrage von Ver. 5 für Ver 3. des MySQL Servers FireFIghter Datenbanken 3 02.02.2007 17:18
PHP 5.1.2 mySQL 5.0.19 MS-SQL 2005 IIS 6.0 Shakaar PHP-Fortgeschrittene 10 26.03.2006 22:23
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
MySQL &amp;amp; PHP: Problem mit Password() Datenbanken 10 19.09.2005 11:00
mysql_result(): supplied argument is not a valid MySQL PHP Tipps 2005-2 4 25.08.2005 14:44
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
emails in datenbank abspeichern, mails in mysql, imap_header ccaddress, mails mit mysql, emails in mysql, mailboxes drafts.mbox, php pop3 email mysql subject, mail aus mysql, php mailbody in datenbank speichern, mysql neuer eintrag benachrichtigungsmail, mails per pop3 abrufen php und in datenbank speichern, \emails aus mysql\ tabelle erzeugen, imap_body formatierte ausgabe php, imap_fetchbody beispiel, php und mysql mailbox, mails mysql, imap_body formatierung beibehalten, imap_fetchstructure gibt falsche werte aus, mail header sender, php imap_header message_id

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.