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

3
我试图制作自己的定制联系表格。测试和改进过程中,我发现电子邮件没有以HTML格式呈现。我不确定为什么会出现这种情况,但我发现我必须做错了什么,因为我的电子邮件服务提供商从其他来源接收到的电子邮件是以HTML格式呈现的。我认为消息正文变量内的HTML代码也是正确的,所以问题可能与标题变量或设置方式有关。
备注:与某些人建议的不同,使用样式标签并非我的问题,因为我没有使用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>";
   }

Above is part of my PHP code for the form action. The remaining part is some regex validations for each input and echos as response to those. The submissions are sent to an Outlook email address, which I know is compatible with the style tag in the head or body. What am I doing wrong?

Sample of email literally received by client:

<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>


在这种情况下不需要使用内联样式。Outlook 而不是 Gmail 将成为接收这些消息提交的电子邮件服务提供商。"对于所有内容使用内联样式。该网站将把您的类转换为内联样式:http://premailer.dialect.ca/" 绝对不是我问题的答案。 - Lekstadt
当你说“不是以 HTML 格式出现”时,你是指收到的消息没有 HTML 标签吗?能否贴出 PHP 代码发送给邮箱客户端的确切内容? - user5051310
当然,刚刚发布了。我所说的“没有HTML格式”是指变量$content按原样呈现,格式从未被读取。我认为问题在于标题,或者我没有正确声明电子邮件格式。一定是这个问题。 - Lekstadt
2个回答

1
我发现电子邮件没有HTML格式的原因并不是与HTML或CSS有关,而是在mail();函数中出现了错误:
参数$from干扰了$headers,导致HTML格式无法正常工作。 mail($to, $subject, $message, $from, $headers); 现在一切都正常工作了,CSS结构取决于电子邮件客户端的兼容性。

0
据我所知,您不能像提供的那样在电子邮件中添加样式,但是您只能提供内联样式来添加电子邮件样式。请参考以下示例代码:
<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>';
   }
}

谢谢,我会尝试这个。我使用了style标签,因为这个网站https://www.campaignmonitor.com/css/说Outlook可以接受它。我之前问过一个类似的问题,但没有解决,他们建议我类似于我问题中的代码。 - Lekstadt
请查看答案,我已经做出了更改,请直接复制粘贴,这次不会再出现错误了。 :) - vibhav yadav
分析代码时未发现任何问题,但电子邮件是纯文本格式,与一开始的情况相同。如我之前所提到的,Outlook接受样式标签,因此改为内联样式而不是CSS并没有解决问题。PHP与以前一样正确。唯一的问题是消息以纯文本形式传递,而不是HTML格式,我不知道如何使用标题或其他方式来解决这个问题。 - Lekstadt
你是在邮件函数中使用这个吗,mail($to,$subject,$message,$headers)?尝试在内联样式中添加更多的样式,这样可以更清楚地看到内联代码是否起作用。 - vibhav yadav
它看起来像这样:<html><head></head> <body> <div style="font-weight: bold;">发件人:</span> John Doe <br/> <div style="font-weight: bold;">电子邮件:</span> email@email.com <br/><br/> 这是一条消息。 </body> </html> - Lekstadt
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接