2013-04-28 5 views
-5

MYSqL отлично работает, но я не получаю письма почему?Отправка HTML-сообщений электронной почты с PHP

<?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 protected]"; 
      $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; 
    } 
?> 
+2

Можем ли мы иметь часть вашего кода, которая создает переменные $ to, $ subject, $ headers? –

+1

Вы используете это на своем локальном сервере? Если да, то вам нужно настроить сервер почты (I.e. sendmail). –

+0

Вам нужно разместить соответствующий код в своих вопросах. В противном случае мы не можем помочь. :/ – Plummer

ответ

5

Отправка сообщений электронной почты с серверов может быть сложной задачей, когда электронные сообщения внезапно прекращаются. Вы захотите, чтобы определенно реализовать какой-то журнал в случае возникновения сбоя. Что касается вашей конкретной проблемы, это может быть множество вещей. MySQL не связан с mail(), и поэтому одна работа не оказывает прямого влияния на другого, если у вас нет кода, который диктует такое взаимодействие. Это довольно техническое объяснение.

  1. Адрес электронной почты, который вы изначально размещали, был для aol.com. Если это так, то вы захотите проверить AOL sender policies. Они могут делать reverse look-up и не находить имя вашего сервера в обратном порядке MX record для DNS. Кроме того, им нравятся такие вещи, как SPF records, DKIM и Domain-Keys.
  2. Вы не получите электронное письмо, если IP address для вашего веб-сервера или блока IP-адресов, зарегистрированных вашим веб-хостом, находятся в списке блокировок (общий хостинг имеет более одного веб-сайта, отправляющего электронные письма). Существует несколько сайтов, которые позволяют вам проверить, находится ли ваш $_SERVER['SERVER_ADDR'] в списке блокировок. Например, вы можете попробовать: http://whatismyipaddress.com/blacklist-check
  3. Поскольку вы отправляете в AOL, вы пытаетесь отправить MIME-адрес электронной почты только для HTML, который начинается без тега HTML. (Возможно, вы попробуете простой текст.)
  4. Кроме того, поскольку вы отправляете электронное письмо на AOL (по своему собственному адресу), вы, скорее всего, будете тестировать свой собственный адрес, и если это так, то AOL имеет тенденцию блокировать электронные письма им, из своего домена электронной почты, но не отправляться ими. Это может показаться ретрансляцией или попыткой обмана.
  5. Если вы находитесь в локальной сети, большинство интернет-провайдеров обычно блокируют порт 25, чтобы предотвратить распространение червей и вирусов с зараженных компьютеров, размещенных в их сетях.
  6. Если ваш клиент sendmail не установлен или не настроен в вашей установке PHP, это может быть так. Проверьте phpinfo(), чтобы узнать, установлен ли он.
  7. Ваш сервер может быть запущен брандмауэр, как IP-таблиц, которые могут иметь исходящие передачи из порта 25 заблокирован. (Не вероятно, но возможно.)
  8. Если Sendmail настроен должным образом, вы можете обновить конфигурационный файл, задав log для регистрации всех mail() транзакций. Это скажет вам, отскакивается ли электронное письмо и какой-либо ответ во время рукопожатий между сервером.
+1

wow, вы быстро набираете и должны много свободного времени на ваших руках :-) – 2013-04-28 04:51:19

+0

очень красиво объяснено .. спасибо @AbsoluteZero – Jinandra

Смежные вопросы