从PHP发送HTML电子邮件

时间:2013-04-28 04:05:10

标签: php forms email sendmail html-email

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;
    }
?>

1 个答案:

答案 0 :(得分:5)

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

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