PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   HTML funktioniert nicht in E-Mail (http://www.selfphp.de/forum/showthread.php?t=19064)

Nightstalker 06.04.2008 01:31:30

HTML funktioniert nicht in E-Mail
 
Moin,

ich hab ein kleines Problem. Und zwar hab ich ein kleines Bewerbungsscript gebastelt und dieses will nicht so ganz wie ich. Ich will das es eine HTML E-Mail verschickt, die Mail kommt auch an, sieht aber so aus:

Zitat:

Message-Id: <xxxxxxxxxxxxxx.xxxxxxxxxx@xxxxxxx.xxxxxxx.xxx>
Date: Sun, 6 Apr 2008 00:58:54 +0200 (CEST)



<html>
<head>
<title>Bewerbung bei Arbeitsgemeinschaft Scene</title>
</head>
<body>
Sie haben soeben eine neue Bewerbung für die Aufnahme ins Netzwerk erhalten. Hier sind die Daten:<br /><br />
Nick: sdfsdfs<br /><br />
EMail: fsdfsdfsdf<br /><br />
Die Bewerbung: dfsdfsdfsd<br /><br />
</body>
</html>
Der PHP Code ist folgender:

http://nopaste.de/p/asp5d15gd

Kann mir jemand sagen, warum ich immer nur ne unformatierte E-Mail bekomme??

Gruß Nightstalker

Area51 06.04.2008 08:07:38

AW: HTML funktioniert nicht in E-Mail
 
Lädst du die Mails mit einem Mailprogramm herunter? Ist HTML aktiviert?

Nightstalker 06.04.2008 10:34:54

AW: HTML funktioniert nicht in E-Mail
 
Hi,

ich lade die E-Mails mit Mozilla Thunderbird herunter und bisher hab ich dort immer HTML Mails erhalten.

Übrigends. Fals hilfreich, hier der Link zur PHPInfo:

http://test2.secure-root.com/info.php

Gruß
Nightstalker

Area51 06.04.2008 13:47:12

AW: HTML funktioniert nicht in E-Mail
 
Ich hab mal ne eMailer-Klasse geschrieben.
Die sollte eigentlich funktionieren...

PHP-Code:

<?php
    
/**
     * File: mail.class.php
     *
     * Send mails inform about new entries to admin
     *
     *
     * @author Andreas Fernandez (Area51)
     * @version 1.0.0
     * @since 30.01.2008 17:30:15
     * @copyright (c) 2008 www.scripting-base.de
     *
     * @license http://opensource.org/licenses/gpl-license.php GNU Public License
     */

    /**
     * Class extended from class "Exception" to display own messages
     */
    
class MailException extends Exception
    
{
    }

    
/**
     * Main class sending mails to admin
     */
    
class SendHTMLMail
    
{
        
/**
         * Get Mime-Type of attachments
         *
         * @return array;
         */
        
private function getMime ($filename)
        {
            
// Available Mines which could be sent
            
$types = array (
                
'.txt'    => 'text/txt',
                
'.log'    => 'text/log'
            
);

            
$filename basename ($filename);
            
$ext            strtolower (substr ($filenamestrrpos ($filename'.') ) );

            return 
$types[$ext];
        }

        
/**
         * Send mail to admin
         */
        
public function sendMail ($to$from$headers$subject$message$attachments '')
        {
            
$bound        uniqid (time ().'_');
            
$header        'From: '.$from."\r\n";
            
$content    '';

            foreach (
$headers as $head => $value)
            {
                
$header .= $head.': '.$value."\r\n";
            }

            
// Is $attachments an array?
            
if (is_array ($attachments) )
            {
                
$header        .= 'MIME-Version: 1.0'."\r\n";
                
$header        .= 'Content-Type: multipart/mixed; boundary = "'.$bound.'"'."\r\n";

                
$content    .= '--'.$bound."\r\n";
                
$content    .= 'Content-Type: text/html; charset="UTF-8"'."\r\n";
                
$content    .= 'Content-Transfer-Encoding: 8bit'."\r\n\r\n".$message."\r\n\r\n";

                
// Get every attachment
                
foreach ($attachments as $attach)
                {
                    if (
$handle fopen ($attach'rb') )
                    {
                        
$bn    basename ($attach);

                        
$content    .= '--'.$bound."\r\n";
                        
$content    .= 'Content-Type: '.$this -> getMime ($attach).'; name="'.$bn.'"'."\r\n";
                        
$content    .= 'Content-Transfer-Encoding: base64'."\r\n";
                        
$content    .= 'Content-Disposition: inline; filename="'.$bn.'"'."\r\n\r\n";
                        
$content    .= chunk_split (base64_encode (fread ($handlefilesize ($attach) ) ) )."\r\n";
                        
$content    .= fclose ($handle);
                    }
                    else
                    {
                        
// Can't open $attach
                        
throw new MailException ('Can\' open attachment '.$attach);
                    }
                }

                
$content    .= '--'.$bound.'--'."\r\n";
            }
            else
            {
                
$content    .= 'Content-Type text/html; charset="UTF-8"'."\r\n";
                
$content    .= 'Content-Transfer-Encoding: 8bit'."\r\n\r\n".$message."\r\n\r\n";
            }

            
// Possible track_errors is disabled - so enable it
            
if ( (ini_get ('track_errors') ) == || FALSE)
            {
                
ini_set ('track_errors'1);
            }

            if (!@
mail ($to$subject$content$header) )
            {
                
// Can't send mail to admin - throw
                // mail() [function.mail]: Failed to connect to mailserver at "SERVER" port PORT, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()
                
throw new MailException ($php_errormsg);
            }
        }
    }

    
$sendMail    = new SendHTMLMail ();
    
$headers    = array (
        
'X-Mailer:' => 'PHP '.phpversion ()
    );
    
    
// Configuration
    
$to                strip_tags($_POST['email']);
    
$from            'myadress@example.com';
    
$subject    strip_tags($_POST['subject']);
    
$message    strip_tags($_POST['message']);

    try
    {
        
$sendMail -> sendMail ($to$from$headers$subject$message$attachment);
    }
    catch (
MailException $ex)
    {
        echo 
$ex -> getMessage ();
        exit;
    }
?>


Nightstalker 06.04.2008 15:54:32

AW: HTML funktioniert nicht in E-Mail
 
mit Klassen hab ich noch nicht gearbeitet. Wo muss ich die einsetzen??

Area51 06.04.2008 17:10:11

AW: HTML funktioniert nicht in E-Mail
 
Du musst lediglich die Datei nach der Verarbeitung der Daten einbinden.
Aber vorher solltest du die Variablen
PHP-Code:

    $to                strip_tags($_POST['email']);
    
$from            'myadress@example.com';
    
$subject    strip_tags($_POST['subject']);
    
$message    strip_tags($_POST['message']); 

bearbeiten

Nightstalker 06.04.2008 20:50:04

AW: HTML funktioniert nicht in E-Mail
 
So. ich habs jetzt mal ausprobiert und es hat sich leider nix verändert. Es ist sogar noch schlimmer geworden. Folgende Mail hab ich bekommen:

Zitat:

X-Mailer:: PHP 5.2.0-8+etch7

Message-Id: <20080xxxxx2022.0ACxxxx08D@ksxxx64.kxxxufi.xxx>
Date: Sun, 6 Apr 2008 20:20:22 +0200 (CEST)


Content-Type text/html; charset="UTF-8"

Content-Transfer-Encoding: 8bit




<html>
<head>
<title>Bewerbung bei Arbeitsgemeinschaft Scene</title>
</head>
<body>
Sie haben soeben eine neue Bewerbung für die Aufnahme ins Netzwerk erhalten. Hier sind die Daten:<br /><br />
Nick: dsfsd<br /><br />
EMail: sdfsdfsdf<br /><br />
Die Bewerbung: sdfsdfsdf<br /><br />
</body>
</html>

|Coding 06.04.2008 20:57:24

AW: HTML funktioniert nicht in E-Mail
 
Zitat:

Zitat von Nightstalker (Beitrag 114617)
...ist sogar noch schlimmer geworden...

Kann ich durchaus nachvollziehen...

Hier mal ein (simples und übersichtliches) Beispiel, wie eine HTML-Mail (mit alternativem Plain-Text-Teil) aussehen kann:

PHP-Code:

<?php
  
// Message-Boundary.
  
$boundary md5 microtime () );

  
// Allgemeine Header.
  
