[PHP] E-mail headers verschillend behandeld door providers

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem
Ik heb een website waarvandaan de bestellingen per e-mail naar de klant gestuurd worden. Het mailtje is opgemaakt in HTML

Het bestel-mailtje maak ik aan in PHP, en bij mij komt hij zowel in Outlook 2003, Outlook 2007 en Outlook Express 6 normaal binnen (dus als HTML e-mail).

Bij de klant echter komt de e-mail zowel in Outlook Express als Outlook 2003 binnen als HTML broncode.

De code

Het stukje PHP code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        $to = "voorbeeld@voorbeeld.nl";
        $from = "voorbeeld@voorbeeld.nl";
        $subject = "[website] bestelling Bedrijfsnaam";
        $headers = "MIME-Version: 1.0\r\n".
           "Content-type: text/html; charset=utf-8\r\n".
           "From: \"Liqui Moly (Tebur)\" <".$from.">\r\n".
           "To: \"".$debiteur [ 'debiteurennaam']."\" <".$to.">\r\n".
           "Date: ".date("r")."\r\n".
           "Subject: ".$subject."\r\n";
        
        $message = $smarty->fetch( 'mail_bevestiging_bestelling.tpl' );
        
        echo $message;
        
        mail ($to, $subject, $message, $headers);


De HTML code (mail_bevestiging_bestelling.tpl)

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Bestelling gebruiker</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
...
</body>
</html>


De (geforwarde) mail zoals hij bij de klant binnenkomt:
-----Oorspronkelijk bericht-----
Van: 6754@popimap3.bluevisp.nl [mailto:6754@popimap3.bluevisp.nl]
Verzonden: woensdag 1 november 2006 15:06
Aan: voorbeeld@voorbeeld.nl
Onderwerp: [website] bestelling Bedrijfsnaam

Content-type: text/html; charset=utf-8

From: "Bedrijfsnaam" <voorbeeld@voorbeeld.nl>

To: "Bedrijfsnaam" <voorbeeld@voorbeeld.nl>
Date: Wed, 01 Nov 2006 15:04:57 +0100

Subject: [website] bestelling Bedrijfsnaam

Message-Id: <20061101140457.0BAC87E6F6@apache4.bluevisp.nl>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Bestelling gebruiker</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>


<body>

...

</body>

</html>
Mijn vraag
Ik denk zelf dat de oorzaak is dat de mailserver van de klant (planet) de headers anders leest dan onze mailserver (sitebytes), wat denken jullie?

En vervolgens (als ik de juiste conclusie heb): wat moet ik veranderen om te zorgen dat mijn headers goed zijn, zodat de mails overal als HTML aankomen, in plaats van als "gewone mail" gelezen worden?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik zou sowieso eens naar de volledige headers kijken van de aangekomen mail. Verder valt het me op dat je subject 2x in de headers zet. Ten eerste doet het mail commando dit zelf al, en vervolgens voeg je het zelf ook nog een keer aan de headers toe. Datzelfde geldt ook voor de to.

[ Voor 6% gewijzigd door Janoz op 01-11-2006 15:44 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op woensdag 01 november 2006 @ 15:43:
Ik zou sowieso eens naar de volledige headers kijken van de aangekomen mail. Verder valt het me op dat je subject 2x in de headers zet. Ten eerste doet het mail commando dit zelf al, en vervolgens voeg je het zelf ook nog een keer aan de headers toe. Datzelfde geldt ook voor de to.
Hmmm, niet helemaal slim inderdaad. Ik kan me herinneren dat ik toen ik dit ontwikkelde sowieso problemen had om de mails als HTML te laten zien in e-mail clients, met deze headers werkte het toen en daar heb ik het bij gelaten. Nu wil ik het netjes oplossen, vandaar ook dat ik het hier wilde bespreken.

-edit-
Ik ga het even aanpassen.

Acties:
  • 0 Henk 'm!

Verwijderd

Het lijkt er inderdaad op dat de mailheaders door de MTA van de ISP van je klant wel opgeschoond worden, en door de MTA van jouw ISP niet.

De fout lijkt me te zitten bij de MIME-Version header, aangezien de eerste header daarna (Content-Type) opeens onderdeel blijkt te zijn van de body en niet meer van de headers.

En dan iets heel anders: het is wel netjes om, als je mail in HTML formaat stuurt, een multipart mail te sturen waar ook een plaintext variant in zit.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dankjewel allebei, ben er uit.
De fout lijkt me te zitten bij de MIME-Version header, aangezien de eerste header daarna (Content-Type) opeens onderdeel blijkt te zijn van de body en niet meer van de headers.
Dit heeft geleid tot de oplossing, nadat ik de overbodige headers (subject en to) verwijderd had ging ik kijken waarom hij inderdaad die tweede header niet als zodanig zag. Toen was ik er snel uit: ik gebruik \r\n als line-seperator, en dat is (natuurlijk) de windows newsline. Onder Linux/Unix is dat \n, dus toen ik dat aangepast had werkte het.

Mijn headers zien er nu als volgt uit, voor degenen die ooit ook zo'n probleem hebben:

PHP:
1
2
3
4
        $headers .= "MIME-Version: 1.0".$eol;
        $headers .= "Content-type: text/html; charset=ISO-8859-1".$eol;
        $headers .= "From: Bedrijfsnaam <" . $from . ">".$eol;
        $headers .= "Date: " . date ( "r" ) .$eol;

Voor dit stukje code vul ik $eol met ofwel "\r\n" ofwel "\n" ofwel "\r", afhankelijk van het OS waar de webserver op draait.

Er zit dus inderdaad een verschil in hoe mailservers met de headers omgaan. Toch stom hoeveel tijd je met zo'n probleem kwijt kan zijn.

Verder bedankt voor je opmerking over multipart e-mail, dat ga ik zeker implementeren.

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Hmm, en ik maar denken dat in "Internet-protocols" (HTML/SMTP etc etc) standaard wél CRLF (ASCII 0x13;0x10) gebruikt werd? Onafhankelijk van 't OS?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Osiris schreef op woensdag 01 november 2006 @ 17:12:
Hmm, en ik maar denken dat in "Internet-protocols" (HTML/SMTP etc etc) standaard wél CRLF (ASCII 0x13;0x10) gebruikt werd? Onafhankelijk van 't OS?
klopt

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Dan is toch de "oplossing" van de TS (hoewel 't wel werkt :+) eigenlijk helemaal geen echte oplossing, maar gewoon een foutief ingestelde server van een derde? :P Een work-around dus, die eigenlijk helemaal niet plaats hoeft te vinden...

[ Voor 12% gewijzigd door Osiris op 01-11-2006 17:52 ]


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Osiris schreef op woensdag 01 november 2006 @ 17:12:
Hmm, en ik maar denken dat in "Internet-protocols" (HTML/SMTP etc etc) standaard wél CRLF (ASCII 0x13;0x10) gebruikt werd? Onafhankelijk van 't OS?
In HTML maken de linebreaks nu niet direct deel uit van de standaard...

In RFC 822, dat in principe de basis vormt van MIME, mail, HTTP, wordt inderdaad gesproken van CRLF als de standaard. Zie sectie 3.2 van RFC 822.

Rustacean

Pagina: 1