我已经使用了一段时间,我似乎无法使PHP mail()函数正常工作。我无法在下面的脚本中找到错误。这看起来很奇怪,但脚本 似乎 与特定域名合作(@ gmail.com - 收到电子邮件),(@ me.com和其他人 - 电子邮件不是收到)。这是代码 - 它所要做的就是获取表单并将数据发送到提供的电子邮件地址。任何见解都会非常感激 - 我不熟悉PHP,我不会称自己为程序员,我不会假装成为 - 我是设计师所以请温柔。这是我购买的模板......所以我没有写它......:S
<?php
//Retrieve form data.
//GET - user submitted data using AJAX
//POST - in case user does not support javascript, we'll use POST instead
$name = ($_GET['name']) ? $_GET['name'] : $_POST['name'];
$email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];
$message = ($_GET['message']) ?$_GET['message'] : $_POST['message'];
//flag to indicate which method it uses. If POST set it to 1
if ($_POST) $post=1;
//Simple server side validation for POST data, of course, you should validate the email
if (!$name) $errors[count($errors)] = 'Please enter your name.';
if (!$email) $errors[count($errors)] = 'Please enter your email.';
if (!$message) $errors[count($errors)] = 'Please enter your message.';
//if the errors array is empty, send the mail
if (!$errors) {
// ====== Your mail here ====== //
$to = 'Customers Name <customer@customerswebsite.com>';
//sender
$from = $name . ' <' . $email . '>';
//subject and the html message
$subject = 'Message from your website';
$message = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table>
<tr><td>Name:</td><td>' . $name . '</td></tr>
<tr><td>Email:</td><td>' . $email . '</td></tr>
<tr><td>Message:</td><td>' . nl2br($message) . '</td></tr>
</table>
</body>
</html>';
//send the mail
$result = sendmail($to, $subject, $message, $from);
//if POST was used, display the message straight away
if ($_POST) {
if ($result) echo 'Thank you! We have received your message.';
else echo 'Sorry, unexpected error. Please try again later';
//else if GET was used, return the boolean value so that
//ajax script can react accordingly
//1 means success, 0 means failed
} else {
echo $result;
}
//if the errors array has values
} else {}
//Simple mail function with HTML header
function sendmail($to, $subject, $message, $from) {
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: ' . $from . "\r\n";
$result = mail($to,$subject,$message,$headers);
if ($result) return 1;
else return 0;
}
?>
答案 0 :(得分:2)
虽然这可能是一个IT错误,但您可以尝试使用代码尝试通过服务器获取电子邮件SMTP。
需要注意的与IT相关的事项:
根据我的经验,最好的方法是研究标题并确定您尝试定位的服务器或服务及其策略。通常,路由器在弹出您的电子邮件时不会给您反馈。有时它是由于消息的内容,有时是由于消息的构造方式(不正确的MIME类型)。
虽然大多数PHP mail()应用程序电子邮件都会通过许多防火墙,路由器和反垃圾邮件客户端,但您可能需要使用套接字和SMTP来制作邮件。在开始编写自己的设置之前,请查看mail()
中的设置。 一旦你沿着这条路走下去,如果你不熟悉套接字和标题就会非常耗时。 Another question relating to configuring login parameters to use a real email account.这样你实际上可以收到反弹如果它们存在则支持。
还考虑强制您的PHP脚本登录到真正的MTA并使用用户名和密码进行发送。 This question may be helpful.这样,如果有人不喜欢您的网络服务器上发来的电子邮件,那么您就不会将您的IP列入清单或列入黑名单。
这是send email through an MTA using Pear的另一种方式。
这真的要归结为你试图定位的服务器的实际连接,而不是黑名单。