$header  'From: Frau Musterman <fm@domain.tld>' "\n";
  
$header .= 'MIME-Version: 1.0' "\n";
  
$header .= 'Content-Type: multipart/alternative; boundary=' $boundary "\n";
  
$header .= "\n";

  
// Plain-Text-Abschnitt.
  
$header .= '--' $boundary "\n";
  
$header .= 'Content-Type: text/plain' "\n";
  
$header .= "\n";
  
$header .= 'Plain-Text Inhalt!' "\n";

  
// HTML-Abschnitt.
  
$header .= '--' $boundary "\n";
  
$header .= 'Content-Type: text/html' "\n";
  
$header .= "\n";
  
$header .= '<html>' "\n";
  
$header .= '  <head>' "\n";
  
$header .= '    <style type="text/css">' "\n";
  
$header .= '      body' "\n";
  
$header .= '      {' "\n";
  
$header .= '        font-size: 22px;' "\n";
  
$header .= '      }' "\n";
  
$header .= '    </style>' "\n";
  
$header .= '  </head>' "\n";
  
$header .= '  <body>' "\n";
  
$header .= '    <u>HTML Inhalt</u>' "\n";
  
$header .= '  </body>' "\n";
  
$header .= '</html>';

  
// MIME-Mail senden.
  
mail 'Herr Musterman <hm@domain.tld>''Betreff'''$header );
?>


