我刚开始为一家新公司工作,之前的员工使用PHP开发了他们的网站。我不确定他的正确/错误。我知道大量的HTML& CSS,可以理解一点关于PHP,但并不多。但我正在努力学习W3学校:)
我的网站上有联系表格,但是每当我点击提交时,我都没有收到任何电子邮件地址,尽管它确实已经提交了。
提前感谢您的帮助!
以下是代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Anchor Technology | Services</title>
<?php include('includes/head.php'); ?>
<style type="text/css">#maintext .error h2 {color: red;</style>
</head>
<body>
<div id="maincontainer">
<?php include('includes/header.php'); ?>
<?php include('includes/navigation.php'); ?>
<div class="shadow">
<div id="maintext">
<h2>Help!</h2>
<!--Form options start here-->
<!--Small Form Here-->
<h2><strong>Existing Client Form</strong></h2>
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
$form_block = "
<p>Required fileds are marked with an asterick (*) </p>
<form action=\"$_SERVER[php_self]\"method=\"POST\">
<P>*Company Name:</p>
<input size=40 name=\"name\" value=\"$_POST[name]\"><br /> <br />
<p>*Contact Name:</p>
<input size=40 name=\"ctname\" value=\"$_POST[ctname]\"><br /><br />
<P>*Request Title:</p>
<input size=40 name=\"title\" value=\"$_POST[title]\"><br /><br />
<P>Description:</p>
<textarea cols=\"60\"rows=\"10\"name=\"description\">$_POST[description]</textarea><br /><br />
<P>Computer Name:</p>
<input size=20 name=\"cpname\" value=\"$_POST[cpname]\"><br /><br />
<p>User Name:</p>
<input size=40 name=\"uname\" value=\"$_POST[uname]\"><br /><br />
<P>Priority Level</p>
<select name=\"level\">
<option value=\"High\">High</option>
<option value=\"Medium\">Medium</option>
<option value-\"Low\" selected=\"default\">Low</option>
</select><br /><br />
<input type=\"hidden\" name=\"op\" value=\"ds\">
<input type=\"submit\" name=\"submit\" value=\"Submit\">
</form>";
if ($_POST[op] != "ds") {
//need to see form
echo "$form_block";
//check required fields
} else if ($_POST[op] == "ds") {
If (($_POST[name] == "") || ($_POST[ctname] == "") || ($_POST[title] == "")) {
$msg_err = "<div class=\"error\"<h2> <strong>Please fill in all required fields</strong></h2></div>";
$send = "no";
}
if ($send != "no") {
//it's ok to send
// create msg variable containing the message that will be sent to the email recipient
$msg .= "Company Name: $_POST[name]\n ";
// continue to concatenate the variable adding new pieces of information submitted
$msg .= "Company Name: $_POST[name]\n ";
$msg .= "Contact Name: $_POST[ctname]\n ";
$msg .= "Request Title: $_POST[title]\n ";
$msg .="Description:$_POST[description]\n";
$msg .= "Computer Name: $_POST[cpname]\n ";
$msg .= "User Name: $_POST[uname]\n ";
$msg .= "Priority Level: $_POST[level]\n ";
//Create variables to be used in the php Mail Function
$recipient = "help@anchortechnology.com";
$subject = "Help request from $_POST[name]";
$mailheaders = "From: $_POST[ctname] \n";
$mailheaders .= "Reply-To: $_POST[ctname]";
//send mail form
//Use mail Function to Send
mail($recipient, $subject, $msg, $mailheaders);
// show confirmation message
// echo statements will be shown when script executes
echo "<p>Thank you, $_POST[name]!</p>";
echo "<p>Your message was sent!</p>";
echo "<a href=\"../index.php\">Return Home</a>";
} else if ($send == "no") {
//print error messages
echo "$msg_err";
echo "$form_block";
}
}
?>
<br /><br />
</div>
</div>
<div class="shadow">
<div id="footer">
<?php include('includes/footer.php'); ?>
</div>
</div>
</div>
</body>
</html>
答案 0 :(得分:2)
首先,缩小问题范围。你能从PHP发送任何邮件吗?尝试使用简单的mail()测试脚本发送简单的消息。
如果可行,则在调用mail之前通过回显或var_dump()变量来检查代码的mail($recipient, $subject, $msg, $mailheaders);
部分。
一个问题是PHP mail()基于成功返回布尔值true或false,但是发布的脚本完全忽略了这一点,并假设它没有问题。这不会导致电子邮件不发送,但它会导致脚本报告它发送正常,即使mail()函数告诉你它不起作用。遗憾的是,这在文档本身中从未得到解决,所有示例都显示邮件而不试图检查成功。
部分原因是因为mail()没有提供任何类型的有用错误消息,所以它通常只是工作或不工作 - 如果函数返回true,它并不意味着它真的有效。对于“关键任务”电子邮件,请不要单独使用mail()来确保您收到重要邮件或捕获重要数据。
但是,这是找出问题的开始。首先确保正确的PHP mail()功能,然后从那里开始。
答案 1 :(得分:0)
好的,我从朋友那里找到了主要问题。
我们正在使用IX Webhosting并拥有一个Linux和一个Microsoft服务器,每个服务器都托管一些网站。 PHP网站被托管在微软的盒子上,据我所知,它不是设置为运行PHP,而是Linux。
将其切换,不再有问题。
感谢大家的帮助!