Line # Revision Author
1 743 ahitrov #!/usr/bin/perl
2
3 use strict;
4 use warnings "all";
5 use locale;
6
7 BEGIN { require 'inc.pl' };
8
9 use Contenido::Globals;
10 use Contenido::Init;
11 use ErrorTee;
12 use PidFile;
13 use Data::Dumper;
14
15 # begin
16 Contenido::Init->init();
17
18 my $keeper_module = $state->project.'::Keeper';
19 $keeper = $keeper_module->new($state);
20
21 #PidFile->new($keeper, compat=>1); # db-based locking (run only on one host)
22 #PidFile->new($keeper, compat=>1, per_host=>1); # db-based locking (run on whole cluster)
23
24 ############################################
25 # please use:
26 # $state->{log_dir} for logging
27 # $state->{tmp_dir} for temporary files
28 ###########################################
29 $keeper->t_connect() || die $keeper->error();
30 my $ids = $keeper->TSQL->selectall_arrayref("SELECT id FROM mailqueue WHERE status = 0 and dtime <= CURRENT_TIMESTAMP ORDER BY ctime LIMIT 5");
31 if ( ref $ids eq 'ARRAY' && @$ids ) {
32 $keeper->TSQL->do("UPDATE mailqueue SET status = 2 WHERE ID IN (".join(',', '?' x scalar @$ids).")", {}, map { $_->[0] } @$ids);
33 }
34 $keeper->t_finish();
35
36 if ( @$ids ) {
37 my $sendmail = Contenido::Mail->new({password => 'g8$feds1'});
38 foreach my $row ( @$ids ) {
39 my $mail = $keeper->get_document_by_id($row->[0], class => 'Contenido::Email');
40 if ( ref $mail ) {
41 my $data = {
42 to => $mail->name,
43 subject => $mail->subject,
44 body => $mail->body_html,
45 };
46 if ( $mail->cc ) {
47 $data->{cc} = [split /\n/, $mail->cc];
48 }
49 if ( $mail->body_text ) {
50 $data->{text} = $mail->body_text;
51 }
52 if ( my $err = $sendmail->send({ email => $data }) ) {
53 $mail->status(3);
54 $mail->error( $err );
55 } else {
56 $mail->status(2);
57 }
58 $mail->store;
59 }
60 }
61 }