1

我意识到这个问题的标题被过度使用了,但我找不到我的问题的答案。这可能是因为我对 PHP 不太了解并且我不理解这个问题,或者因为我有一个不同的问题,但我想我会发布它,看看是否有人可以帮助我。

我为我所在城市的当地教堂开发了一个网站,并在我的计算机上制作了该网站,将其作为子目录放在我的网站上并进行了全部测试。效果很好。客户想要的一件事是有一个可以发送电子邮件的电子邮件表单。我做到了,一切都很好。

然后我把它上传到教堂服务器上,我觉得它也很好。但后来我们决定尝试使用电子邮件表单,但由于某种原因它不起作用。

我通过让用户使用单选按钮选择收件人(牧师、办公室经理等)来制作电子邮件表单,这将改变电子邮件表单的操作。我只是做了这样的事情:

if (recipent == "pastor") {
    document.forms[0].action = "../scripts/php/pastor_contact.php";
} else if (recipent == "pastoralAssist") {
    document.forms[0].action = "../scripts/php/pastoral_assist_contact.php";    
} else if (recipent == "famMinistry") {
    document.forms[0].action = "../scripts/php/sacra_assist_contact.php";   
} else if (recipent == "sacraAssist") {
    document.forms[0].action = "../scripts/php/fam_ministry_contact.php";   
}

我知道这不是最干净的,但效果很好。然后,php 文件看起来都与此非常相似(只是一封不同的电子邮件)”

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="From: $name \n Email: $email \n Phone Number: $phone \n Message: $message";
$recipient = "email@example.com";
$subject = $_POST['subject'];
$mailheader = "$subject \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("There seems to be an error with this form. Sorry about the inconveince. We are working to get this fixed.");
header('Location: ../../quickylinks/message_sent.html') ;
?>

简而言之,它的作用是从电子邮件表单中收集信息,将其作为电子邮件提交,然后将用户重定向到“已发送消息”页面。这适用于我的服务器,但不适用于他们的服务器,所以我相信这与他们的服务器有关。

您可以在此处查看他们的服务器信息,并在此处查看我的服务器信息。

当用户发送消息时,他们收到“此表单似乎有错误。很抱歉给您带来不便。我们正在努力解决此问题。 ”尽管代码相同,但电子邮件没有通过我的服务器,它在那里工作正常。

我最初的想法是他们的服务器上没有安装 PHP(很少见,但确实发生了)。但它是。所以我想也许它已经安装了,但是“邮件”功能被禁用了。所以我尝试了以下php代码:

<?php 
if (function_exists('mail')) { 
    echo 'mail() is available'; 
} else { 
    echo 'mail() has been disabled'; }
?>

它返回“mail() 可用”。

所以现在我被卡住了,我不知道问题可能出在哪里。正如我所说,我还不是很擅长 PHP,所以如果有人能给出详细的答案,我将非常感激!

太感谢了!

4

4 回答 4

1

服务器可能没有正确安装或配置邮件程序。要查看正在发生的事情并解决客户端服务器上的问题,您需要对其进行 root 访问,并且您可能需要ssh 连接到他们的服务器以检查 / 安装 / 配置什么是必要的

您应该做的第一件事是使用 ssh 登录到他们的服务器(如果它只是一个共享主机,则可能不适用),然后尝试 php cli 界面,然后尝试一些东西。

如果没有任何效果,您将需要尝试在他们的服务器上编辑php.ini文件,以告知 php 它应该使用什么程序来发送邮件。

如果这没有给您任何帮助,您将需要安装和配置邮件程序,因为它可能无法在他们的服务器上正常工作。

编辑:

乍一看,他们的服务器的sendmail_path根本没有任何价值。这可能意味着 php 不知道应该通过哪个程序发送邮件。

但是,您的设置显示您有sendmail_path设置 /usr/sbin/sendmail -t -i

所以在他们的服务器上编辑php.ini文件,sendmail_path(你需要知道他们服务器上 sendmail 程序的路径,显然)

于 2012-12-06T22:54:26.047 回答
0

您的生产服务器是一台 Windows 计算机

在新服务器上 mail() 确实可用但未配置。

为了能够从 php 发送电子邮件,您需要编辑 php.ini 以使用 smtp 服务器。

您的开发服务器(Linux 服务器)已正确配置。您的生产服务器是一台需要配置为发送电子邮件的 Windows 计算机(编辑 php.ini)。默认情况下,Windows 没有内置电子邮件服务器,因此您必须安装一个或使用您的 ISP 提供的一个。

于 2012-12-06T23:01:43.567 回答
0

我强烈建议您使用PHPMailer类而不是 mail() 函数。

您可以轻松配置 smtp 服务器(如您的客户端之一)并使用它来发送电子邮件。

查看 test_smtp_basic.php 示例以获取更多信息。

于 2012-12-06T23:03:18.987 回答
-1

从这里"You can see their server information here"您的服务器没有 sendmail 路径在此处输入图像描述

于 2012-12-06T23:02:47.530 回答