我刚从DreamTemplate.com购买了一个网站模板,并尝试在线发送测试电子邮件,而不是发送电子邮件,只是出现了红色文字:“错误!”。< / p>
我对PHP不太熟悉,但我能理解语法。代码如下:
<小时/> Contact.html
<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(function () {
$('#contactform').submit(function () {
var action = $(this).attr('action');
$.post(action, {
name: $('#name').val(),
email: $('#email').val(),
company: $('#company').val(),
subject: $('#subject').val(),
message: $('#message').val()
}, function (data) {
$('#contactform #submit').attr('disabled', '');
$('.response').remove();
$('#contactform').before('<p class="response">' + data + '</p>');
$('.response').slideDown();
if (data == 'Message sent!') $('#contactform').slideUp();
});
return false;
});
});
// ]]>
</script>
<小时/> Contact.PHP
<?php
if(!$_POST) exit;
$email = $_POST['email'];
//$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS';
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){
$error.="You've entered an invalid e-mail address.";
$errors=1;
}
if($errors==1) echo $error;
else{
$values = array ('name','email','message');
$required = array('name','email','message');
$your_email = "enquiries@ourdomain.com";
$email_subject = "New Message: ".$_POST['subject'];
$email_content = "new message:\n";
foreach($values as $key => $value){
if(in_array($value,$required)){
if ($key != 'subject' && $key != 'company') {
if( empty($_POST[$value]) ) { echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; }
}
$email_content .= $value.': '.$_POST[$value]."\n";
}
}
if(@mail($your_email,$email_subject,$email_content)) {
echo 'Message sent!';
} else {
echo 'ERROR!';
}
}
?>
有人可以帮忙吗?我不知道为什么这不起作用。任何帮助都非常感谢。
谢谢
<小时/> 更新的 据我所知,我在'mail'之前删除了@符号。它现在显示有用的错误消息:
“警告:mail()[function.mail]:无法连接到”localhost“端口25的邮件服务器,验证php.ini中的”SMTP“和”smtp_port“设置,或者在E:\中使用ini_set()第31行的web \ autoopti \ contact.php 错误!“
答案 0 :(得分:1)
您的代码无法发送电子邮件。您需要调试它所获得的信息,以便您有机会弄清楚发生了什么。
首先,在邮件(...)之前删除'@'。 '@'抑制(缓慢)mail()函数吐出的任何错误,这意味着您无法获得修复它所需的信息。理想情况下,如果该函数获得正确形成的数据,则不会出现错误。在这种情况下可能发生的最糟糕的情况是提供的电子邮件地址格式不正确。
然后,我开始调试传入的数据。使用echo()函数打印$ your_email,$ email_subject和$ email_content的值,以确保它们正确形成。 echo()函数用作:
echo($your_email);
echo($email_subject);
echo($email_content);
你明白了。
如果这没有用,或者如果删除'@'会给你一些乐趣,请回复错误输出。这将有助于我们为您提供更多帮助。
答案 1 :(得分:1)
根据OP的编辑发布另一个答案。
您是在本地计算机上运行还是在其他Windows服务器上运行?您需要在要尝试执行mail()的计算机上运行SMTP服务器。有关设置SMTP服务器的基本说明,请参阅以下文章:One Two,或Google有答案。
快速解释SMTP服务器的用途和用途:它是邮件中继者。 SMTP服务器实现消息传递协议以将电子邮件路由到其适当的目的地。
编辑:如果您想首先深入PHP,并且不想打扰设置本地SMTP服务器,可以使用PHPMailer来使用您的ISP或其他远程服务器SMTP服务器,已经为您配置了它。那里有大量的示例代码。
希望有所帮助!
答案 2 :(得分:1)
我有相同的代码,并且它在linux主机上运行良好,由hostmonster毫无困难地转移到web.com,并且让我感到沮丧。我会说,如果关闭基于Windows的服务器,你就不会有问题
答案 3 :(得分:0)
根据错误,看起来你的smtp服务器的php.ini配置是错误的。
您可以尝试运行一个简单的PHP脚本来测试它:
<?php
mail("your_email", "Test", "test message")
?>
这消除了对传递给您的邮件功能的数据的任何疑问。
现在,除此之外,您的代码中还有一些怪癖:
看看你的jQuery,我可以看到你通过“val()”得到消息。如果我记得正确的话,这对TextArea不起作用,所以如果你使用文本区域来获取消息可能会有问题。
在PHP代码中,我怀疑这部分没有按照你期望的方式工作:
$values = array ('name','email','message');
...
foreach($values as $key => $value){
if(in_array($value,$required)){
if ($key != 'subject' && $key != 'company') {
...
您的数组未指定任何键,因此在内部,您的数组如下所示:
[0]=>name;
[1]=>email...
所以你最终得到if ( 0 != 'subject' && 0 != 'company') {...
然而,该测试实际上是无用的,因为前一行已确保您的值在所需的数组中,并且由于“subject”和“company”不在所需的数组中,因此该行永远不会为真。 / p>
目前,您的contact.php不使用jQuery发送的数据。我认为这是故意的,因为你只是在测试,对吗?
另一个问题是您根本不验证数据。您的表单可用于使用您的帐户在整个地方发送垃圾邮件。那是因为你的功能还处于测试阶段吗?