不接收来自PHP邮件()函数的电子邮件
我最近一直在通过创建网页并将它们发布到托管在我的覆盆子pi上的apache2服务器上,并使用no-ip.com地址发布它们,最近一直在学习HTML,js,CSS和PHP。我的第一个学习PHP的真正项目是创建一个简单的表单,然后发送一封邮件给我,但我一直在讨论mail()函数的执行问题,没有任何错误,但实际上并没有发送电子邮件。不接收来自PHP邮件()函数的电子邮件
下面的形式:
<form class="" action="/FormTesting/sendMail.php" method="post">
Name:<br><input type="text" name="name" value="" required><br>
Email:<br><input type="text" name="email" value="" required><br>
Message:<br><textarea name="message" rows="8" cols="80" required></textarea><br>
Subject:
<input type="radio" name="subject" value="Hello!">Hello!
<input type="radio" name="subject" value="Whats up">Whats Up!<br>
<input type="submit" name="submit" value="Submit">
</form>
下面是在窗体的“行动”属性的PHP文件引用:
<?php
if($_SERVER["REQUEST_METHOD"] == "POST") {
$to = "[email protected]";
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];
$subject = $_POST["subject"];
echo $name;
echo $email;
echo $message;
echo $subject;
$headers = array("From: " . $email,
"Reply-To: " . $to,
"X-Mailer: PHP/" . PHP_VERSION);
mail($to, $subject, $message, $header);
} else {
echo $_SERVER["REQUEST_METHOD"];
}
?>
据我所知,这个问题已经被问过,我有尝试了其他答案中列出的大多数方法,但我仍然无法使PHP mail()函数正常工作。我得到的最好的信息是,我必须在服务器上进行某种安装或格式化,以便发送电子邮件,但我还没有找到有据可查的文件和/或解释。 (即PHPMailer的 - 但仍...如何?)
编辑:
我检查了邮件功能的返回值。 。 。
if(mail("[email protected]", "subject", "message", $headers)) {
echo "TRUE";
}else {
echo "FALSE";
}
。 。 。事实证明它正在返回假。我认为这意味着它是我的代码中的错误,然后呢?
编辑:
显然,我并不清楚,当我说我发布这个问题之前做了研究。我尝试了所有的答案,作为我作为一个“重复”关闭的问题的答案,因此我问,无论如何这个问题。
我试了同样的脚本,并得到了电子邮件。但是,它进入了垃圾邮件文件夹。标题应该有更多的细节。您可以检查邮件函数返回码以确保函数成功。以下是最佳做法。
$boundary = "==MP_Bound_xyccr948x==";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
$headers .= "From: OrganizationName <[email protected]>\r\n";
$headers .= "Return-path: [email protected]\r\n";
$message = "This is a Multipart Message in MIME format\n";
$message .= "--$boundary\n";
$message .= "Content-Type: text/plain; charset=\"utf-8\"\n";
$message .= "Content-Transfer-Encoding: 7bit\n\n";
$message .= $user_entered_message . "\n";
$message .= "--$boundary--";
$mailsent = mail($to, $subject, $message, $headers, "[email protected]");
if ($mailsent)
{
confirmation_msg();
}
else
{
email_error_msg();
}
我多次检查了我的垃圾邮件文件夹,它从未出现过。在将额外的细节添加到标题之前和之后,它是否起作用?还是只是将它从垃圾邮件转移到常规的收件箱?还有什么是邮件()函数中的最后一个参数后,我从来没有见过它之前使用 –
有趣的是有人低估了我的答案,虽然我提供了明确的细节。好吧... @ZacharyElkins:我按照发布的方式运行代码,并将垃圾邮件保存在垃圾邮件文件夹中。邮件功能中的最后一个参数是如果您发送的电子邮件被退回,则会收到通知。 – alexa0417
您不检查mail()函数的返回值。这是最不应该的。 PHP手册中的每个函数都具有记录的返回值,了解返回值并处理它以执行最少的操作 - http://php.net/mail - 编辑您的问题并解释您期望的返回值以及返回值你得到的价值。如果邮件的回复是真实的,而你没有收到邮件,这就超出了PHP的范围。 – hakre
我检查了返回值。这是错误的,我不知道该怎么做。 –
这只是意味着发送电子邮件失败(直接)。让你的应用程序处理它,这是一个有效的返回值(它可能发生)。其余的是解决问题,但首先让你的代码与错误案例一起工作。例如。向用户显示发送电子邮件失败的消息。 – hakre