【问题标题】:PHP Form fields will not send to emailPHP 表单字段不会发送到电子邮件
【发布时间】:2013-03-01 05:22:11
【问题描述】:

我创建了一个发送到电子邮件的 PHP 脚本。

当只发送一个字段(消息字段)时,表单似乎可以正常工作,但是一旦添加了其他字段,表单就会停止通过电子邮件发送到收件箱(但表单仍然会正确触发并重新发送给谢谢很好。)

这是我目前拥有的代码,这不起作用

<?php
  $email = $_REQUEST['email'] ;
  $name = $_REQUEST['name'] ;
  $services = $_REQUEST['services'] ;
  $message = $_REQUEST['message'] ;

  if (!isset($_REQUEST['email'])) {
    header( "Location: feedback.html" );
  }
  elseif (empty($email) || empty($message)) {
     header( "Location: error.html" );
 }
  else {
    mail( "info@website.co.uk", "Message via your website!",
           $name, $services, $message, "From: $email" );
    header( "Location: thankyou.html" );
  }
?>

这是之前的代码,确实有效,但只显示消息

<?php
  $email = $_REQUEST['email'] ;
  $message = $_REQUEST['message'] ;

  if (!isset($_REQUEST['email'])) {
    header( "Location: feedback.html" );
  }
  elseif (empty($email) || empty($message)) {
     header( "Location: error.html" );
 }
  else {
    mail( "info@website.co.uk", "Message via your website!",
          $message, "From: $email" );
    header( "Location: thankyou.html" );
  }
?>

这是表单的 HTML:

<form method="post" action="sendmail.php">
    <label>Name:</label> <input name="name" type="text" /><br />
    <label>Email:</label> <input name="email" type="text" /><br />
    <label>What service do you require?:</label>  <input name="services" type="text" /><br />
    <label>Message:</label><br />
    <textarea name="message" rows="15" cols="40">
    </textarea><br />
    <input type="submit" />
</form>

【问题讨论】:

  • 你应该清理你的输入stackoverflow.com/q/1055460/1607098
  • 您给 Mail() 的参数太多。您是否希望 $name、$services 和 $message 都在消息正文中?如果是这样,你需要这样的东西mail( "info@website.co.uk", "Message via your website!", "$name $services $message", "From: $email" );
  • php邮件函数在发送邮件后返回true或false。检查邮件功能返回什么???

标签: forms field php


【解决方案1】:

试试这个

<?php
  $email = $_POST['email'] ;
  $name = $_POST['name'] ;
  $services = $_POST['services'] ;
  $message = $_POST['message'] ;

  if (!isset($_POST['email'])) {
    header( "Location: feedback.html" );
  }
  elseif (empty($email) || empty($message)) {
     header( "Location: error.html" );
 }
  else {
    mail( "info@website.co.uk", "Message via your website!",
           $name . $services. $message .  "From: $email" );
    header( "Location: thankyou.html" );
  }
?>

【讨论】:

    【解决方案2】:

    根据mail() docs,消息正文应作为单个参数传递。所以它应该看起来更像:

    mail( "info@website.co.uk", "Message via your website!", "$name\r\n $services\r\n $message", "From: $email");
    

    【讨论】:

    • 您好,这可行,但是服务不是通过电子邮件发送的,您能看到什么原因吗?字段名称似乎都正确。
    • 需要进行一些调试。试试var_dump($_POST); 另外,为了整理它并帮助调试,您可以考虑在mail() 函数之外构建主体,例如$body = "$name\r\n$services\r\n$message"; 然后尝试 echo $body 看看它看起来像你期望的那样。
    【解决方案3】:

    您不能只是向mail() 添加越来越多的变量。只有一个参数指定了邮件的内容,也就是第三个参数,你可以在official documentation看到:

    bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
    

    如果您想在邮件中不仅仅包含$message,则需要将所有内容放入一个变量中以作为内容提供给函数。

    $content = $message;
    $content .= "\n" . $services;
    // etc...
    mail($to, $subject, $content);
    

    【讨论】:

      【解决方案4】:

      根据php.net正确使用mail()函数是:

      <?
      $headers  = 'MIME-Version: 1.0' . "\r\n";
      $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
      
      // Additional headers
      $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
      $headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
      $headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
      $headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";
      
      // Mail it
      mail($to, $subject, $message, $headers);
      ?>
      

      您正在尝试将附加数据 ($services) 作为标头发送。

      尝试合并您的$message$service >

      $message = $service . "\r\n\r\n" . $message;
       mail( "info@website.co.uk", "Message via your website!",
            $message, "From: $email" );
      

      【讨论】:

        猜你喜欢
        • 2013-07-17
        • 2014-05-25
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-16
        相关资源
        最近更新 更多