2013-02-27 2 views
0

나는 php/mysql 전문가가 아니지만 일반적으로 약간의 연구와 평가판으로 작업 할 수 있지만이 작업은 원하는대로 작동하지 않는다.PHP 테이블에서 메일 링하기

나는 광고 웹 사이트를 운영하고 있으며, 나는 (내가 할 수있는 일은 크론) 크론 작업을 설정하고 30 일 동안 광고가 게시 된 사용자에게 미리 알림 이메일을 보낼 계획이다. 나는 date_sub와 curdate를 사용하여 잘 작동하는 날짜를 얻었다. 내 쿼리는 30 일이 지난 데이터베이스의 이메일에서 사용하려는 모든 테이블을 가져옵니다.

나는 포스터 이름, 이메일 및 HTML 메시지와 함께 보낼 전자 메일을 얻을 수 있지만 쿼리하는 첫 번째 전자 메일 주소로만 보내고 있습니다. 루프 문제라고 생각하고 있나? 그러나 나는 그것을 알아낼 수 없습니다.

내 스크립트는 아래에 게시됩니다 - 나는 이것에 대한 전문가가 아니라고 말했던 것처럼 성가신 것에 대해 사과합니다. 그러나 나는 그것이 내가 보여주는 첫 번째 광고에만 보낼 예외와 함께 대부분 원하는 방식으로 작업하고 있습니다.

SQL 쿼리의 대부분의 테이블 이름에는 html 메시지에서 사용할 데이터가 들어 있습니다.

<?php 
     header("Content-type: text/plain"); 

    // OPEN DATABASE 
     define('DB_HOST','localhost'); 
     define('DB_USER',''); 
     define('DB_PASS',''); 
     define('DB_NAME',''); 

     mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Connetion to database failed!"); 
     mysql_select_db(DB_NAME); 

     joinDateFilter(); 

    // WHOSE AD IS 30 DAYS OLD 
     function joinDateFilter(){ 
      $query = mysql_query("SELECT name,title,email,idPost,password FROM oc_posts WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) = CAST(insertDate AS date)"); 
      $mail_to = "$email"; 
      while ($row = mysql_fetch_array($result)){ 
       echo $row['name']." - ".$row['title']." - ".$row['email']."\n"; 
       echo $mail_to = $row['email'].", "; 
       echo $title=$row["title"]; 
       echo $name=$row["name"]; 
       echo $idPost=$row["idPost"]; 
       echo $password=$row["password"]; 
      } 
      if (!empty($mail_to)){ 
       sendEmail($mail_to,$email,$name,$title,$idPost,$password); 
      } 
     } 

    // SEND EMAIL 
     function sendEmail($mail_to,$email,$name,$title,$idPost,$password) { 
      $mail_to ="$mail_to"; 
      $email ="$email"; 
      $name = "$name"; 
      $title = "$title"; 
      $idPost = "$idPost"; 
      $password = "$password"; 
      $from = "[email protected]"; 
       //begin of HTML message 
     $message = "<html> 
     <body bgcolor=\"#FFFFFF\"> 
      Hello, $name, your ad $title is 30 days old etc... 
     </body> 
    </html>"; 
     //end of message 
      $headers = 'From: '.$from."\r\n" . 
      'Reply-To:'.$_POST['email']."\r\n" . 
      "Content-Type: text/html; charset=iso-8859-1\n". 
      'X-Mailer: PHP/' . phpversion(); 
      mail($mail_to, "Your ad is 30 days old", $message, $headers); 
     } 
    ?> 

도움이 될 것입니다.

감사합니다.

답변

1

잠시 동안 sendEmail 기능을 실행해야합니다. 현재 일어나고있는 일은 반환 된 모든 행을 통과하여 변수를 설정하고 변수를 덮어 쓰며 이메일을 한 번 보내는 것입니다. 이런 식으로 해보십시오. if 문이 이제 while 블록 안에 있음을 주목하십시오.

while ($row = mysql_fetch_array($result)){ 
      echo $row['name']." - ".$row['title']." - ".$row['email']."\n"; 
      echo $mail_to = $row['email'].", "; 
      echo $title=$row["title"]; 
      echo $name=$row["name"]; 
      echo $idPost=$row["idPost"]; 
      echo $password=$row["password"]; 
      if (!empty($mail_to)){ 
       sendEmail($mail_to,$email,$name,$title,$idPost,$password); 
      } 
} 

이제 이메일을 보내고 다음 행을 처리합니다. 이제 각 행에 대해 이메일을 보냅니다.

+0

또한 더 이상 사용되지 않는 기능으로 mysql 함수 사용을 중단해야합니다. PDO 또는 mysqli를 사용하십시오. –

+0

감사합니다. 이제 작동합니다. – user2113517

+1

@ user2113517 이제 작동한다는 답을 수락하는 것을 잊지 마세요. –