1

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

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

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

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

4 回答 4

3

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

mail( "info@website.co.uk", "Message via your website!", "$name\r\n $services\r\n $message", "From: $email");
于 2013-03-13T10:26:00.483 回答
1

根据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-03-13T10:29:57.280 回答
0

您不能只是将越来越多的变量添加到mail(). 只有一个参数指定电子邮件的内容,也就是第三个参数,您可以在官方文档中看到:

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);
于 2013-03-13T10:26:08.430 回答
-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" );
  }
?>
于 2013-03-13T10:23:52.253 回答