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 間の実際のスペースがそのまま Web ページにレンダリングされます。

これを回避するには、テーブル クラスに追加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 に答える