我在使用php mail()函数发送电子邮件时遇到问题。我知道我的PHP脚本有效,因为我在另一个网络托管公司有一个相同的副本,它在那里工作。
我认为这与网络托管公司本身有关。你们中的任何人都知道我需要做些什么才能让它发挥作用吗?我需要告诉他们安装吗?我认为他们正在使用Apache。
谢谢, 阿米特
为澄清起见,这是邮件脚本。
<?php
$to = 'my@email.com';
$subject = 'Contact from your website';
$message =
'Below are details from the Contact Us Form ' . "\n\n" .
'Name: ' . $_REQUEST['name'] . "\n\n" .
'Telephone Number: ' . $_REQUEST['phone'] . "\n\n" .
'E-mail address: ' . $_REQUEST['email'] . "\n\n" .
'Comments: ' . $_REQUEST['comments'];
$email = $_REQUEST['email'];
$headers = 'From: ' . $email . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$headers .= "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/plain; charset=ISO-8859-1";
//SPAM CHECK
$str = $_REQUEST['spam'];
$strE = $_REQUEST['email'];
if( $str != "10" || $strE == "")
{
echo "<div align='center' style='color:red'>One or more of the form fields were incorrect, you will be redirected to the contact page within 3 seconds.</div>";
?><meta http-equiv="refresh" content="3;URL=http://engineercreativity.com/samples/biz/contact"><!-- EDIT THIS -->
<?php
} else {
mail ($to, $subject, $message, $headers);
?>
<meta http-equiv="refresh" content="0;URL=http://engineercreativity.com/thankyou.html"> <!-- EDIT THIS AS WELL -->
<!--
<div class="text" align="center" style="text-align: center; color: green;">
<br/>
Thank you for contacting us!
<br/>
The message was succesfully sent!
</div>
-->
<?php
}
?>
答案 0 :(得分:2)
您是否对邮件功能进行了任何检查?如果它成功执行它应该返回true - 知道这将有助于我们减少您可能没有收到邮件的其他可能原因,例如过滤器,服务器或smtp配置等。做类似的事情:
if (mail($to, $subject, $body, $header)) {
echo("<p>Message successfully sent!</p>");
} else {
echo("<p>Message delivery failed...</p>");
}
应该给你一个更好的主意,如果由于某种原因该功能不存在,应该彻底死亡。 Php的邮件功能在免费的网络主机上非常挑剔,因为它通常被滥用于垃圾邮件目的。
发布完整标题也可以帮助合法邮件通过垃圾邮件测试。
$headers = "Return-path: <sendingemail@test.com>\n";
$headers .= "Reply-to: <sendingemail@test.com>"."\n";
$headers .= "Content-Type: text/html; charset=windows-1252\n";
$headers .= "Content-Transfer-Encoding: 7bit\n";
$headers .= "From: <sendingemail@test.com>\n";
$headers .= "X-Priority: 3\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Organization: My Organization\r\n";
$headers .= "\n\n";
答案 1 :(得分:2)
如果是专用服务器,请确保安装了postFix Mail(http://www.postfix.org/)
我今天遇到了这个错误,因为SMTP服务器不可用(我默认假设它,但不是)
答案 2 :(得分:1)
写一个非常简单的脚本,比如
<?php
mail('your_mail@example.com', 'test subject', 'test msg') or die('no mail()');
echo 'mail sent.';
执行它,并确保垃圾邮件过滤器没有捕获邮件(如果您负担得起,设置自己的域/ DNS服务器,netcat -l -p 25
就足够了。)
如果不起作用,请与您的网络托管服务商的支持人员联系。他们有常见问题或任何其他文件吗?
答案 3 :(得分:1)
无论解决方案是什么,请检查mail()的输出。
最常见的解决方案
询问您的托管公司当前的网络托管服务商是否设置了SMTP以从您的脚本中继邮件。如果他们说“不”,那么他们可能有另一个SMTP主机供您使用,如smtp.example.com,或者您必须使用另一个SMTP中继(请与您当前的电子邮件提供商联系)。
<强>替代强>
您正在与之交谈的SMTP服务器可能无法理解您的脚本所说的内容。我已经看到过我的邮件脚本可以使用Postfix而不是qmail的情况。使用第三方电子邮件库很容易解决这个问题:那里有很多,但我最喜欢的是Flourish(http://flourishlib.com/docs/fEmail)。
答案 4 :(得分:0)
为什么我们应该使用SMTP代替PHP mail():
SMTP 登录邮件服务器上的实际帐户,并通过SMTP将邮件发送到其他邮件服务器。如果邮件服务器配置正确,您的邮件将从邮件服务器上的实际帐户发送,并且不会被标记为垃圾邮件。
在大多数情况下,使用sendmail发送带有mail()函数的邮件。没有进行身份验证,如果您在额外标头中使用“发件人:”,它几乎总是被标记为垃圾邮件。
这是因为如果你看一下gmail中的原始电子邮件文件,你会看到发送的标题。您实际上是从user@serverhostname.tld发送的,而不是像您告诉邮件功能那样的someone@example.com。 如果您使用SMTP并查看原始邮件,则电子邮件实际上是从someone@example.com发送的
您可以从以下网址下载SMTP课程: