@mail没有在php发送邮件

时间:2012-10-24 06:36:52

标签: php email

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

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

它仍然无效。

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

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

由于您没有任何错误,所以说这里的问题并不容易。因此,我建议您手动尝试从服务器和send the email manually连接到SMTP服务器。这样你手头就会有错误而不是猜测。

如果您不想这样做,只是希望它“正常工作”,我建议您使用交易电子邮件服务,例如:

<强>为什么吗

  • 您不必过多考虑电子邮件投放。
  • 统计。让我们跟踪Total Sent / Clicks / Opens / Bounces。
  • 通常是基于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中修改模板,并且可以使用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>

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

某些托管需要邮件的额外参数。可能是那样。

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

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

答案 4 :(得分:0)

首先,我会确保端口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)。

如果这不能帮到你,我会再看一下电子邮件服务器的配置。