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


mail.php is sending blank mails, not capturing the values from form

我在下面使用的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;

编辑:(测试OP代码后)

您的headers-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));

错误报告添加到文件顶部,这将有助于查找错误。

<?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方法(如果省略),这是它失败的另一个可能原因,因为可能存在未定义的索引通知,如果您的系统上没有设置错误报告,则您可能看不到错误报告,并捕获和显示错误/通知/警告。

因此,您需要检查empty()'ness。

  • http://php.net/manual/en/function.empty.php

即:

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

还使用一个带条件语句的命名提交按钮来包装可执行代码。

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

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

同时检查输入中的任何一个是否为空。

错误报告添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code

旁注:显示错误只能在暂存中进行,而不能在生产中进行。