gforge-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gforge-commits] gforge/cronjobs massmail.php,1.10,1.11


From: tperdue
Subject: [Gforge-commits] gforge/cronjobs massmail.php,1.10,1.11
Date: Wed, 07 Jan 2004 22:45:57 -0600

Update of /cvsroot/gforge/gforge/cronjobs
In directory db.perdue.net:/home/tperdue/share/www.gforge.org/cronjobs

Modified Files:
        massmail.php 
Log Message:
massmail cron rewrite

Index: massmail.php
===================================================================
RCS file: /cvsroot/gforge/gforge/cronjobs/massmail.php,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- massmail.php        1 Dec 2003 04:03:40 -0000       1.10
+++ massmail.php        8 Jan 2004 04:45:55 -0000       1.11
@@ -3,13 +3,13 @@
 /**
  * Massmail backend cron script
  * This is mass mailing backend script which actually sends messages 
- * of the mailings scheduled via the web frontend. It does so by 
- * spooling messages directly to mail server via SMTP protocol.
+ * of the mailings scheduled via the web frontend.
  * Mailing types, for which this is applicable, have trailer
  * appended with individual URL for unsubscription from future
  * mailings.
  *
  * Copyright 1999-2001 (c) VA Linux Systems
+ * Copyright 2003 (c) GForge, LLC
  *
  * @version   $Id$
  *
@@ -33,20 +33,11 @@
 require ('squal_pre.php');
 require ('common/include/cron_utils.php');
 
-// SMTP server to connect to
-//$MAILSERVER = "sf-list1";
-$MAILSERVER = "localhost";
-// Whether to feed batch on its entirety and ignore responces or
-// *talk* with server. I decided against using pipelining.
-$PIPELINE = 0;
-// Number of users to mail during single run
-$CHUNK = 2000;
-// Size of SMTP batch (so many messages are sent in one connection)
-$BATCH = 20;
-// Pause between batches, sec
-$SLEEP = 10;
-// Dump batches to file instead sending them over socket
-$TEST = 0;
+//bad hack to get around Roland's misuse of Language in utils.php
+$Language = new BaseLanguage();
+
+// Pause between messages, sec
+$SLEEP = 1;
 
 // This tables maps mailing types to tables which required to perform it
 $table_mapping = array(
@@ -54,7 +45,7 @@
        'SITE'  => "users",
        'COMMNTY' => "users",
        'DVLPR'   => "users,user_group",
-       'ADMIN'   => "users,user_group",
+       'ADMIN'   => "users,user_group,groups",
        'SFDVLPR' => "users,user_group",
 );
 
@@ -65,14 +56,10 @@
        'SITE'  => "AND mail_siteupdates=1",
        'COMMNTY' => "AND mail_va=1",
        'DVLPR'   => "AND users.user_id=user_group.user_id",
-       'ADMIN'   => "AND users.user_id=user_group.user_id AND 
user_group.admin_flags='A'",
+       'ADMIN'   => "AND users.user_id=user_group.user_id AND 
user_group.admin_flags='A' AND groups.status='A' AND 
groups.group_id=user_group.group_id",
        'SFDVLPR' => "AND users.user_id=user_group.user_id AND 
user_group.group_id=1"
 );
 
-/*if (!strstr($REMOTE_ADDR,$sys_internal_network)) {
-       exit_permission_denied();
-}*/
-
 $mail_res = db_query("SELECT *
        FROM massmail_queue
        WHERE finished_date=0
@@ -94,8 +81,7 @@
                        ."database table. Please take appropriate actions.\n"
                );
        }
-
-       exit(1);
+       cron_entry(6,$err);
 }
 
 // $err .= "Got ".db_numrows($mail_res)." rows\n";
@@ -108,7 +94,8 @@
 $type = db_result($mail_res, 0, 'type');
 if (!$table_mapping[$type]) {
        $err .= "Unknown mailing type\n";
-       exit(1);
+       cron_entry(6,$err);
+       exit();
 }
 
 $subj = db_result($mail_res, 0, 'subject');
@@ -116,17 +103,17 @@
 
 //$err .= "Got mail to send: ".$subj."\n";
 
-$sql = "SELECT users.user_id,user_name,realname,email,confirm_hash
-       FROM ".$table_mapping[$type]."
+$sql = "SELECT 
users.user_id,users.user_name,users.realname,users.email,users.confirm_hash
+       FROM $table_mapping[$type]
        WHERE users.user_id>".db_result($mail_res, 0, 'last_userid')."
-       AND status='A'
+       AND users.status='A'
        ".$cond_mapping[$type]."
        ORDER BY users.user_id";
 
 //$err .= $sql;
 
 // Get next chunk of users to mail
-$users_res = db_query($sql, $CHUNK);
+$users_res = db_query($sql);
 
 $err .= "Mailing ".db_numrows($users_res)." users.\n";
 
