【问题标题】:@mail not sending mail in php@mail 不在 php 中发送邮件
【发布时间】:2012-10-24 06:36:51
【问题描述】:

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

<?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"

还是不行。

【问题讨论】:

  • 你检查过你的垃圾邮件文件夹吗?
  • 你检查过error_log吗?还是垃圾邮件文件夹?
  • 不要使用@,它会消除所有错误。删除它,然后重试。
  • 我已经尝试过不使用“@”。但我没有收到任何错误。我的垃圾邮件中也没有邮件!!
  • 然后,如前所述,检查您的邮件服务器设置和日志。

标签: php email


【解决方案1】:

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

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

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

【讨论】:

  • 就像我说的,您需要开始对您的邮件发送子系统进行故障排除(通常类似于 *ix 系统上的 sendmail)
  • 好的,知道了。让我试试。谢谢。
【解决方案2】:

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

由于您没有错误要继续,因此要说出这里的问题并不容易。因此,我建议手动尝试从您的服务器和send the email manually 连接到 SMTP 服务器。这样一来,您将掌握错误而不是事后猜测。

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

为什么?

  • 您不必为电子邮件传递考虑太多。
  • 统计。让您跟踪总发送/点击/打开/退回。
  • 通常基于 Web 服务而不是 SMTP。 IE。更容易处理。
  • 更简洁的代码(至少如果您使用 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 中编辑您的模板,并且您可以使用the Comlang template language 来格式化您的电子邮件。

<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>

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        telnet xxx.xxx.xxx.xxx 25
        

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-05
          • 2014-07-14
          • 1970-01-01
          • 2014-10-03
          相关资源
          最近更新 更多