PHP邮件不发送邮件

时间:2012-12-06 22:44:00

标签: webserver php

我意识到这个问题标题已被过度使用,但我无法找到问题的答案。这可能是因为我对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') ;
?>

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

您可以看到他们的服务器信息here和我的here

当用户发送消息时,他们会收到“这个表单似乎有错误。抱歉,我们正在努力解决此问题。”并且电子邮件没有通过,虽然我的服务器上的代码是相同的,它在那里工作正常。

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

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

它回来时“mail()可用”。

所以现在我被卡住了,我不知道问题可能是什么。正如我所说,我对PHP不是很擅长,所以如果有人能给出详细的答案,我真的很感激!

非常感谢你!

4 个答案:

答案 0 :(得分:1)

服务器可能没有安装或配置正确的邮件程序。 要查看正在发生的事情并在客户端服务器上修复该问题,您将需要root访问权限,并且您可能需要 ssh连接到他们的服务器以检查/安装/配置必要的内容

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

如果无效,您需要尝试在其服务器上编辑 php.ini 文件,以告知php应该使用哪个程序进行邮寄。

如果它没有给你任何东西,你需要安装&amp;配置邮件程序,因为它可能无法在他们的服务器上正常工作。

修改

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

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-1)

从此"You can see their server information here"您的服务器没有sendmail路径enter image description here