1

我有以下 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();
}
4

4 回答 4

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";
    }
于 2012-11-19T13:44:33.047 回答
0

你的没有什么问题$_data_output

检查您说正在查看的邮件客户端中的设置。

于 2012-11-14T14:17:15.080 回答
0

这不是 foreach 循环的问题,而是表的问题。有时(至少在某些浏览器中)html 标记中 td 之间的实际空间会按原样呈现到网页中。

为避免这种情况,请添加font-size:0到您的表格类,然后再次为您的 td 类定义字体大小。

于 2012-11-14T14:34:11.263 回答
0

欢迎来到电子邮件格式的世界 - 您的问题很可能是您正在查看最终结果/电子邮件的电子邮件客户端 - 对此进行测试:

file_put_contents('test.htm',$data_output);

运行此脚本并打开文件并查看该输出文件中的样式中是否有空格(RAW 输出)

如果是这样,脚本就是问题所在,如果不是,您的电子邮件客户端正在格式化电子邮件,因为大多数电子邮件客户端解析传入的电子邮件,更改样式和内联标签,删除标签和各种可怕的东西......

做谷歌搜索 -这个,你会找到相关的文章....

于 2012-11-14T15:06:36.163 回答