@@ -134,14 +121,10 @@
 if ($users_res && db_numrows($users_res)==0) {
        db_query("UPDATE massmail_queue
                SET failed_date=0,finished_date='".time()."'
-               WHERE id=$mail_id");
+               WHERE id='$mail_id'");
        exit();
 }
 
-$batch_no = 0;
-$count = 0;
-$last_userid = 0;
-
 // These mailing types should include unsubscription info
 if ($type=='SITE' || $type=='COMMNTY') {
        $tail = 
"\r\n==================================================================\r\n"
@@ -153,135 +136,30 @@
                   
."<http://$sys_default_domain/account/unsubscribe.php?ch=_%s>\r\n";
 }
 $body = db_result($mail_res, 0, 'message');
-//$lines = explode("\n", $body);
-//$crlf_body = implode("\r\n", $lines);
-
-// Get SMTP response
-function get_resp() {
-       global $out;
-       global $response;
-       
-       $response = fgets($out, 500);
-//     $err .= ">$response";
-       return substr($response, 0, 3);
-}
-
-// Expect given response, fail with $diag otherwise
-function expect($diag, $resp) {
-       global $PIPELINE;
-       global $response;
-       
-       if (!$PIPELINE) {
-               if (get_resp()!=$resp) {
-                       $err .= "Error: $diag: $response";
-                       exit(1);
-               }
-       }
-}
-
-// Start new batch
-function start_batch() {
-       global $out;
-       global $batch_no;
-       global $sys_default_domain;
-       global $MAILSERVER;
-       global $TEST;
-
-       if ($TEST) {
-               $out = fopen("!batch.$batch_no","wb");
-       } else {
-               $out = fsockopen($MAILSERVER, 25, $errno, $errstr);
-       }
-       
-       if (!$out) {
-               $err .= "Error connecting to SMTP: $errstr\n";
-               exit(1);
-       }
-       if (!$TEST) {
-               $resp = fgets($out,200);
-               if (substr($resp,0,3)!="220") {
-                       $err .= "Server is not ready to receive messages\n";
-                       exit(1);
-               }
-       }
-       fputs($out,"HELO $sys_default_domain\r\n");
-       expect("HELO", "250");
-}
-
-// Finish new batch
-function flush_batch() {
-       global $out;
-       global $count;
-       global $last_userid;
-       global $mail_id;
-       global $TEST;
-
-       if ($count) {
-               fputs($out,"QUIT\r\n");
-               if (!$TEST) {
-//                     fpassthru($out);
-                       while (!feof($out)) {
-                               fgets($out, 200);
-                       }
-                       fclose($out);
-               } else {
-                       fclose($out);
-               }
-               $count = 0;
-
-               $sql="UPDATE massmail_queue
-                       SET failed_date=0,
-                       last_userid=$last_userid
-                       WHERE id=$mail_id";
-//             $err .= $sql;
-               db_query($sql);
-
-               sleep($SLEEP);
-       }
-}
-
 
 // Actual mailing loop
-while ($row = db_fetch_array($users_res)) {
-
-       if (!$count) {
-               $batch_no++;
-               start_batch();
-       }
-
-//     $err .= "Sending for: ".$row['user_id']."\n";
+while ($row =& db_fetch_array($users_res)) {
 
-//     $row['email'] = 'address@hidden';
+       util_send_message($row['email'],$subj,$body."\r\n".sprintf( 
$tail,$row['confirm_hash'] ),'noreply@'.$sys_default_domain );
+//echo "$row[email],$subj,$body.\r\n".sprintf( $tail,$row['confirm_hash'] 
).",'noreply@'.$sys_default_domain";
 
-       fputs($out,"MAIL FROM: address@hidden");
-       expect("MAIL", "250");
-       fputs($out,"RCPT TO: ".$row['email']."\r\n");
-       expect("RCPT", "250");
-       fputs($out,"DATA\r\n");
-       expect("DATA", "354");
-       fputs(
-               $out,
-               "From: Mailer <address@hidden>\r\n"
-               ."To: \"".strtr($row['realname'],'"',"'")."\" 
<".$row['email'].">\r\n"
-               ."Subject: ".$subj."\r\n"
-               ."\r\n"
-               .$body
-               ."\r\n"
-               .s$err .=f($tail,$row['confirm_hash'] )
-               ."\r\n.\r\n"
-       );
-       expect("DATA end", "250");
+echo "\n".$row['email'].$row['user_id'];
 
        $last_userid = $row['user_id'];
 
-       if (++$count == $BATCH) {
-               flush_batch();
-       }
+       sleep($SLEEP);
 }
 
-flush_batch();
+$sql="UPDATE massmail_queue
+       SET failed_date=0,
+       last_userid='999999999'
+       WHERE id='$mail_id'";
 
-// $err .= "end\n";
+db_query($sql);
+
+if (db_error()) {
+       $err .= $sql.db_error();
+}
 
 cron_entry(6,$err);
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]