php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.11.2006, 13:57  
Erfahrener Benutzer
 
Registriert seit: 03.11.2004
Beiträge: 289
rbs_phoenix
rbs_phoenix eine Nachricht über ICQ schicken
Standard email auslesungsproblem

also ich hab folgendes problem:
ich habe ein script, mit dem ich emails abrufen kann. Allerdings kommen (hauptsächlich) emails als text oder html an. wenn ich die mail auslese, wird die email, die als html gesendet wurde, richtig an.
Wenn es aber als normaler text ist, dann wird dieser ohner zeilenumbruch ausgegeben.
Wenn ich die var mit nl2br ausgebe, wird der normale text richtig ausgegeben aber man sieht die html-tags und es ist alles durcheinander (bei html-email halt)

Weiß jemand woran das liegt?


MFG RBS_Phoenix
__________________
Homepage: http://www.rbs-page.de
rbs_phoenix ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 27.11.2006, 14:02  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Wie zeigst du den Text denn an?
Als HTML Code?

Dann lass denn Text doch einfach durch
PHP-Code:
<?php
$text 
str_replace("\n""
"
$text);
?>
laufen.

Gruß
Tine
tinchen ist offline  
Alt 27.11.2006, 14:25  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Kannst du mal konkrete Beispiele nennen ???

@tinchen .. das macht nl2br
M3g4Star ist offline  
Alt 27.11.2006, 14:40  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Für mich stellt sich die Frage wie der Algorithmus genau aussieht von nl2br.
Man findet ja immer nur, dass es das gleiche macht, wie der Algorithmus ist, findet man nicht.
str_replace hat den Vorteil, dass es auch unter uralt PHP 3 Versionen läuft.

Gruß
Tine
tinchen ist offline  
Alt 27.11.2006, 14:45  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von tinchen
Für mich stellt sich die Frage wie der Algorithmus genau aussieht von nl2br.
Man findet ja immer nur, dass es das gleiche macht, wie der Algorithmus ist, findet man nicht.
Im Zweifelsfall kannst du dir ja den Quellcode von php.net herunterladen und ansehen, wie nl2br() implementiert ist.

Zitat:
Zitat von tinchen
str_replace hat den Vorteil, dass es auch unter uralt PHP 3 Versionen läuft.
PHP 3 wird nicht einmal mehr gepflegt. Darauf noch Rücksicht zu nehmen, ist doch nun wirklich alles andere als sinnvoll.
xabbuh ist offline  
Alt 27.11.2006, 15:11  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Bei nl2br hast du den Vorteil das es auch \r ersetzt und nicht nur \n es kann z.B. vorkommen dass du einen Zeilenumbruch als \n, \r\n oder \r hast. Jenach Betriebssystem.

nl2br() funktioniert, laut Manual, auch unter PHP3.
Zitat:
Zitat von Manual
nl2br

(PHP 3, PHP 4, PHP 5)
nl2br -- Fügt vor allen Zeilenumbrüchen eines Strings HTML-Zeilenumbrüche ein
Und hier die richtige Funktion aus dem Source Code von PHP.
Code:
/* {{{ proto string nl2br(string str)
   Converts newlines to HTML line breaks */
