Exclamation Point in HTML Email

10,233

Solution 1

I hate to answer my own question but I did find a resolution to the issue, and hopefully someone can use this solution to get rid of the headaches this causes.

The issue is being caused by use of the mail() function. When I try to send the email, I have a long string of html code. IN FACT, TOO LONG! When I go past 78 characters a BANG! shows up and then jacks with my html or css. RFC 2822

The resolution is to change it to base-64 encode the data or add \r\n on my long lines of html code. Either way resolves the issue.

Thanks for the help everyone!

Solution 2

Seems there is not a return on the offending cells So try adding height:100% to them so they are fully filled. You could fix this by adjusting this code

<td style=\"padding:10px;background-color:#113797;color:white;\">

To

<td style=\"padding:10px;background-color:#113797;color:white;height:100%;\">

This should solve your problem.

Solution 3

Remove all CSS styling, lots of email rendering engines fail with it. Use plain old table design.

Use <font color="black">blah</font> instead of style color, use <table cellpadding="10"> instead of style padding, use bgcolor instead of style background-color.

Set bgcolor to whole TABLE, not TDs.

Solution 4

Here is a example of how to create a Base64 Encoded Email in:

    <?php 

$html = "<p>The <b>quick</b> <em>brown</em> <u>fox</u> jumped right over the lazy dog.</p><hr />";

$to   = "[email protected]";
$cc   = "[email protected]";
$bcc  = "[email protected]";
$from = "[email protected]";

$subject  = "This is a MIME encoded email";
$boundary = str_replace(" ", "", date('l jS \of F Y h i s A'));
$newline  = "\r\n";

$headers = "From: $from$newline".
           "Cc: $cc$newline".
           "Bcc: $bcc$newline".
           "MIME-Version: 1.0$newline".
           "Content-Type: multipart/alternative;".
           "boundary = \"$boundary\"$newline$newline".
           "--$boundary$newline".
           "Content-Type: text/html; charset=ISO-8859-1$newline".
           "Content-Transfer-Encoding: base64$newline$newline";

$headers .= rtrim(chunk_split(base64_encode($html)));

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

?>

I found this code in the following site :

https://ctrlq.org/code/19840-base64-encoded-email

Setting up your emails to be Based64 Encoded will remove the random '!' being added to emails.

Share:
10,233
Haru
Author by

Haru

I am sure you would like to know who I am and what I do, but as part of my creed, I cannot tell you. See my identity must remain mysterious and my mission secret, I cannot reveal it to you.

Updated on June 05, 2022

Comments

  • Haru
    Haru almost 2 years

    I am having a hard time formatting a table in an HTML email. There seems to always be one cell that doesn't have the background color or weird white spaces.

    Here is the code (in php) -

     $subject.="<br/><br/><table style=\"width:585px;\" ><tr><td style=\"padding:10px;background-color:#113797;color:white;\">New & Used Vehicles</td><td style=\"padding:10px;background-color:#113797;color:white;\">Term in Months</td><td style=\"padding:10px;background-color:#113797;color:white;\">APR* As Low As</td><td style=\"padding:10px;background-color:#113797;color:white;\">Monthly Payment Per $1000 Borrowed</td></tr>";       
        $result = mysql_query("SELECT * FROM rates WHERE ID>='32' AND ID <='39'");
            while($row = mysql_fetch_array($result))
        {
                      $subject.= "<tr><td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;color:black;\">" . $row['name'] . "</td>";
                      $subject.= "<td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;\">" . $row['term'] . "</td>";
                      $subject.= "<td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;\">" . $row['apr'] . "</td>";
                      $subject.= "<td BGCOLOR=\"#e5f1ff\" style=\"padding:10px;\">" . $row['per_1000'] . "</td></tr>";
        }
    
     $subject.= "</table>";
    

    So I've tried both css background and html and both create something that looks bad. I've also tried Doctypes.

    This is what my mail code looks like.

        mail( "[email protected]", "$title2", "$subject" , "Content-type: text/html;\r\nFrom: [email protected]" );
    

    Here is what it renders out like. See the rogue space?

    Table that is messed up!

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>Check out the low rates.<table style="width:585px;" ><tr><td style="padding:10px;background-color:#113797;color:white;">New &amp; Used Vehicles</td><td style="padding:10px;background-color:#113797;color:white;">Term in Months</td><td style="padding:10px;background-color:#113797;color:white;">APR* As Low As</td><td style="padding:10px;background-color:#113797;color:white;">Monthly Payment Per $1000 Borrowed</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2008 and NEWER Vehicle Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">3.24%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$17.28</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2008 and NEWER Vehicle!
      Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">64 - 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">4.29%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$15.69</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2007 and OLDER Vehicle Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.49%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$18.20</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2007 and OLDER Vehicle Purchases</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">64 - 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$16.46</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2011 &amp; 2010 REFINANCES</td><td bgcolor=!
     "#e5f1ff" style="padding:10px;height:100%;">Up to 63 Months</t!
     d><td bg
    color="#e5f1ff" style="padding:10px;height:100%;">4.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$18.08</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2011 &amp; 2010 REFINANCES</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">64 - 72 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.49%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$16.34</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2008 - 2009 REFINANCES</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 60 Months</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">5.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$19.33</td></tr><tr><td bgcolor="#e5f1ff" style="padding:10px;color:black;height:100%;">2007 &amp; older Vehicle REFINANCE</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">Up to 60 Months</td><td bgcolor="#e5f1ff" style="padding:10px!
     ;height:100%;">6.99%</td><td bgcolor="#e5f1ff" style="padding:10px;height:100%;">$19.80</td></tr></table></body></html>
    
  • Marc B
    Marc B over 12 years
    Table cells are always the full-height of the row they're, and the full width of their parent column.
  • Haru
    Haru over 12 years
    Yes this does work. I didn't know it was such a hassle to have CSS in an HTML email. Most places I have referenced said inline is usually ok.
  • Dan
    Dan over 12 years
    I had the same issue and was able to resolve it with just \n on the end of the long lines. I read here drupal.org/node/31524 that emails need a line break after 998 characters to avoid the issue. Thanks for posting back with your answer!
  • user2341103
    user2341103 over 10 years
    @Andrew Threadgill - am running into same issue, how did you change the HTML code to base-64 encode?any function?
  • Haru
    Haru over 10 years
    You don't have to if you want to use \n.
  • harishannam
    harishannam almost 10 years
    Can you paste some example code. I am not able to understand where to add \n. My $messages is too long and I am running into same issue.
  • Haru
    Haru almost 10 years
    Inside your $messages variable anywhere there are 78 or more characters in a single line.
  • Woody
    Woody over 9 years
    If you're wanting to do the base-64 encode, set the "Content-Transfer-Encoding" to be "base64" and encode the message content: chunk_split(base64_encode($message_content))
  • Natalie Hedström
    Natalie Hedström over 8 years
    While the link my offer a solution to the question this is not a well written answer. You should add the most relevant part from the link to your answer.
  • Natalie Hedström
    Natalie Hedström over 8 years
    Great, if you want any help you could read through this: How do I write a good answer?
  • colinam1992
    colinam1992 over 8 years
    I have made a few changes