/[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 32 by dpavlin, Mon May 16 22:32:58 2005 UTC revision 73 by dpavlin, Mon Aug 22 20:39:38 2005 UTC
# Line 2  Line 2 
2    
3  use strict;  use strict;
4  use blib;  use blib;
5  use Nos;  use Nos 0.7;
6  use Getopt::Long;  use Getopt::Long;
7    use Pod::Usage;
8    
9  =head1 NAME  =head1 NAME
10    
11  sender.pl - command line notify sender utility  sender.pl - command line notify sender utility
12    
13  =head1 SYNOPSYS  =head1 SYNOPSIS
14    
15   sender.pl --new=mylist   sender.pl --create=mylist
16     sender.pl --drop=mylist
17   sender.pl --add=mylist members.txt   sender.pl --add=mylist members.txt
18     sender.pl --delete=mylist members.txt
19   sender.pl --list[=mylist]   sender.pl --list[=mylist]
20   sender.pl --queue[=mylist message.txt]   sender.pl --queue[=mylist message.txt]
21   sender.pl --send=mylist   sender.pl --send=mylist
22     sender.pl --help
23     sender.pl --man
24    
25  In C</etc/aliases> something like:  =head1 OPTIONS
   
  mylist: "| /path/to/sender.pl --inbox=mylist"  
   
 =head2 Command options  
26    
27  =over 20  =over 20
28    
# Line 32  my $verbose = 0; Line 33  my $verbose = 0;
33  my $opt;  my $opt;
34    
35  my $result = GetOptions(  my $result = GetOptions(
36          "new=s" => \$opt->{'new'},          "create=s" => \$opt->{'create'},
37            "drop=s" => \$opt->{'drop'},
38          "list:s" => \$opt->{'list'},          "list:s" => \$opt->{'list'},
39          "add=s" => \$opt->{'add'},          "add=s" => \$opt->{'add'},
40            "delete=s" => \$opt->{'delete'},
41          "queue:s" => \$opt->{'queue'},          "queue:s" => \$opt->{'queue'},
42          "send:s" => \$opt->{'send'},          "send:s" => \$opt->{'send'},
43          "inbox=s" => \$opt->{'inbox'},          "inbox=s" => \$opt->{'inbox'},
44          "debug" => \$debug,          "debug" => \$debug,
45          "verbose" => \$verbose,          "verbose" => \$verbose,
46          "email=s" => \$opt->{'email'},          "from=s" => \$opt->{'from'},
47  );          "driver=s" => \$opt->{'email_send_driver'},
48            "sleep=i" => \$opt->{'sleep'},
49            "aliases=s" => \$opt->{'aliases'},
50            "help" => \$opt->{'help'},
51            "man" => \$opt->{'man'}
52    ) || pod2usage(-verbose => 0);
53    
54    pod2usage(-verbose => 1) if ($opt->{'help'});
55    pod2usage(-verbose => 2) if ($opt->{'man'});
56    
57  my $nos = new Nos(  my $nos = new Nos(
58          dsn => 'dbi:Pg:dbname=notices',          dsn => 'dbi:Pg:dbname=notices',
# Line 69  $queue->set_sql( list_queue => qq{ Line 80  $queue->set_sql( list_queue => qq{
80    
81  my $list_name;  my $list_name;
82    
83    =item --aliases=/full/path/to/aliases
84    
85    Optional parametar C<--aliases> can be used to specify aliases file other
86    than default C</etc/aliases>.
87    
88    =cut
89    
90    my $aliases = $opt->{'aliases'} || '/etc/aliases';
91    
92    
93  =item --new=list_name my-list@example.com  =item --create=list_name my-list@example.com
94    
95  Adds new list. You can also feed list name as first line to C<STDIN>.  Adds new list. You can also feed list name as first line to C<STDIN>.
96    
97    You can also add C<--from='Full name of list'> to specify full name (comment)
98    in outgoing e-mail.
99    
100  =cut  =cut
101    
102  if ($list_name = $opt->{'new'}) {  if ($list_name = $opt->{'create'}) {
103    
104          my $email = shift @ARGV || <>;          my $email = shift @ARGV || <>;
105          chomp($email);          chomp($email);
106    
107          die "need e-mail address for list (as argument or on STDIN)\n" unless ($email);          die "need e-mail address for list (as argument or on STDIN)\n" unless ($email);
108    
109          my $l = $nos->_get_list($list_name) || $nos->_add_list(          my $id = $nos->create_list(
110                  list => $list_name,                  list => $list_name,
111                    from => ($opt->{'from'} || ''),
112                  email => $email,                  email => $email,
113                    aliases => $aliases,
114          ) || die "can't add list $list_name\n";          ) || die "can't add list $list_name\n";
115    
116          print "added list $list_name with ID ",$l->id,"\n";          print "added list $list_name with ID $id\n";
117    
118    
119    =item --drop=list_name
120    
121    Remove list.
122    
123    Optional parametar C<--aliases='/full/path/to/aliases'> can be used to
124    specify aliases file other than C</etc/aliases>.
125    
126    =cut
127    
128    } elsif ($list_name = $opt->{'drop'}) {
129    
130            my $id = $nos->drop_list(
131                    list => $list_name,
132                    aliases => $aliases,
133            ) || die "can't remove list $list_name\n";
134    
135            print "drop list $list_name with ID $id\n";
136    
137    
138  =item --list[=list_name]  =item --list[=list_name]
# Line 111  on that list. Line 155  on that list.
155          }          }
156    
157          foreach my $list (@lists) {          foreach my $list (@lists) {
158                  print $list->name," <",$list->email,">\n";                  print $list->name,": ",$list->from_addr," <",$list->email,">\n";
159                  foreach my $user_on_list ($user_list->search(list_id => $list->id)) {                  foreach my $u ($nos->list_members( list => $list->name )) {
160                          my $user = $users->retrieve( id => $user_on_list->user_id );                          print "\t",$u->{'name'}, " <", $u->{'email'}, ">",( $u->{'ext_id'} ? ' ['.$u->{'ext_id'}.']' : '' ),"\n";
                         print "\t",$user->full_name," <", $user->email, ">\n";  
161                  }                  }
162          }          }
163    
# Line 127  argument) or read from C<STDIN>. List sh Line 170  argument) or read from C<STDIN>. List sh
170   email@example.com      Optional full name of person   email@example.com      Optional full name of person
171   dpavlin@rot13.org      Dobrica Pavlinusic   dpavlin@rot13.org      Dobrica Pavlinusic
172    
 You may use C<--email> parametar at any time to set From: e-mail address for list.  
 B<This seems somewhat cludgy, and it will probably change in future>.  
   
173  =cut  =cut
174    
175  } elsif ($list_name = $opt->{'add'}) {  } elsif ($list_name = $opt->{'add'}) {
176    
177          my $list = $lists->find_or_create({          my $list = $nos->_get_list($list_name) || die "can't find list $list_name\n";
                 name => $list_name,  
         }) || die "can't add list $list_name\n";  
178    
179          my $added = 0;          my $added = 0;
180    
# Line 150  B<This seems somewhat cludgy, and it wil Line 188  B<This seems somewhat cludgy, and it wil
188          print "list ",$list->name," has $added users\n";          print "list ",$list->name," has $added users\n";
189    
190    
191    =item --delete=list_name
192    
193    Delete users from list. User e-mails can be stored in file (which can be
194    supplied as argument) or read from C<STDIN>.
195    
196    =cut
197    } elsif ($list_name = $opt->{'delete'}) {
198    
199            my $list = $nos->_get_list($list_name) || die "can't find list $list_name\n";
200    
201            my $deleted = 0;
202    
203            while(<>) {
204                    chomp;
205                    next if (/^#/ || /^\s*$/);
206                    my $email = $_;
207                    $deleted++ if ($nos->delete_member_from_list( email => $email, list => $list_name ));
208            }
209    
210            print "list ",$list->name," lost $deleted users\n";
211    
212    
213  =item --queue[=list_name]  =item --queue[=list_name]
214    
215  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
# Line 190  add C<--verbose> flag, it will display a Line 250  add C<--verbose> flag, it will display a
250                          my $msg = $m->message_id->message;                          my $msg = $m->message_id->message;
251                          $msg =~ s/\s+/ /gs;                          $msg =~ s/\s+/ /gs;
252    
253                          $l .= sprintf(" %-10s %15s : ", $m->list_id->name, $date);                          $l .= sprintf(" %-15s %15s : ", $m->list_id->name, $date);
254                          $l .= substr($msg, 0, 79 - length($l));                          $l .= substr($msg, 0, 79 - length($l));
255    
256                          print "$l\n";                          print "$l\n";
# Line 204  add C<--verbose> flag, it will display a Line 264  add C<--verbose> flag, it will display a
264  Send e-mails waiting in queue, or with optional argument, just send messages  Send e-mails waiting in queue, or with optional argument, just send messages
265  for single list.  for single list.
266    
267    Optional argument C<--driver=smtp> forces sending using SMTP server at
268    localhost (127.0.0.1).
269    
270    Optional argument C<--sleep=42> defines that sender will sleep 42 seconds
271    between sending e-mail.
272    
273  =cut  =cut
274    
275  } elsif (defined($list_name = $opt->{'send'})) {  } elsif (defined($list_name = $opt->{'send'})) {
276    
277          $nos->send_queued_messages($list_name);          unless ($opt->{'email_send_driver'}) {
278                    print "WARNING: this will dump debugging output to STDERR\n";
279                    print "enter alternative driver (e.g. smtp): ";
280                    my $d = <STDIN>;
281                    chomp($d);
282                    $opt->{'email_send_driver'} = $d;
283            }
284    
285            $nos->send_queued_messages(
286                    list => $list_name,
287                    driver => $opt->{'email_send_driver'},
288                    sleep => $opt->{'sleep'},
289            );
290    
291    
292  =item --inbox=list_name  =item --inbox=list_name
# Line 217  Feed incomming message back into notice Line 295  Feed incomming message back into notice
295    
296  =cut  =cut
297    
298  } elsif ($opt->{'inbox'}) {  } elsif ($list_name = $opt->{'inbox'}) {
299    
300            my $message;
301            while(<>) {
302                    $message .= $_;
303            }
304    
305            $nos->inbox_message(
306                    list => $list_name,
307                    message => $message,
308            ) || die "can't receive message for list $list_name";
309    
         warn "inbox option is not implemented";  
310    
311  } else  {  } else  {
312          die "see perldoc $0 for help\n";          pod2usage(-verbose=>0);
313  }  }
314    
315  =back  =back
# Line 241  Turn on debugging output from C<Class::D Line 328  Turn on debugging output from C<Class::D
328    
329  Dump more info on screen.  Dump more info on screen.
330    
 =item --email  
   
 Used to specify e-mail address where needed.  
   
331  =back  =back
332    
333    =head1 DESCRIPTION
334    
335    This command will use notice-sender C<Nos.pm> module directly to make modifications on lists
336    or with C<--inbox> option server as incomming mail filter.
337    
338  =head1 AUTHOR  =head1 AUTHOR
339    

Legend:
Removed from v.32  
changed lines
  Added in v.73

  ViewVC Help
Powered by ViewVC 1.1.26