php html mail problem

Discussion in 'Server Operation' started by KenKnight, Dec 3, 2008.

  1. KenKnight

    KenKnight New Member

    Hi all,

    I've got the debian etch perfect setup and have run into a problem where trying to send html emails from php are not being processed correctly.

    Even simple code such as;
    Code:
    <?php
    
    
    //define the receiver of the email
    $to = 'someone@nowhere.com';
    //define the subject of the email
    $subject = 'Test HTML email';
    //create a boundary string. It must be unique
    //so we use the MD5 algorithm to generate a random hash
    $random_hash = md5(date('r', time()));
    //define the headers we want passed. Note that they are separated with \r\n
    $headers = "From: someone@nowhere.com\r\nReply-To: someone@nowhere.com";
    //add boundary string and mime type specification
    $headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"";
    //define the body of the message.
    ob_start(); //Turn on output buffering
    ?>
    --PHP-alt-<?php echo $random_hash; ?> 
    Content-Type: text/plain; charset="iso-8859-1"
    Content-Transfer-Encoding: 7bit
    
    Hello World!!! 
    This is simple text email message. 
    
    --PHP-alt-<?php echo $random_hash; ?> 
    Content-Type: text/html; charset="iso-8859-1"
    Content-Transfer-Encoding: 7bit
    
    <h2>Hello World!</h2>
    <p>This is something with <b>HTML</b> formatting.</p>
    
    --PHP-alt-<?php echo $random_hash; ?>--
    <?
    //copy current buffer contents into $message variable and delete current output buffer
    $message = ob_get_clean();
    //send the email
    $mail_sent = @mail( $to, $subject, $message, $headers );
    //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
    echo $mail_sent ? "Mail sent" : "Mail failed";
    
    
    ?>
    
    The message received by outlook looks like plain text messages. Regardless of what we try.

    Mail server is Postfix if that helps.

    Thanks,
    Ken
     
  2. KenKnight

    KenKnight New Member

    This appears to be a \r\n problem ,however, even trying remove the \r does not fix the problem.

    Any suggestions would be greatly appreciated.

    Thanks,
    ken
     
  3. falko

    falko Super Moderator

    Have you tried to save the file with Unix line breaks (\n) instead of Windows line breaks (\r\n)?
     
  4. KenKnight

    KenKnight New Member

    I've run some more tests and I'm not sure which item fixed it, but it is now working. Things done were;

    1) used mime part info

    2) saved as unix

    3) removed \r's from header info.

    Thanks,
    Ken
     

Share This Page