mail.php发送空白邮件,而不是从表单中捕获值

时间:2015-12-28 18:58:33

标签: php html forms email post

我在下面使用的Php代码,它发送空白电子邮件而不捕获值

<?php
$name       = $_POST['name']; 
$from       = $_POST['email']; 
$subject    = $_POST['subject']; 
$message    = $_POST['message']; 
$to         = 'test@gmail.com';//replace with your email

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

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

die;

1 个答案:

答案 0 :(得分:2)

编辑(在测试OP&#39;之后)

您的标题 - mail()参数失败了。

我注意到你借用了http://php.net/manual/en/function.mail.php

手册中的一个例子

这是您发布的代码:

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: Sender Name <sender@domain.com>";
$headers[] = "Bcc: JJ Chong <bcc@domain2.com>";
$headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
mail($to, $subject, $message, $headers);

但未能使用手册中示例中的implode()函数:

mail($to, $subject, $email, implode("\r\n", $headers));

如果您将错误报告设置为捕获并显示,您将看到以下内容:

  

警告:mail()期望参数4为字符串,在第x行的/path/to/file.php中给出的数组

因此,您需要将最后一行修改为:

mail($to, $subject, $message, implode("\r\n", $headers));

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

但是,我原来答案的其余部分也应该为您提供更多信息。

由于您没有向我们提供您的HTML表单,我提交了以下答案。

根据手册http://php.net/manual/en/tutorial.forms.php

示例#1简单的HTML表单

<form action="action.php" method="post">
 <p>Your name: <input type="text" name="name" /></p>
 <p>Your age: <input type="text" name="age" /></p>
 <p><input type="submit" /></p>
</form>

示例#2从表单打印数据

Hi <?php echo htmlspecialchars($_POST['name']); ?>.
You are <?php echo (int)$_POST['age']; ?> years old.

如果你的HTML表单(你没有在你的问题中包含)不使用POST方法,和/或输入不具有与POST数组相同的名称属性,那么这就是为什么你收到空白值,或者你的HTML表单和PHP在同一个文件中,并在初始页面加载时发送空白值的原因。

旁注:如果您的表单未明确使用POST方法,则表单默认为GET方法(如果省略),由于可能的未定义索引通知您,它可能导致失败的另一个原因可能没有看到您的系统上是否设置了error reporting并捕获并显示错误/通知/警告。

因此,您需要检查empty()&#39; ness。

即:

if(!empty($_POST['var'])) { $name = $_POST['name']; }并将该逻辑应用于其余的POST阵列。

还使用带有条件语句的命名提交按钮,其中包含可执行代码。

即:<input type="submit" name="submit" value="SUBMIT">

然后if(isset($_POST['submit'])) {...}

检查是否有任何输入填充/非空。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。