php.de

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

 
 
LinkBack Themen-Optionen
Alt 01.03.2006, 11:57  
Gef
Neuer Benutzer
 
Registriert seit: 01.03.2006
Beiträge: 8
Gef
Standard mail() und boundary Problem

Guten Tag allerseits,

nach stundenlangem Rumprobieren sitze ich nun an einem Problem, betreffend der PHP Funktionalität mail() und gesendeten Headern; genauer Mails mit "eingebetteten" Bildern.

Die Mail wird zwar versendet, allerdings sehe ich beim Öffnen der Mail nicht die HTML Mail, SONDERN die Boundary Anweisungen und ich komme da auch nicht weiter.

Hier mein Code:

PHP-Code:
if(preg_match('/@/'$mail)) {
        
$boundary="=_XXXboundaryXXX";
        
$empf=$defaul_mail// Empfaenger
        
$subj="Test"// Betreff
        
$hdrs="From: ".$mail."\r\n"// Absender
        
$hdrs.="MIME-Version: 1.0\r\n"// MIME-Version
        
$hdrs.="Content-Type: multipart/mixed";
        
$hdrs.="boundary=\"$boundary\";\r\n";
        
$hdrs.="Content-Transfer-Encoding: 8bit";
        
$body ="--$boundary\r\n"// Ende des Headers markieren
        // Header fuer den HTML-Teil schreiben
        
$body .="Content-Type: text/html; charset=\"iso-8859?1\";\r\n";
        
// NACH dem letzten Header ZWEI Zeilenumbrueche
        
$body .="Content-Transfer-Encoding: 8bit\r\n\r\n";
        
// Der HTML-Teil der Mail
        
$body.="<html><head><title></title>
                </head>
                <body>
                <table width=\"300\">
                <tr><td colspan=\"2\">
                
                <img src=\"cid:bild1\">
                </td></tr>
                <tr>
                
                <td><img src=\"cid:bild2\"></td>
                <td>PHP ist eine tolle Sache!</td>
                </tr>
                <tr><td colspan=\"2\">
                
                <img src=\"cid:bild1\">
                </td></tr>
                </table>
                </body>
                </html>\r\n"
;
        
$body.="--$boundary\r\n"// HTML-Teil beenden
        // Erste Grafik einfuegen
        
grafik_einfuegen ("bild1","Images/Layout/nav_pfeil_gruen_o.gif",$body);
        
$body.="--$boundary\r\n"// Erste Grafik beenden
        // Zweite Grafik einfuegen
        
grafik_einfuegen ("bild2","Images/Layout/nav_pfeil_gruen.gif",$body);
        
$body.="--$boundary--\r\n\r\n";// Zweite Grafik beenden
        
if(false==mail ($empf,$subj,$body,$hdrs))
        {
            die (
"Konnte Mail nicht senden");
        }
    } 
Die beiden Funktionen:

