/[notice-sender]/trunk/sender.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/sender.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 14 by dpavlin, Sun May 15 14:20:08 2005 UTC revision 17 by dpavlin, Sun May 15 16:32:36 2005 UTC
# Line 18  sender.pl - command line notify sender u Line 18  sender.pl - command line notify sender u
18   sender.pl --queue[=mylist message.txt]   sender.pl --queue[=mylist message.txt]
19   sender.pl --send=mylist   sender.pl --send=mylist
20    
21  =head2 All options  =head2 Command options
22    
23  =over 20  =over 20
24    
 =item --debug  
   
 Turn on debugging output from C<Class::DBI>  
   
25  =cut  =cut
26    
27  my $debug = 0;  my $debug = 0;
28    my $verbose = 0;
29  my $list_opt;  my $list_opt;
30  my $add_opt;  my $add_opt;
31  my $queue_opt;  my $queue_opt;
# Line 40  my $result = GetOptions( Line 37  my $result = GetOptions(
37          "queue:s" => \$queue_opt,          "queue:s" => \$queue_opt,
38          "send:s" => \$send_opt,          "send:s" => \$send_opt,
39          "debug" => \$debug,          "debug" => \$debug,
40            "verbose" => \$verbose,
41  );  );
42    
43    
# Line 59  my $users = $loader->find_class('users') Line 57  my $users = $loader->find_class('users')
57  my $user_list = $loader->find_class('user_list');  my $user_list = $loader->find_class('user_list');
58  my $messages = $loader->find_class('messages');  my $messages = $loader->find_class('messages');
59  my $queue = $loader->find_class('queue');  my $queue = $loader->find_class('queue');
60    my $sent = $loader->find_class('sent');
61    
62  $queue->set_sql( list_queue => qq{  $queue->set_sql( list_queue => qq{
63          SELECT messages.message, messages.date AS message_date, lists.name AS list          SELECT messages.message, messages.date AS date, lists.name AS list
64          FROM queue          FROM queue
65          JOIN messages on message_id = messages.id          JOIN messages on message_id = messages.id
66          JOIN lists on list_id = lists.id          JOIN lists on list_id = lists.id
# Line 86  if (defined($list_opt)) { Line 85  if (defined($list_opt)) {
85          }          }
86    
87          foreach my $list (@lists) {          foreach my $list (@lists) {
88                  print $list->name,"\n";                  print $list->name," <",$list->email,">\n";
89                  foreach my $user_on_list ($user_list->search(list_id => $list->id)) {                  foreach my $user_on_list ($user_list->search(list_id => $list->id)) {
90                          my $user = $users->retrieve( id => $user_on_list->user_id );                          my $user = $users->retrieve( id => $user_on_list->user_id );
91                          print "\t",$user->full_name," <", $user->email, ">\n";                          print "\t",$user->full_name," <", $user->email, ">\n";
# Line 115  argument) or read from C<STDIN>. List sh Line 114  argument) or read from C<STDIN>. List sh
114                  chomp;                  chomp;
115                  next if (/^#/ || /^\s*$/);                  next if (/^#/ || /^\s*$/);
116                  my ($email, $name) = split(/\s+/,$_, 2);                  my ($email, $name) = split(/\s+/,$_, 2);
117                    $name ||= '';
118                  if (! Email::Valid->address($email)) {                  if (! Email::Valid->address($email)) {
119                          print "SKIPPING $name <$email>\n";                          print "SKIPPING $name <$email>\n";
120                          next;                          next;
# Line 143  argument) or read from C<STDIN>. List sh Line 143  argument) or read from C<STDIN>. List sh
143  Queue message for later delivery. Message can be read from file (specified as  Queue message for later delivery. Message can be read from file (specified as
144  argument) or read from C<STDIN>.  argument) or read from C<STDIN>.
145    
146  This options without optional parametars it will display current queue.  This option without optional parametar will display pending queue. If you
147    add C<--verbose> flag, it will display all messages in queue.
148    
149  =cut  =cut
150    
# Line 182  This options without optional parametars Line 183  This options without optional parametars
183                  # list messages in queue                          # list messages in queue        
184    
185                  foreach my $m ($queue->retrieve_all) {                  foreach my $m ($queue->retrieve_all) {
186                          my $l = sprintf("%-10s %15s : ", $m->list_id->name, $m->message_id->date);                          next if ($m->all_sent && ! $verbose);
187                          $l .= substr($m->message_id->message, 0, 79 - length($l));  
188                          $l =~ s/[\n\r]/ /gs;                          my $l = $m->all_sent ? 'S' : 'Q';
189    
190                            my $date = $m->message_id->date;
191                            $date =~ s/\..+$//;
192                            my $msg = $m->message_id->message;
193                            $msg =~ s/\s+/ /gs;
194    
195                            $l .= sprintf(" %-10s %15s : ", $m->list_id->name, $date);
196                            $l .= substr($msg, 0, 79 - length($l));
197    
198                          print "$l\n";                          print "$l\n";
199                  }                  }
200    
# Line 192  This options without optional parametars Line 202  This options without optional parametars
202    
203  =item --send[=list_name]  =item --send[=list_name]
204    
205  Send e-mail waiting in queue for all lists, or with optional argument for  Send e-mails waiting in queue, or with optional argument, just send messages
206  just single list.  for single list.
207    
208  =cut  =cut
209    
210  } elsif (defined($send_opt)) {  } elsif (defined($send_opt)) {
211    
212            my $my_q;
         die "send option not yet implemented";  
   
         my @q;  
213          if ($send_opt ne '') {          if ($send_opt ne '') {
214  #               @q => $queue->search( name => 'foo' );                  my $l_id = $lists->search_like( name => $send_opt )->first ||
215                            die "can't find list $send_opt";
216                    $my_q = $queue->search_like( list_id => $l_id ) ||
217                            die "can't find list $send_opt";
218            } else {
219                    $my_q = $queue->retrieve_all;
220          }          }
221          foreach my $q (@q) {  
222                            while (my $m = $my_q->next) {
223                    next if ($m->all_sent);
224    
225                    print "sending message ",$m->message_id," enqueued on ",$m->date," to list ",$m->list_id->name,"\n";
226                    my $msg = $m->message_id->message;
227    
228                    foreach my $u ($user_list->search(list_id => $m->list_id)) {
229    
230                            my $hdr = "To: ".$u->user_id->full_name." <". $u->user_id->email. ">\n";
231    
232                            if ($sent->search( message_id => $m->message_id, user_id => $u->user_id )) {
233                                    print "SKIP ",$u->user_id->email," message allready sent\n";
234                            } else {
235                                    print "\t",$u->user_id->email,"\n";
236                                    send IO => "$hdr\n$msg";
237                                    $sent->create({
238                                            message_id => $m->message_id,
239                                            user_id => $u->user_id,
240                                    });
241                                    $sent->dbi_commit;
242                            }
243                    }
244                    $m->all_sent(1);
245                    $m->update;
246                    $m->dbi_commit;
247          }          }
248    
249  } else  {  } else  {
# Line 216  just single list. Line 252  just single list.
252    
253  =back  =back
254    
255    
256    
257    =head2 Helper options
258    
259    =over 20
260    
261    =item --debug
262    
263    Turn on debugging output from C<Class::DBI>
264    
265    =item --verbose
266    
267    Dump more info on screen.
268    
269    =back
270    
271    
272    
273  =head1 AUTHOR  =head1 AUTHOR
274    
275  Dobrica Pavlinusic <dpavlin@rot13.org>  Dobrica Pavlinusic <dpavlin@rot13.org>

Legend:
Removed from v.14  
changed lines
  Added in v.17

  ViewVC Help
Powered by ViewVC 1.1.26