1

我在使用 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
} 
?> 
4

5 回答 5

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";
于 2010-07-16T15:15:49.153 回答
2

如果是专用服务器,请确保您已安装 postFix Mail ( http://www.postfix.org/ )

我今天本身就遇到了这个错误,因为 SMTP 服务器不可用(我默认它在那里,但不是)

于 2010-07-16T19:31:32.910 回答
1

写一个非常简单的脚本,比如

<?php
mail('your_mail@example.com', 'test subject', 'test msg') or die('no mail()');
echo 'mail sent.';

执行它,并确保邮件没有被您的垃圾邮件过滤器捕获(如果您负担得起,设置您自己的域/DNS 服务器netcat -l -p 25就足够了)。

如果这不起作用,请联系您的网络托管服务商的支持。他们有常见问题解答或任何其他文档吗?

于 2010-07-16T15:17:00.290 回答
1

无论解决方案如何,请检查您的 mail() 的输出。

最常见的解决方案

询问您的托管公司您当前的网络主机是否设置了 SMTP 以中继来自您的脚本的邮件。如果他们说“不”,那么他们可能有另一个 SMTP 主机供您使用,例如 smtp.example.com,或者您必须使用另一个 SMTP 中继(请咨询您当前的电子邮件提供商)。

选择

您正在与之交谈的 SMTP 服务器可能不理解您的脚本在说什么。我以前见过我的邮件脚本可以使用 Postfix 而不是 qmail 的情况。这可以通过使用第三方电子邮件库轻松解决:那里有很多,但我最喜欢的是 Flourish(http://flourishlib.com/docs/fEmail)。

于 2010-07-16T15:26:32.623 回答
0

php 的 mail() 函数,只会将您的邮件发送到垃圾邮件。而是使用 SMTP php 邮件功能。

为什么我们应该使用 SMTP 而不是 PHP mail():

SMTP登录到邮件服务器上的实际帐户,然后通过 SMTP 将邮件发送到另一个邮件服务器。如果邮件服务器配置正确,您的邮件将从邮件服务器上的实际帐户发送,并且不会被标记为垃圾邮件。

在大多数情况下,使用 mail() 函数发送的邮件是使用 sendmail 发送的没有进行身份验证,如果您在额外的标头中使用“发件人:”,它几乎总是会被标记为垃圾邮件。

这是因为如果您查看 gmail 中的原始电子邮件文件,您将看到已发送的标头。您实际上是从 user@serverhostname.tld 发送,而不是像您告诉邮件功能那样从某人@example.com 发送。如果您使用 SMTP 并查看原始邮件,则电子邮件实际上是从某人@example.com 发送的

您可以从以下位置下载 SMTP 类:

  1. https://code.google.com/a/apache-extras.org/p/phpmailer/source/browse/trunk/class.smtp.php?r=170
  2. http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html
于 2013-11-19T09:32:26.727 回答