tags:

views:

221

answers:

1

This is the case when it "works on my machine". Except that my machine is Windows, and the target is some sort of Linux.

The idea is that the mail() function puts a newline between the MIME-Version and Content-Type headers, thus breaking the whole thing. Here's the code, simpliefied as much as possible:

<?php
  $HTMLPart = chunk_split(base64_encode('<html><body style="color: red">Test.</body></html>'));
  $PlaintextPart = chunk_split(base64_encode('>>> TEST <<<'));

$Headers     =<<<AKAM
From: "My Test" <[email protected]>
Reply-To: [email protected]
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="9-1410065408-1410065408=:27514"
AKAM;

$Body        =<<<AKAM
This is a multi-part message in MIME format.

--9-1410065408-1410065408=:27514
Content-Type: text/plain; charset="windows-1252"
Content-Transfer-Encoding: base64

$PlaintextPart
--9-1410065408-1410065408=:27514
Content-Type: text/html; charset="windows-1252"
Content-Transfer-Encoding: base64

$HTMLPart
--9-1410065408-1410065408=:27514--
AKAM;
 echo 'Try 3: ';
 echo mail('[email protected]', 'Testmail', $Body, $Headers) ? 'WIN' : 'FAIL';
?>
+3  A: 

You probably have a carriage return AND a line feed there. Windows uses CR+LF to end lines, but Linux uses a line feed alone.

Paul Tomblin
Whoa! This was it! O_O
Vilx-