PHP_FUNCTION(nl2br)
{
	/* in brief this inserts 
 before matched regexp \n\r?|\r\n? */
	zval	**zstr;
	char	*tmp, *str;
	int	new_length;
	char	*end, *target;
	int	repl_cnt = 0;

	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstr) == FAILURE) {
		WRONG_PARAM_COUNT;
	}
	
	convert_to_string_ex(zstr);

	str = Z_STRVAL_PP(zstr);
	end = str + Z_STRLEN_PP(zstr);
	
	/* it is really faster to scan twice and allocate mem once insted scanning once
	   and constantly reallocing */
	while (str < end) {
		if (*str == '\r') {
			if (*(str+1) == '\n') {
				str++;
			}
			repl_cnt++;
		} else if (*str == '\n') {
			if (*(str+1) == '\r') {
				str++;
			}
			repl_cnt++;
		}
		
		str++;
	}
	
	if (repl_cnt == 0) {
		RETURN_STRINGL(Z_STRVAL_PP(zstr), Z_STRLEN_PP(zstr), 1);
	}

	if ((new_length = Z_STRLEN_PP(zstr) + repl_cnt * (sizeof("
") - 1)) < 0) {
		RETURN_FALSE;
	}
	
	tmp = target = emalloc(new_length + 1);

	str = Z_STRVAL_PP(zstr);

	while (str < end) {
		switch (*str) {
			case '\r':
			case '\n':
				*target++ = '<';
				*target++ = 'b';
				*target++ = 'r';
				*target++ = ' ';
				*target++ = '/';
				*target++ = '>';
				
				if ((*str == '\r' && *(str+1) == '\n') || (*str == '\n' && *(str+1) == '\r')) {
					*target++ = *str++;
				}
				/* lack of a break; is intentional */
			default:
				*target++ = *str;
		}
	
		str++;
	}
	
	*target = '\0';

	RETURN_STRINGL(tmp, new_length, 0);
}
/* }}} */
Viel Spass
Flor1an ist gerade online  
Alt 27.11.2006, 22:22  
Erfahrener Benutzer
 
Registriert seit: 03.11.2004
Beiträge: 289
rbs_phoenix
rbs_phoenix eine Nachricht über ICQ schicken
Standard

also ich hab z.b. von der esl eine email bekommen, und die war halt mit tabelle, links, bildern etc gesendet. das funktioniert halt auch aber nur wenn ich das nl2br weglasse. dann wird aber der text ohne zeilenumbruch geschrieben.
soweit bin ich jetzt
PHP-Code:
elseif($action == "readmail"){
    function 
retrieve_message($mbox$messageid){
       
$message = array();
      
       
$header imap_header($mbox$messageid);
       
$structure imap_fetchstructure($mbox$messageid);
    
       
$message['subject'] = $header->subject;
       
$message['fromaddress'] =  $header->fromaddress;
       
$message['toaddress'] =  $header->toaddress;
       
$message['ccaddress'] =  $header->ccaddress;
       
$message['date'] =  $header->date;
    
        if (
check_type($structure)){
            
$message['body'] = imap_fetchbody($mbox,$messageid,"1"); ## GET THE BODY OF MULTI-PART MESSAGE
            
if(!$message['body']){
                
$message['body'] = '[NO TEXT ENTERED INTO THE MESSAGE]\n\n';
            }
        }
        else{
             
$message['body'] = imap_body($mbox$messageid);
             if(!
$message['body']){
                
$message['body'] = '[NO TEXT ENTERED INTO THE MESSAGE]\n\n';
            }
            
$message[ownmode] = 1;
        }
      return 
$message;
    }
    
    function 
check_type($structure){ ## CHECK THE TYPE
        
if($structure->type == 1){
            return(
true); ## YES THIS IS A MULTI-PART MESSAGE
        
}
        else{
            return(
false); ## NO THIS IS NOT A MULTI-PART MESSAGE
        
}
    }
    eval (
"\$title_messenger = \"".gettemplate("title_messenger")."\";");
    echo 
$title_messenger;

    echo
'<input type="button" value="Incoming" onClick="MM_goToURL(\'parent\',\'index.php?site=messenger&action=incoming\');return document.MM_returnValue"> 
         <input type="button" value="Outgoing" onClick="MM_goToURL(\'parent\',\'index.php?site=messenger&action=outgoing\');return document.MM_returnValue"> 
         <input type="button" value="New Message" onClick="MM_goToURL(\'parent\',\'index.php?site=messenger&action=newmessage\');return document.MM_returnValue">
         <input type="button" value="Look at the Email Account" onClick="MM_goToURL(\'parent\',\'index.php?site=messenger&action=email\');return document.MM_returnValue">


'
;
    
    
$emailaddy getownemail($userID);
    eval (
"\$title_messengeremail = \"".gettemplate("title_messengeremail")."\";");
    echo 
$title_messengeremail;    
    
    
    
$mbox=imap_open("{mail.rbs-page.de:143/imap/notls}",userdecrypt($userID),passdecrypt($userID)); 
    
$MC=imap_check($mbox); 
    
$MN=$MC->Nmsgs;
    
$messagearr retrieve_message($mbox$msgid);
    
$text str_replace("\n""
"
$messagearr['body']);
    eval (
"\$simple = \"".gettemplate("simple")."\";");
    echo 
$simple;        
    
imap_close($mbox); 
    
$prfem 1;

ich hab auch schon versucht bei der funktion was reinzupacken, aber da wird unterschieden zwischen multipart und nicht multipart. aber html und plaintext (weiß nich ob es so heißt) ist beides nicht multipart. also mit der if-abfrage gehtes auch nicht. kann man nciht mit nem befehl oder so auslesen, ob es html ist oder nicht?

MFG RBS_Phoenix
__________________
Homepage: http://www.rbs-page.de
rbs_phoenix ist offline  
 


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
Abfrage ob email adresse schon vorhanden ist TeazY PHP Tipps 2008 10 16.12.2007 12:22
DB Abfrage nach email funktioniert nicht tinchen Datenbanken 3 15.05.2006 13:20
Newsletter email abfrage Problem mokus PHP Tipps 2006 7 18.04.2006 16:35
email test shocky PHP Tipps 2006 2 16.03.2006 13:55
Email Header und Alternativer Text... PHP Tipps 2007 22 10.11.2005 16:38
Email über richtigen Mailserver schicken? PHP Tipps 2005-2 4 03.08.2005 16:34
[Erledigt] automatisch Email PHP Tipps 2005-2 3 26.07.2005 12:53
[Erledigt] doppelte email adressen suchen Datenbanken 9 20.05.2005 19:38
Email aus textarea PHP Tipps 2005 3 14.04.2005 21:37
Zeitversetzte Email versenden pcschröda PHP-Fortgeschrittene 9 29.01.2005 05:47
eMail kontrolle PHP Tipps 2004-2 1 20.12.2004 13:01
Wie implementiere ich mein Email Formular? PHP Tipps 2004-2 2 14.11.2004 17:02
Suche eMail Formular in PHP Beitragsarchiv 2 12.10.2004 16:24
email funktion des phpbb selbst benutzen PHP Tipps 2004 0 22.09.2004 13:18
Email per PHP formatieren PHP Tipps 2004 4 26.07.2004 09:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
imap_fetchbody zeilenumbrüche, php imap_fetchbody multipart emails, php imap_fetchbody, $str php, php imap_fetchbody zeilenumbruch, mail return message, nl2br implementation

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:59 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.