PHP-Code:
// Liest die Grafik ein und kodiert sie nach Base64
function bild_einlesen($bild_name)
{
   
// Datei einlesen
   
$bild=file_get_contents($bild_name);
   
// Nach Base64 kodieren
   
$b64_kodiert=base64_encode($bild);
   
// Zeilenumbrueche einfuegen
   
$b64_kodiert=chunk_split($b64_kodiert,76,"\r\n");
   return (
$b64_kodiert);
}
// Fuegt die Grafik $name in $body ein
function grafik_einfuegen($cid$name, &$body)
{
   
$body.="Content-Type: image/gif; name=\"$name\"\r\n";
   
$body.="Content-Transfer-Encoding: base64\r\n";
   
// Schreibt die Content-ID in den Header der Grafik
   // Ueber diese URL kann die Grafik in HTML genutzt werden
   
$body.="Content-ID: $cid\r\n\r\n"// Ende der Header
   
$body.=bild_einlesen($name);

Ich schätze das problem entsteht durch fehlende Angaben/falsche Angaben in den Headern. Das aktuell hier vorliegende Script ist teilweise mit einem Buch entstanden, aber angepasst worden. Beim eigentlichem Buchscript erhalte ich auch den selben Fehler.

Bin für Tips/Bugfixes oder mehr Infos dankbar.

mfg
Gef ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.03.2006, 12:03  
Gast
 
Beiträge: n/a
Standard

Warum wird das Rad eigentlich immer wieder neu erfunden? Es gibt so hervorragende Klassen wie phpMailer, damit ist das alles kein Problem. Siehe http://phpmailer.sourceforge.net

Gruß
phpfan
 
Alt 01.03.2006, 16:37  
Gast
 
Beiträge: n/a
Standard

Wenn Du die von phpfan genannte Klasse nicht nutzen wollen solltest - warum
auch immer, zeige doch bitte den erzeugten Quelltext. Damit lässt sich der Fehler
sicherlich schneller und einfacher finden.
 
Alt 01.03.2006, 18:53  
Gef
Neuer Benutzer
 
Registriert seit: 01.03.2006
Beiträge: 8
Gef
Standard

Hab die Klasse genutzt, funzt damit einwandfrei

Warum ich das Rad neu erfinden wollte?
Weil die Klasse und andre Anwendungen, z.b. von pear, viel zu umfangreich für meine Bedürfnisse sind/waren. Das laden einer kompletten klasse von 46kb dauert länger, als das Laden von 5kb code aus meinem Script...
Gef ist offline  
Alt 02.03.2006, 00:47  
Erfahrener Benutzer
 
Registriert seit: 07.07.2005
Beiträge: 177
sysop sorgt für eine eindrucksvolle Atmosphäresysop sorgt für eine eindrucksvolle Atmosphäre
Standard

wen es interessiert, bei mir klappt das hervorragend so:

PHP-Code:
$mail_header "From: $von";
/* boundary */
$boundary strtoupper(md5(uniqid(time())));

/* MIME-mail-header */
$mail_header .= "\nMIME-Version: 1.0";
$mail_header .= "\nContent-type: multipart/mixed; boundary=$boundary";
$mail_header .= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";

/* Hier faengt der normale Mail-Text an */
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-type: $content_type_s";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$mail_content";

/* Hier faengt der Datei-Anhang an */
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-type: $anhang_content_type; name=\"$dateiname\"";
/* Lese aus dem Array $contenttypes die Codierung fuer den MIME-Typ des Anhangs aus */
$mail_header .= "\nContent-Transfer-Encoding: ".$encoding;
$mail_header .= "\nContent-Disposition: attachment; filename=\"$dateiname\"";
$mail_header .= "\n\n$datei_content";

/* Gibt das Ende der eMail aus */
$mail_header .= "\n--$boundary--"
$content_type_s = "text/html" oder "text/plain"
$mail_content ist der eigentliche mailtext (html-text)
$anhang_content_type = "image/gif" oder was da halt drann hängt
$dateiname = name des attachments, wie er angezeigt werden soll
__________________
gruss sys
sysop ist offline  
 


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit mail() Blue-Dragon PHP Tipps 2008 17 05.07.2008 22:09
[Erledigt] problem keine ausgabe coraplanet PHP Tipps 2008 12 02.05.2008 18:51
Mail problem Marian PHP Tipps 2005-2 11 27.09.2005 18:15
mail(); + Array = Problem PHP Tipps 2005-2 5 15.08.2005 16:45
mail von lokalem Server an SMTP im Netz -after_pop- Problem PHP-Fortgeschrittene 7 12.08.2005 14:40
Problem ! Mail mit PHP vom Freenet-Server pit62 PHP Tipps 2005 3 09.02.2005 09:22
[Erledigt] Problem mit mail datei im mbox fomat PHP-Fortgeschrittene 3 08.02.2005 15:24
Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
Problem mit dem mail() PHP Tipps 2005 10 18.01.2005 21:13
mail() problem Trumpfass PHP Tipps 2004-2 3 20.12.2004 20:07
mail() Problem mit emailadresse mit "-" [gelöst] wishy PHP Tipps 2004-2 2 15.12.2004 11:36
Mail Problem PHP Tipps 2004-2 3 13.12.2004 22:43
Problem mit Formular + Mail To+ PHP-Seiten weiterleitung HTML, Usability und Barrierefreiheit 3 27.08.2004 11:06
Problem mit Mail PHP Tipps 2004 15 02.08.2004 22:55
mail() - problem PHP Tipps 2004 2 12.07.2004 00:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mail boundary, mail boundary, email boundary, boundary mail, php boundary, boundary php, boundary email, mail body php image einfügen, html boundary, html mail boundary, php email boundary, boundary php mail, e mail boundary, php mail header boundary, boundary mail php, email boundary php, phpmailer boundary, php boundary mail, mail header boundary, e-mail boundary

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2014, 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.