0

嗨,我的网站上有简单的电子邮件联系表,该表单有效,包括成功发送消息,但是,我没有收到指定网络邮件服务器的电子邮件。我正在运行最新的 PHP。是否某些 Web 服务器缓存邮件,或者此代码中是否存在一些错误,我没有看到。

<?php

$EmailFrom = "email@mydomain.com";
$EmailTo = "email@mydomain.com";
$Subject = "Contacting Me";
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}

// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\n";

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=index\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>

<div id="contact-area">

            <form method="post" action="contactengine.php">
                <label for="Name">Name:</label>
                <input type="text" name="Name" id="Name" />

                <label for="Email">Email:</label>
                <input type="text" name="Email" id="Email" />

                <label for="Message">Thought:</label><br />
                <textarea name="Message" rows="20" cols="20" id="Message"></textarea>

                <input type="submit" name="submit" value="Transmit" class="submit-button" />
            </form>

            <div style="clear: both;"></div></div>
4

3 回答 3

2

发送邮件比只运行 mail() 命令更复杂,您需要查看电子邮件配置的php.ini设置并从那里继续进行故障排除。

如果您在未配置 mail() 函数运行的主机上运行,​​您可以尝试使用以下开源邮件程序:

PHPMailer

您可以尝试使用提供的示例并从您家中连接的本地开发堆栈(XAMPP、MAMP、WAMP)运行,如果配置正确,您应该能够接收邮件。

正常后,你可以在服务器上试一下,应该也可以发送,如果不行,请检查发送邮件的出端口是否被阻塞。

除了使用 PHPMailer,您还可以寻找一个简单的 PHP 邮件程序并尝试一下。

于 2013-09-01T01:28:46.823 回答
1

请勿使用print "<meta http-equiv=\"refresh\"...,因为在测试期间,它会在发送同一电子邮件的多个副本时导致死循环。

header('Location: ...');与 .一起使用exit;

另外,你所有的<meta http-equiv=\"refresh\"人都产生了一个解析错误。

工作示例(测试成功收到电子邮件):

<?php

$EmailFrom = "email@mydomain.com";
$EmailTo = "email@mydomain.com";
$Subject = "Contacting Me";
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation
$validationOK=true;
if (!$validationOK) {

// echo "error 1";

header('Location: error.htm');

exit;
}

// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\n";

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){

header('Location: http://www.example.com/');

exit;

}
else{

header('Location: error.htm');

exit;

}
?>
于 2013-09-01T02:27:16.493 回答
0

我认为它的邮件功能标题问题。

http://php.net/manual/en/function.mail.php

http://php.net/manual/en/function.mail.php

于 2013-09-01T02:29:05.557 回答