mail() wie HTML anzeigen lassen?

Joe

Erfahrenes Mitglied
Hallo Tutorials.de,

Ich verzweifel grad an einer Mailfunktion. Egal was ich anstelle ich bekomme zb in gmx den Emailtext und sämtliche HTML-Tags komplett ausgeschrieben dargestellt.
Das sieht dann so aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registration</title>............

Und hier der Code:
PHP:
$adresse = $Email;
$betreff = "End of Time - Account aktivieren";
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html;' . "\r\n";
$header .= 'From: registration@end-time.de' . "\r\n";

$message = ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registration</title>

<style type="text/css" title="Style Sheet" media="all">
html, body{
background-image: url("http://www.end-time.de/img/back.jpg");
background-repeat: repeat-y no-repeat;
background-position: top center;
background-color: #d9c092;
}
</style>
</head>

<body>

<table width="100%" border="0" background="http://www.end-time.de/img/back.jpg" width="600px" height="600px" cellspacing="0" cellpadding="0" style="background:url(http://www.end-time.de/img/back.jpg) repeat-y;">
<tr>
<td>
<h1 style="font-weight: 600; color: #CDBE70; margin: 20px 20px 0px 20px;" >Registrierung abschliessen</h1>
<p style="color: #EECFA1; margin: 0px 20px 0px 20px;" >Vielen Dank für Ihre Registrierung.<br>
Bitte aktivieren Sie ihren Account:<br>
	http://end-time.de/verify.php?user='.$Username.'&code='.$c.'<br>
Nach der Aktivierung können Sie sich mit ihren Usernamen und Passwort einloggen.<br><br>
Bei Problemen wende dich bitte an webmaster@end-time.de</p>
</td>
</tr>
</table>

</body>
</html>

';
$message = utf8_decode($message); 
@mail($adresse,$betreff,$message,$header);

Tja also ich fummel hier nun schon Stunden und so recht leuchtet mir nicht ein was da rumspinnt.
Ich nehme an den PHPMailer müsste ich auf einen Server installieren oder? Im Moment nutze ich noch einen Webhost.
 
Hallo,

es fehlen ein paar Header Daten damit die Mail als HTML angezeigt werden kann.
Ich empfehle dir dennoch mit PHP-Mailer zu arbeiten. Ist um einiges einfacher und du brauchst dich auch nicht um den Header kram kümmern.


Oder du probierst das mal:

PHP:
$message = "<h1>Halloooooo!<h1>";
$to      = "deine@mail.de";
$subject = "Betreff";
$xtra    = "From: ab@sender.de (Ab Sender)\r\n";
$xtra   .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
$xtra   .= "X-Mailer: PHP ". phpversion();
 
mail($to,$subject,$message,$xtra);

Wobei bei dir ist glaub der Semikolon falsch:
PHP:
$headers .= 'Content-type: text/html;' . "\r\n";
in
PHP:
$headers .= 'Content-type: text/html' . "\r\n";

Gruß
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Joe
Danke euch hat mir schon weitergeholfen.
Das Semikoleon war tasächlich teils Schuld an der fehlerhaften Darstellung.
Nun trotzdem gibt es dann noch Proleme mit andren Providern zb hotmail dort wird dann einfach mal das Background-Image ignoriert. Auch ist es echt ein Krampf den Mailheader richtig zu erstellen. Dann der Umstand das quasi jeder Mailprovider sich scheinbar nen eignes Süppchen kocht machts zumindest mir unmöglich es richtig zu machen.

Kurzum ich hab den Swiftmailer installiert und das zeigts mir zumindest bei gmx schonmal korreckt an. Ich frag mich ob es ein Weg gibt festzustellen ob es nun bei andren Providern richtig angezeigt wird. Man kann sich ja nicht bei x Providern anmelden oder gar noch seine User gängeln mal fix das xte mal nachzuschauen ob die Testreg funktionierte bei ihren Provider.
Ich seh das irgendwie problematich und frage mich wieso es da keine einheitlichen Standarts gibt.

Also danke euch erstmal zumindest ein Provider (und damit vermutlich mehrere) zeigt es schon mal gewünscht an.
 
Das liegt an dem HTML, nichtmehr an diversen headern ;) Ist doch genauso eine frickelei, wie eine normale Webseite in allen Browsern und auf jedem BS richtig darzustellen. Genau das gleiche gilt natürlich auch für HTML-Mails ;) Helfen kann da ein weitesgehend valider Code sowie ein wenig Googlei bei diversen Problemchen.
 
Also das valide zu gestalten das es bei den meisten Providern klappt scheint mir grad unlösbar.
Zum Glück hab ich gerade diese Seite gefunden die genau das bestätigt was du sagst @alxy
http://www.campaignmonitor.com/resources/will-it-work/image-blocking/

Ja mein Gott wie soll man das allen recht machen? Im Grunde möchte ich ja nur bissel Schriftfarbe und 1-2 BackgroundImage.
Also hier wäre mal nen allumfassendes TUT Gold wert. Hat vieleicht wer mit Swiftmailer bereits ne SMTP Mail mit Hintergrundbilder gebastelt die bei den meisten Providern funktioniert?

Das hier scheint einzigst in GMX zu funktionieren, Hotmehl und Gmehl verweigern jegliches Pic
PHP:
	require_once 'Swift-4.2.2/lib/swift_required.php';
	
	// Create the Transport
	@$transport = Swift_SmtpTransport::newInstance('*****', 25);
	// Create the Mailer using your created Transport
	$mailer = Swift_Mailer::newInstance($transport);
	// Create the message
	$message = Swift_Message::newInstance();
	// Give the message a subject
	$message->setSubject('Registration');
	// Set the From address with an associative array
	$message->setFrom(array('registration@end-time.de' => 'End of Time'));
	// Set the To addresses with an associative array
	$message->setTo(array($Email));

	// Give it a body
	$cid = $message->embed(Swift_Image::fromPath('img/back.jpg'));
	$cid2 = $message->embed(Swift_Image::fromPath('img/Headerbest.png'));
	
	// And optionally an alternative body
	$message->setBody(
		'<html>'.
		' <head></head>'.
		' <body>'.
		' <div style="background: url(\''. $cid . '\') no-repeat; height:600px; width:600px">'.
		' <center><div style="background: url(\''.$cid2.'\') no-repeat; height:164px;">'.
		' </div>'.
		' </center>'.
		' <h1 style="font-weight: 600; color: #CDBE70; margin: 20px 20px 0px 20px;" >'.
		' Registrierung abschliessen'.
		' </h1>'.
		' <p style="color: #EECFA1; margin: 0px 20px 0px 20px;" >'.
		' Vielen Dank für Ihre Registrierung.'.
		' <br>'.
		' Bitte aktivieren Sie ihren Account:'.
		' <br>'.
		' http://end-time.de/verify.php?user='.$Username.'&code='.$c.''.
		' <br>'.
		' Nach der Aktivierung können Sie sich mit ihren Usernamen und Passwort einloggen.'.
		' <br>'.
		' <br>'.
		' Bei Problemen wende dich bitte an webmaster@end-time.de'.
		' </p>'.
		' </div>'.
		' </body>'.
		'</html>'
		, 'text/html'
		, 'iso-8859-1');

	// Send the message
	$result = $mailer->send($message);
 
Zurück