初学者PHP邮件功能问题+服务器错误


Beginner PHP Mail Function Issue + Server Error

我是PHP的超级初学者,但我目前正在建立我的第一个网站,我想在网站上有一个联系表单,用户可以填写,然后将他们的信息发送到电子邮件。

所以我使用"mail()"函数来编写PHP,但是由于某些原因,每当用户点击提交时,它就会转到上面有代码的页面,而不是我在echo语句中链接到的页面。

这是我的PHP:

<?php 
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="From: $name 'n Phone: $phone 'n Message: $message";
$recipient = "rowan.krishnan@tufts.edu";
$subject = "Contact Form";
$mailheader = "From: $email 'r'n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
$url = 'contact.html';
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">'  
?>
这是我的html:
<div id="emailform">
   <form action="mail.php" method="POST">
       Name: <input type="text" name="name">
       Email: <input type="text" name="email">
       Phone: <input type="text" name="phone">
       Message: <textarea name="message" rows="6" cols="25"></textarea><br />
       <input type="submit" value="Send"><input type="reset" value="Clear">
   </form>
</div>

我的最后一个问题与我使用的web服务器/主机(hostgator)有关。出于某种原因,每当我上传任何包含PHP的文档时,我都会得到500内部服务器错误,我不确定那里发生了什么。如果你们当中有人知道我在说什么,如果你们能给点建议就太好了。

非常感谢你的阅读和帮助。

您在echo的末尾缺少;,这很可能导致白页

 echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
                                                           ^

试着检查你的错误日志,看看你得到了什么错误,并试着打开错误提示

消息的每一行也需要有'r'n

$formcontent="From: $name 'r'n Phone: $phone 'r'n Message: $message";

你不能在本地运行php,你需要首先运行一个安装了php的web服务器。尝试xamp,因为它非常容易安装和使用,并且允许您在本地运行php。http://www.apachefriends.org/en/xampp.html

生成变量后,一个简单的php电子邮件脚本将如下所示:(你似乎是对的)

//Generate the email
$headers .= "MIME-Version: 1.0'r'n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1'r'n";
$headers .= 'From: '. $senders_email;
mail($to, $subject, $message, $headers);

如Kai Qing所说,使用header('location: contact.html');来重定向页面。Echo只是打印屏幕,无论你发送给它什么。更好的方法是在html文档中使用回调函数。因此,您将使用javascript函数发送表单,例如,一旦收到响应(您的电子邮件发送),回调函数将执行您喜欢的操作,例如显示不同的页面或打印确认消息。

一个jQuery方法看起来像这样

//send form to order.php for further processing
var formData = $('#promo-form').serialize();
$.post('order.php',formData,formSent);
//formSent is the callback funciton

你的服务器500错误可能是由于权限设置在你的php文件。在ftp客户端中,检查php文件的权限是否设置为0644。有关此错误的更多信息可在以下位置找到:

  • http://www.cyberciti.biz/tips/http -错误- 500内部服务器- - php页面-和- solution.html
  • CodeIgniter出现500错误
  • http://x10hosting.com/forums/scripts -第三方应用程序- programming/166905 phpmail -我- smtp服务器- 500错误——文件——permissions.html
  • https://www.bitrixsoft.com/support/training/course/?COURSE_ID=12& LESSON_ID = 447

试一试:

<?php
//
///////////////////////////////////////////////////////////////////////
//  This would be your mail.php file
///////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////
//  Lets Just Check Basic PHP Installation Is Working
///////////////////////////////////////////////////////////////////////
//
if (!function_exists('mail')) {
    die('mail() is not available');
}
//
//
//
///////////////////////////////////////////////////////////////////////
//  Validate Required Passed Fields 
///////////////////////////////////////////////////////////////////////
//
if ( isset($_POST['name']) && $_POST['name'] !='' && isset($_POST['email']) && $_POST['email'] !='' && isset($_POST['phone']) && $_POST['phone'] !='' && isset($_POST['message']) && $_POST['message'] !='' ) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
}
else
{
    die('Sadly you did not complete all of the fields on our contact form');
}
//
//
///////////////////////////////////////////////////////////////////////
//  Validate The Email... This Is Just An Example
///////////////////////////////////////////////////////////////////////
//
if (preg_match('/^[-!#$%&''*+''.'/0-9=?A-Z^_`{|}~]+@([-0-9A-Z]+'.)+([0-9A-Z]){2,4}$/i', trim($email))) {
    die('Email Address Invalid. Please Check Your Email.');
}
//
//
///////////////////////////////////////////////////////////////////////
//  Build Your Email Message
///////////////////////////////////////////////////////////////////////
//
$EmailMessage .= "Name: " . $name . " 'n'n";
$EmailMessage .= "Email: " . $email . " 'n'n";
$EmailMessage .= "Phone: " . $phone . " 'n'n";
$EmailMessage .= "Message: " . $message . " 'n'n";
//
//
///////////////////////////////////////////////////////////////////////
//  Build Email Header
///////////////////////////////////////////////////////////////////////
//
$EmailHeader .= "From: " . $name . " <" . $email . "> 'n";
$EmailHeader .= "Reply-To: " . $name . " <" . $email . "> 'n";
$EmailHeader .= "Return-Path: " . $name . " <" . $email . "> 'n"; // running a windows server??
//
//
///////////////////////////////////////////////////////////////////////
//  Send The Email & Confirm It Processed
///////////////////////////////////////////////////////////////////////
//
if (mail('Rowan Krishnan <rowan.krishnan@tufts.edu>', 'Contact Form', $EmailMessage, $EmailHeader)) {
    //
    // it appears to have worked, so redirect somewhere else
    //
    header("Location: contact.php");
    die('Contact Form Redirect');
} else {
    echo('Contact Form Failed');
}
?>