0

这是我第一次使用邮件功能。我尝试使用它发送邮件,代码告诉我它“已成功发送”,但我没有收到任何邮件。我很困惑阅读很多关于此的文章。请帮我。

<?php
  if(isset($_POST['author'])&& isset($_POST['subject'])&& isset($_POST['text'])) {
    //Email
    $email_to = "lucy@yahoo.com";
    $email_subject = "Query From HYPERMARKETS";
    $name = $_POST['author']; // required
    $sub = $_POST['subject']; // required
    $comments = $_POST['text']; // required

    echo "POST:".$name.$sub.$comments;
    $error_message = "";

    $string_exp = "^[a-z .'-]+$";
    if(!strcmp($string_exp,$name)) {
      $error_message .= 'The Name you entered does not appear to be valid.<br />';
    }

    if(strlen($comments) < 5) {
      $error_message .= 'The Comments you entered do not appear to be valid.<br />';
    }

    if(strlen($error_message) > 0) {
      echo ("<center><table border=1 cellspacing=5 cellpadding=5><tr><th>$error_message</th></tr></table></center>");
    }
    $email_message = "Form details below.\n\n";
    $email_message .= "Name: ".$name."\n";
    $email_message .= "Subject: ".$sub."\n";
    $email_message .= "Comments: ".$comments."\n";


    // create email headers
    $headers = "From: mary@yahoo.com \r\n Reply-To: mary@yahoo.com \r\n" ;
    if(@mail($email_to, $email_subject, $email_message, $headers))
      echo "<center><table border=1 cellspacing=5 cellpadding=5><tr><th>MESSAGE SENT SUCCESSFULLY</th></tr></table></center>";
    else
      echo "<center><table border=1 cellspacing=5 cellpadding=5><tr><th>MESSAGE NOT SENT</th></tr></table></center>";
  }
  else
    echo ("<center><table border=1 cellspacing=5 cellpadding=5><tr><th>FILL ALL THE FIELDS..!!</th></tr></table></center>");
?>

嘿,我已将我的 php.ini 文件配置为

[mail function]

   sendmail_from = postmaster@localhost
   SMTP = localhost
   smtp_port = 25
   sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
   sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

它仍然不起作用。

4

5 回答 5

4

mail() 实际上并不发送邮件。它只是将您生成的消息提交给主机系统的邮件子系统来处理发送。true 结果表明邮件发送子系统接受该消息为有效。它并不表示消息已发送。

您需要查看您的邮件假脱机以查看邮件是否在那里等待发送,并查看系统的邮件日志以查看它在尝试发送您的 PHP 生成的邮件时是否生成错误。

即使消息发送成功,也不代表一定会收到。它可能被垃圾邮件过滤器捕获,或被服务器拒绝,或者只是简单地发送到错误的地址。它可能已被发送并最终被收件人的电子邮件客户端标记为垃圾邮件。任何数量的事情都可以阻止消息被发送,来自邮件的真实响应并不表明它已成功发送。

于 2012-10-24T06:40:02.870 回答
3

披露:我是 AlphaMail 背后的开发者之一

由于您没有错误可继续,因此要说出这里的问题并不容易。因此,我建议手动尝试从您的服务器连接到 SMTP 服务器并手动发送电子邮件。这样,您将掌握错误而不是事后猜测。

如果您不想这样做,只想让它“工作”,我建议您使用事务性电子邮件服务,例如:

为什么?

  • 您不必过多考虑电子邮件传递。
  • 统计数据。让您跟踪总发送/点击/打开/退回。
  • 通常基于 Web 服务而不是 SMTP。即更容易处理。
  • 更简洁的代码(至少如果您使用 AlphaMail 将数据与表示分离)。
  • 可扩展且面向未来。

如果您选择使用 AlphaMail,您可以使用AlphaMail PHP-client

例子:

include_once("comfirm.alphamail.client/emailservice.class.php");

$email_service = AlphaMailEmailService::create()
    ->setServiceUrl("http://api.amail.io/v1")
    ->setApiToken("YOUR-ACCOUNT-API-TOKEN-HERE");

$person = new stdClass();
$person->userId = "1234";
$person->firstName = "John";
$person->lastName = "Doe";
$person->dateOfBirth = 1975;

$response = $email_service->queue(EmailMessagePayload::create()
    ->setProjectId(12345) // Your AlphaMail project (determines template, options, etc)
    ->setSender(new EmailContact("Sender Company Name", "from@example.com"))
    ->setReceiver(new EmailContact("Joe Doe", "to@example.org"))
    ->setBodyObject($person) // Any serializable object
);

AlphaMail 的另一个优点是您可以直接在AlphaMail Dashboard中编辑您的模板,并且您可以使用Comlang 模板语言来格式化您的电子邮件。

<html>
    <body>
        <b>Name:</b> <# payload.firstName " " payload.lastName #><br>
        <b>Date of Birth:</b> <# payload.dateOfBirth #><br>

        <# if (payload.userId != null) { #>
            <a href="/sign-up">Sign Up Free!</a>
        <# } else { #>
            <a href="/login?id=<# payload.userId #>">Sign In</a>
        <# } #>
    </body>
</html>
于 2012-11-11T13:17:44.437 回答
1

你曾经在这个服务器上发送过邮件吗?如果不:

您必须mail function在 php.ini 中配置部分。

首先,您必须支持发送和接收电子邮件的 SMTP。其次,您必须在 php.ini 文件中配置SMTP和值。smtp_port

于 2012-10-24T06:40:28.253 回答
0

某些主机需要邮件的额外参数。可能就是这样。

    $ffrom = '-fmary@yahoo.com';
    if(@mail($email_to, $email_subject, $email_message, $headers, $ffrom));

这不是很常见,但我不得不处理它,而且我花了很长时间才诊断出来,所以我想我会分享它以防万一。

于 2013-09-09T12:18:06.683 回答
0

首先,我会确保端口 25 是开放的。通过连接到WhatsMyIP.org (从服务器使用的同一 Internet 连接)确定服务器的公共 IP 地址,然后从命令行尝试以下操作:

telnet xxx.xxx.xxx.xxx 25

(将 xxx.xxx.xxx.xxx 替换为 WhatsMyIP.org 的 IP)

如果您可以连接,那么此答案不适合您。对不起。

如果没有,请检查所有本地防火墙设置,以确保端口 25 在您端打开。端口 25 也可能被 ISP 阻止。事实证明,一些(也许是大多数)ISP 默认会阻止端口 25 以防止垃圾邮件。

配置错误的电子邮件服务器很容易被入侵并用于垃圾邮件僵尸网络。我不得不打电话给 Comcast 并跳过障碍让他们解除对 25 端口的阻塞,然后我才能让我的家庭电子邮件服务器正常工作。(关于端口 25 的康卡斯特论坛帖子)。

如果那不能让您继续前进,我会再看一下电子邮件服务器配置。

于 2016-04-14T19:51:32.940 回答