【问题标题】:Sending HTML e-mails from PHP [closed]从 PHP 发送 HTML 电子邮件 [关闭]
【发布时间】:2013-04-21 23:43:42
【问题描述】:

MYSqL 工作正常,但我没有收到电子邮件,为什么?

<?php
    //include the connection file

    require_once('connection.php');

    //save the data on the DB and send the email

        if(isset($_POST['action']) && $_POST['action'] == 'submitform')
        {
        //recieve the variables

        $name = $_POST['name'];
        $email = $_POST['email'];
        $url = $_POST['url'];
        $comment = $_POST['comment'];
        $ip = gethostbyname($_SERVER['REMOTE_ADDR']);

        //save the data on the DB

        mysql_select_db($database_connection, $connection);

        $insert_query = sprintf("INSERT INTO contacts (name, email, url, comment, date, ip) VALUES (%s, %s, %s, %s, NOW(), %s)",
                            sanitize($name, "text"),
                            sanitize($email, "text"),
                            sanitize($url, "text"),
                            sanitize($comment, "text"),
                            sanitize($ip, "text"));

        $result = mysql_query($insert_query, $connection) or die(mysql_error());

        if($result)
        {
            //send the email

            $to = "email@aol.com";
            $subject = "message from website";

            //headers and subject
            $headers  = "MIME-Version: 1.0\r\n";
            $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
            $headers .= "From: ".$name." <".$email.">\r\n";

            $body = "New contact<br />";
            $body .= "Name: ".$name."<br />";
            $body .= "Email: ".$email."<br />";
            $body .= "Comment: ".$comment."<br />";
            $body .= "IP: ".$ip."<br />";

            mail($to, $subject, $body, $headers);

            //ok message

            echo "Your message has been sent";
        }
        }

        function sanitize($value, $type) 
        {
        $value = (!get_magic_quotes_gpc()) ? addslashes($value) : $value;

        switch ($type) {
        case "text":
          $value = ($value != "") ? "'" . $value . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $value = ($value != "") ? intval($value) : "NULL";
          break;
        case "double":
          $value = ($value != "") ? "'" . doubleval($value) . "'" : "NULL";
          break;
        case "date":
          $value = ($value != "") ? "'" . $value . "'" : "NULL";
          break;
        }

        return $value;
    }
?>

【问题讨论】:

  • 我们能否提供您的代码中创建 $to、$subject、$headers 变量的部分?
  • 您是在本地服务器上运行它吗?如果是,那么您需要在其上配置一个邮件(即 sendmail)服务器。
  • 您需要在问题中发布相关代码。否则,我们无能为力。 ://

标签: php forms email sendmail html-email


【解决方案1】:

当电子邮件突然停止时,从服务器发送电子邮件可能会很棘手。如果发生故障,您肯定希望实现某种日志记录。关于您的特定问题,这可能是各种各样的事情。 MySQLmail() 无关,因此一个工作对另一个工作没有直接影响,除非您有代码指示这种交互。这是一个相当技术性的解释。

  1. 您最初发布的电子邮件地址是aol.com。如果是这种情况,那么您需要查看AOL sender policies。他们可能正在执行reverse look-up 并没有在MX record 反向查找DNS 中找到您的服务器名称。此外,他们还喜欢SPF recordsDKIMDomain-Keys 之类的东西。
  2. 如果您的网络服务器的IP address 或您的网络主机注册的 IP 块在黑名单上(共享主机往往有多个网站发送电子邮件),您将不会收到电子邮件。有几个网站可让您检查您的 $_SERVER['SERVER_ADDR'] 是否在阻止列表中。例如,您可以尝试:http://whatismyipaddress.com/blacklist-check
  3. 由于您正在向 AOL 发送邮件,因此您正在尝试发送一封开头没有 HTML 标记的仅 MIME HTML 电子邮件。 (您可以尝试纯文本。)
  4. 此外,由于您正在向 AOL 发送电子邮件(发送到您自己的地址),因此您很可能使用自己的地址进行测试,如果是这种情况,AOL 倾向于阻止向他们发送电子邮件,来自他们的电子邮件域,但不是由他们发送的。这可能看起来像是中继或欺骗尝试。
  5. 如果您在本地网络上,大多数 ISP 通常会阻止端口 25,以防止蠕虫和病毒从托管在其网络上的受感染计算机传播。
  6. 如果您的 sendmail 客户端未在 PHP 安装中安装或配置,则可能是这种情况。检查phpinfo() 是否已安装。
  7. 您的服务器可能正在运行像 IP 表这样的防火墙,可能会阻止来自端口 25 的出站广播。(不太可能,但可能。)
  8. 如果Sendmail 配置正确,您可以通过指定用于记录所有mail() 事务的日志来更新配置文件。这将告诉您电子邮件是否被退回以及服务器之间握手期间的任何响应。

【讨论】:

  • 哇,你打字很快,或者你手上有很多空闲时间:-)
  • 很好地解释了......谢谢@AbsoluteZero
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 2023-03-21
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多