为什么我的 PHP 联系表 HTML 发送的电子邮件没有格式化?

Why aren't the emails sent by my PHP contact form HTML formatted?

我正在尝试制作自己的自定义联系表。在对其进行测试以进行改进时,我发现电子邮件不是 HTML 格式。我不确定为什么会发生这种情况,但我发现我一定做错了什么,因为我的电子邮件服务提供商从其他来源收到 HTML 格式的电子邮件。我认为消息 body 变量中的 HTML 代码也是正确的,因此它必须与 headers 变量或我设置它的方式有关。

编辑:与有人建议的不同,使用样式标签不是我的问题,因为我使用的不是 Gmail(不接受它们),而是 Outlook(接受它们)。

if ($_POST['Submit']) {
   if (empty($_POST['Phone'])) {
      $content = "<html>
          <head></head>
          <body>
            <div class='boldtext'>From:</div>
            $name
            <br/>
            <div class='boldtext'>E-mail:</div>
            $email
            <br/><br/>
            $message
           <style>
             .boldtext {
                font-weight: bold;
          }
          </style>
          </body>
        </html>";
   }

以上是我的 PHP 表单操作代码的一部分。剩下的部分是对每个输入的一些正则表达式验证和回显作为对这些输入的响应。提交内容被发送到 Outlook 电子邮件地址,我知道该地址与标题中的样式标签或 body 兼容。我做错了什么?

客户收到的电子邮件示例:

<html>
<head></head>
<body>
  <div class='boldtext'>From:</div>
  John Doe
  <br/>
  <div class='boldtext'>E-mail:</div>
  email@email.com
  <br/><br/>
  This is a message.
<style>
.boldtext {
font-weight: bold;
}
</style>
</body>
</html>

据我所知,您不能像您提供的那样在电子邮件中添加样式,但您可以提供内联样式,仅用于在您的电子邮件中添加样式。执行类似此示例代码的操作,

<div style="font-weight:bold;">From:</div>
$name
<br/>
<div style="font-weight:bold;">E-mail:</div>
$email
<br/><br/>
<p style="font-weight:100;">$message</p>

编辑:你的代码是这样的;

 if ($_POST['Submit']) {
   if (empty($_POST['Phone'])) {
      $content = "<html>
          <head></head>
          <body>
            <div class='boldtext'>From:</div>
            $name
            <br/>
            <div class='boldtext'>E-mail:</div>
            $email
            <br/><br/>
            $message
           <style>
             .boldtext {
                font-weight: bold;
          }
          </style>
          </body>
        </html>";
   }
}

你需要这样做,

 if ($_POST['Submit']) {
   if (empty($_POST['Phone'])) {
      $content = '<html>
          <head></head>
          <body>
            <div style="font-weight:bold;">From:</div>
            '.$name.'
            <br/>
            <div style="font-weight:bold;">E-mail:</div>
            '.$email.'
            <br/><br/>
            <p style="font-weight:100;">'.$message.'</p>
          </body>
        </html>';
   }
}

我找到了发送的电子邮件没有 HTML 格式的原因。它与 HTML 或 CSS 无关,错误在 mail();功能:

参数 $from 干扰了 $headers 并且没有让 HTML 格式工作。

mail($to, $subject, $message, $from, $headers);

邮件($to, $subject, $message, $headers);

现在一切正常,CSS 结构取决于电子邮件客户端兼容性。