我有以下PHP。在这里,我创建一个表,循环传入数据的键和值,并将它们添加到行中。收到邮件时,它会在内联样式中添加随机间隙/空格,例如:
请参阅bord er:4px solid #E4F5FD;
<td valign="top" style="padding:5px;border-collapse:collapse;bord er:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFFFFF;">
和
请参阅background:#FFF FFF;
padding:5px;border-collapse:collapse;border:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFF FFF;color:#888888;
我不知道为什么会这样做,以前有人遇到过这个问题吗?
请记住我正在学习PHP,所以要善待。
$data_output .= '<table align="center" border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse;background:#E4F5FD;border:0;width:680px;">';
foreach ($data_html as $key => $value) {
$data_output .= '<tr>';
$data_output .= '<td valign="top" style="padding:5px;border-collapse:collapse;border:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFFFFF;"><b>'.str_replace('_',' ',$key).'</b></td>';
$values = '';
foreach($value as $v) {
$values .= $v.'<br />';
}
$z = '';
if($values == ''){
$z = $value;
} else {
$z = $values;
}
$data_output .= '<td valign="top" style="padding:5px;border-collapse:collapse;border:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFFFFF;color:#888888;">'.str_replace('_',' ',$z).'</td>';
$data_output .= '</tr>';
}
$data_output .= '</table>';
$from = 'website@bla.clo.uk';
$to = $_POST['email'];
$cc = 'me@bla.co.uk';
$subject = 'bla stuff';
$body = $data_output;
$headers = '';
$headers .= "From: $from\n";
$headers .= "Cc: $cc\r\n";
$headers .= "Reply-to: $from\n";
$headers .= "Return-Path: $from\n";
$headers .= "Message-ID: <" . md5(uniqid(time())) . "@" . $_SERVER['SERVER_NAME'] . ">\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\n";
$headers .= "Date: " . date('r', time()) . "\n";
if (mail($to, $subject, $body, $headers)){
echo 'sent';
} else {
echo 'fail';
die();
}
答案 0 :(得分:2)
确保每行内容的长度不超过78个字符,也不要超过998个连续字符。
这是问题所在,我在每行和单元格的末尾添加了“\ n”以打破行内容。
foreach ($data_html as $key => $value) {
$data_output .=
'<tr>'."\n".
'<td style="border:4px solid #DADADA;background:#FFFFFF;text-transform:capitalize;">' . str_replace('_',' ',$key) . '</td>'."\n".
'<td style="border:4px solid #DADADA;background:#FFFFFF;">' . $value . '</td>'."\n".
'</tr>'."\n";
}
答案 1 :(得分:0)
$_data_output
。
检查您说正在查看的邮件客户端中的设置。
答案 2 :(得分:0)
这不是foreach循环的问题,而是表。有时候(至少在某些浏览器中)html标记中的td之间的实际空间会在网页中呈现。
为避免这种情况,请将font-size:0
添加到您的表类中,然后再次为您的td类定义fontsizes。
答案 3 :(得分:0)
欢迎来到电子邮件格式化的世界 - 您的问题很可能是您正在查看最终结果/电子邮件的电子邮件客户端 - 来测试这样做:
file_put_contents('test.htm',$data_output);
运行此脚本并打开文件,查看输出文件中的样式是否有空格(RAW输出)
如果是这样,脚本就是问题,如果不是你的电子邮件客户端正在格式化电子邮件,因为大多数电子邮件客户端会解析传入的电子邮件,更改样式和内联标签,删除标签和各种可怕的东西......
进行gooogle搜索 - this,您会找到相关文章....