Nightstalker 06.04.2008 21:12:42

AW: HTML funktioniert nicht in E-Mail
 
Jetzt funktioniert es fast. Die HTML Formatierung funktioniert, allerdings werden keine Zeilenumbrüche in der Mail welche nicht per Hand (also als <br />) eingefügt werden mehr angezeigt. Wie kann ich das wiederherstellen?? Ich weiß das ich dafür nl2br nehmen muss, allerdings weiß ich nicht wie ich es in diesem Fall mache da ich ja nirgendwo ein Echo vor stehen hab.

Hier der HTML Teil:

PHP-Code:

$header2 .= '--' $boundary "\n";
  
$header2 .= 'Content-Type: text/html' "\n";
  
$header2 .= "\n";
  
$header2 .= '<html>' "\n";
  
$header2 .= '  <head>' "\n";
  
$header2 .= '    <style type="text/css">' "\n";
  
$header2 .= '      body' "\n";
  
$header2 .= '      {' "\n";
  
$header2 .= '        font-size: 12px;' "\n";
  
$header2 .= '      }' "\n";
  
$header2 .= '    </style>' "\n";
  
$header2 .= '  </head>' "\n";
  
$header2 .= '  <body>' "\n";
  
$header2 .= '    Sie haben soeben eine neue Bewerbung für die Aufnahme ins Netzwerk erhalten. Hier sind die Daten:<br /><br />
Nick: ' 
$_POST[name] . '<br /><br />
EMail: ' 
$_POST[email] . '<br /><br />
Die Bewerbung: ' 
$_POST[bewerbung] . '<br /><br />
"\n";
  
$header2 .= '  </body>' "\n";
  
$header2 .= '</html>'

Die Bewerbungsvariable soll automatische Zeilenumbrüche erzeugen.

|Coding 06.04.2008 21:31:09

AW: HTML funktioniert nicht in E-Mail
 
Es heißt nicht $_POST[var] sonder $_POST['var'].

Zu Deiner Frage:

PHP-Code:

// ...
$header2 .= '    Sie haben soeben eine neue Bewerbung für die Aufnahme ins ' "\n";
$header2 .= '    Netzwerk erhalten. Hier sind die Daten:<br /><br />' "\n";
$header2 .= '    Nick: ' $_POST['name'] . '<br /><br />' "\n";
$header2 .= '    EMail: ' $_POST['email'] . '<br /><br />' "\n";
$header2 .= '    Die Bewerbung: ' nl2br $_POST['bewerbung'] ) . '<br /><br />' "\n";
// ... 



Alle Zeitangaben in WEZ +2. Es ist jetzt 10:44:25 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.