bulkmail_sweep_bounce_queueWhat it does:
Sweeps the bounce queue, handling bounced messages.Defined in: /web/philip/tcl/bulkmail-utils.tcl
Source code:
ns_log Notice "Sweeping bounce queue" set threshold [bulkmail_bounce_threshold] set bounce_dir [bulkmail_bounce_dir] set file_pattern "$bounce_dir/*" ns_log Notice "$bounce_dir\n$file_pattern" set db [ns_db gethandle] set n_bounces 0 foreach file [glob -nocomplain $file_pattern] { ns_log Notice "Current file: $file" # file_name is file - bounce_dir + a slash (consumed by the zero-index) set file_name [string range $file [expr [string length $bounce_dir] + 1] end] set key_code [string toupper [lindex [split $file_name "@"] 0]] ns_log Notice "key_code: $key_code" set details [bulkmail_decode_key_code $key_code] ns_log Notice "file_name: $file_name\nDetails: $details" # See if we have garbage if { [llength $details] < 3 } { # We can trash this file; it shouldn't be here ns_unlink -nocomplain $file continue } set bulkmail_id [lindex $details 0] set user_id [lindex $details 1] if {[catch { ns_db dml $db "insert into bulkmail_bounces (bulkmail_id, user_id) values ($bulkmail_id, $user_id)" } errmsg] } { ns_log Notice "Error on bulkmail_bounce insert. key_code: $key_code\ndetails: $details\n$errmsg" } else { ns_unlink -nocomplain "$file" incr n_bounces } } if { $n_bounces > 0 } { set rows_affected [ns_ora exec_plsql $db "declare counter number; uid number; cursor BOUNCING_IDS is select user_id from bulkmail_bounces where active_p = 't' group by user_id having count(user_id) > 2 ; one_row BOUNCING_IDS%ROWTYPE; begin --:counter := counter; counter := 0; for one_row in BOUNCING_IDS loop uid := one_row.user_id; update users set email_bouncing_p = 't' where user_id = uid; update bulkmail_bounces set active_p = 'f' where user_id = uid; commit; counter := counter + 1; end loop; :counter := counter; end; "] ns_log Notice "bulkmail bounce sweeper found $rows_affected bouncing ids." } ns_db releasehandle $db ns_log Notice "Done sweeping bounce queue"