2017-07-02 159 views
-1

我最近一直在通过创建网页并将它们发布到托管在我的覆盆子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"; 
    } 

。 。 。事实证明它正在返回假。我认为这意味着它是我的代码中的错误,然后呢?

编辑:

显然,我并不清楚,当我说我发布这个问题之前做了研究。我尝试了所有的答案,作为我作为一个“重复”关闭的问题的答案,因此我问,无论如何这个问题。

+0

您不检查mail()函数的返回值。这是最不应该的。 PHP手册中的每个函数都具有记录的返回值,了解返回值并处理它以执行最少的操作 - http://php.net/mail - 编辑您的问题并解释您期望的返回值以及返回值你得到的价值。如果邮件的回复是真实的,而你没有收到邮件,这就超出了PHP的范围。 – hakre

+0

我检查了返回值。这是错误的,我不知道该怎么做。 –

+0

这只是意味着发送电子邮件失败(直接)。让你的应用程序处理它,这是一个有效的返回值(它可能发生)。其余的是解决问题,但首先让你的代码与错误案例一起工作。例如。向用户显示发送电子邮件失败的消息。 – hakre

回答

-2

我试了同样的脚本,并得到了电子邮件。但是,它进入了垃圾邮件文件夹。标题应该有更多的细节。您可以检查邮件函数返回码以确保函数成功。以下是最佳做法。

  $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(); 
     } 
+0

我多次检查了我的垃圾邮件文件夹,它从未出现过。在将额外的细节添加到标题之前和之后,它是否起作用?还是只是将它从垃圾邮件转移到常规的收件箱?还有什么是邮件()函数中的最后一个参数后,我从来没有见过它之前使用 –

+0

有趣的是有人低估了我的答案,虽然我提供了明确的细节。好吧... @ZacharyElkins:我按照发布的方式运行代码,并将垃圾邮件保存在垃圾邮件文件夹中。邮件功能中的最后一个参数是如果您发送的电子邮件被退回,则会收到通知。 – alexa0417

相关问题