Exclamation Point in HTML Email
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.
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, 2022Comments
-
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?
<!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 & 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 & 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 & 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 & 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 over 12 yearsTable cells are always the full-height of the row they're, and the full width of their parent column.
-
Haru over 12 yearsYes 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 over 12 yearsI 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 over 10 years@Andrew Threadgill - am running into same issue, how did you change the HTML code to base-64 encode?any function?
-
Haru over 10 yearsYou don't have to if you want to use \n.
-
harishannam almost 10 yearsCan 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 almost 10 yearsInside your $messages variable anywhere there are 78 or more characters in a single line.
-
Woody over 9 yearsIf 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 over 8 yearsWhile 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 over 8 yearsGreat, if you want any help you could read through this: How do I write a good answer?
-
colinam1992 over 8 yearsI have made a few changes