【问题标题】:Why aren't the emails sent by my PHP contact form HTML formatted?为什么我的 PHP 联系表单发送的电子邮件不是 HTML 格式的?
【发布时间】:2016-08-17 13:59:08
【问题描述】:

我正在尝试制作自己的自定义联系表格。在测试它以进行改进时,我发现电子邮件不是 HTML 格式的。我不确定为什么会发生这种情况,但我发现我一定做错了,因为我的电子邮件服务提供商从其他来源接收 HTML 格式的电子邮件。我认为消息正文变量中的 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 电子邮件地址,我知道该地址与头部或正文中的样式标签兼容。我做错了什么?

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

<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,将是接收这些邮件提交的电子邮件服务提供商。 “对所有内容都使用内联样式。此站点会将您的类转换为内联样式:premailer.dialect.ca”绝对不是我问题的答案。
  • 当你说“不来html格式”时,你的意思是消息没有收到html标签吗?您能否发布电子邮件客户端从 php 代码中收到的具体内容?
  • 当然,刚刚发布。通过“未格式化 HTML”,我的意思是变量 $content 按原样出现,格式永远不会被读取。我认为问题出在标题中,或者我没有正确声明电子邮件格式。一定是这样的。

标签: php html forms html-email contact-form


【解决方案1】:

我发现发送的电子邮件不是 HTML 格式的原因。它与 HTML 或 CSS 无关,错误在 mail() 中;功能:

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

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

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

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

【讨论】:

    【解决方案2】:

    据我所知,您不能像您提供的那样在电子邮件中添加样式,但您可以提供内联样式,仅用于在您的电子邮件中添加样式。做类似这个示例代码的事情,

    <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>';
       }
    }
    

    【讨论】:

    • 谢谢,我会试试这个。我使用了样式标签,因为这个网站campaignmonitor.com/css 说 Outlook 接受它。我之前问过一个类似的问题,但没有得到解决,他们给了我一些与我问题中的代码类似的建议。
    • 按照我的建议尝试,这可能会对您有所帮助。 :)
    • 我做了,它说:PHP Syntax Check: Parse error: syntax error, unexpected 'font' (T_STRING) in your code on line 14
    • 是的,确实试过这个: if (empty($_POST['Phone'])) { $content = "
      来自:
      $name
      电子邮件:
      $email

      $message"; }
    • 请看答案,我已经做了相应的修改,这次只是复制粘贴,不会再出现错误了。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 2015-11-05
    • 2013-05-05
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多