code_legend
code_legend

Reputation: 3285

php email not reading html

For some reason, the html fails to render in gmail, but renders in hotmail.

Its vital that gmail reads the html, so I wonder which changes I should make to this header.

    $from = "[email protected]";
    $headers = "From: bob at info.co <" .($from) . ">\n";
    $headers .= "Reply-To: ".($from) . "\n";
    $headers .= "Return-Path: ".($from) . "\n";;
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\n";
    $headers .= "X-Priority: 3\n";
    $headers .= "X-Mailer: PHP". phpversion() ."\n";

The message starts of as:

 $message = '<html><body>';
    $message .= "<p>";

    $message .= "Hi $clean_fullName, <br><br>";
    $message .= " Well, I've looked at what you shared with me and I'm delighted to include my personal learning suggestions that I hope will help you achieve your startup goals.";
    $message .= "<br><br>";
    $message .= "If they aren't quite what you're looking for, I take criticism better than most Entrepreneur Wizards
    so please let me know by responding to this email and I'll take another look for you.";
    $message .= "<br><br>";
    $message .= "


    $message .="<br><br>Otherwise, happy learning!<br><br>";

    $message .= "<b>Total Learning time: </b>";
    // create an array of all the duration
    $counter = array();

    foreach($data as $item) {
      // add each duration item to the array after every iteration
      array_push($counter, "{$item['duration']}");
    }

    //record and display the result to the user
    $message .= array_sum($counter);

    $message .= "&nbsp;hours <br><br>";

    foreach($data as $item) {
      $message .= "<b>
      &#10139<a style='color:#FF6400; text-decoration: none' href='{$item['link']}'>{$item['title']}</a></b><br>";
      $message .= "Format: {$item['format']} <br>";
      $message .= "Cost: &#36;{$item['costs']} <br>";
      $message .= "Estimated Duration: {$item['duration']} hours<br>";
      $message .= "<br>";

    }

    $message .= " If you have any questions, do not hesitate to reach out to us.  <br><br>";
    $message .= "</p>";

    $message .= '</body></html>';

mail

mail($to,$subject,$message,$headers);

Upvotes: 0

Views: 99

Answers (1)

I am still learning :)

but this should work

$from = "[email protected]";
$headers .= 'From: bob at info.co <$from>' . "\r\n";
$headers .= 'Reply-To: <$from> ' . "\r\n";
$headers .= 'Return-Path: <$from>' . "\r\n";
$headers .= 'MIME-Version: 1.0 ' . "\r\n";
$headers .= 'Content-Type: text/html; charset=ISO-8859-1' . "\r\n";
$headers .= 'X-Priority: 3' . "\r\n";
$headers .= 'X-Mailer: PHP". phpversion()' . "\r\n";

Answer from comments

 $message = '<html><body>';

u should do like this

$message .= '<html>'. "\r\n";
$message .= '<body>' . "\r\n";

You have too much errors in writing missing dot semi etc

as i see your html tag wasn't open at all.

there is lot options to write this template

1.

    <?php
// multiple recipients
$to  = '[email protected]' . ', '; // note the comma
$to .= '[email protected]';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
?>

2.

$message.= 'blasldl asdas d asdas' . "\r\n";
$message.= ' sdfadasdasd dsad' . "\r\n";

U can change "\r\n"with $rn = "\r\n"; and use it fast as $rn

$message.= 'blasldl asdas d asdas' . $rn;
$message.= ' sdfadasdasd dsad' . $rn;

u can try those solutions and tell me whats happening . and dont place all email under<p></p>

Upvotes: 1

Related Questions