Line # | Revision | Author | |
---|---|---|---|
1 | 760 | ahitrov | #!/usr/bin/env perl |
2 | 743 | ahitrov | |
3 | use strict; | ||
4 | use warnings "all"; | ||
5 | use locale; | ||
6 | |||
7 | 851 | ahitrov | BEGIN { require './inc.pl' }; |
8 | 743 | ahitrov | |
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 | 768 | ahitrov | $DEBUG = 0; |
21 | 743 | ahitrov | |
22 | #PidFile->new($keeper, compat=>1); # db-based locking (run only on one host) | ||
23 | #PidFile->new($keeper, compat=>1, per_host=>1); # db-based locking (run on whole cluster) | ||
24 | |||
25 | ############################################ | ||
26 | # please use: | ||
27 | # $state->{log_dir} for logging | ||
28 | # $state->{tmp_dir} for temporary files | ||
29 | ########################################### | ||
30 | $keeper->t_connect() || die $keeper->error(); | ||
31 | my $ids = $keeper->TSQL->selectall_arrayref("SELECT id FROM mailqueue WHERE status = 0 and dtime <= CURRENT_TIMESTAMP ORDER BY ctime LIMIT 5"); | ||
32 | if ( ref $ids eq 'ARRAY' && @$ids ) { | ||
33 | 750 | ahitrov | $keeper->TSQL->do("UPDATE mailqueue SET status = 2 WHERE ID IN (".join(',', ('?') x scalar @$ids).")", {}, map { $_->[0] } @$ids); |
34 | 743 | ahitrov | } |
35 | $keeper->t_finish(); | ||
36 | |||
37 | 753 | ahitrov | my $now = Contenido::DateTime->new; |
38 | 743 | ahitrov | if ( @$ids ) { |
39 | 749 | ahitrov | my $sendmail = Contenido::Mail->new(); |
40 | 743 | ahitrov | foreach my $row ( @$ids ) { |
41 | my $mail = $keeper->get_document_by_id($row->[0], class => 'Contenido::Email'); | ||
42 | if ( ref $mail ) { | ||
43 | my $data = { | ||
44 | 759 | ahitrov | to => [split /,\s*/, $mail->name], |
45 | 743 | ahitrov | subject => $mail->subject, |
46 | body => $mail->body_html, | ||
47 | }; | ||
48 | if ( $mail->cc ) { | ||
49 | $data->{cc} = [split /\n/, $mail->cc]; | ||
50 | } | ||
51 | 766 | ahitrov | if ( $mail->from ) { |
52 | $data->{from} = $mail->from; | ||
53 | } | ||
54 | 743 | ahitrov | if ( $mail->body_text ) { |
55 | $data->{text} = $mail->body_text; | ||
56 | } | ||
57 | if ( my $err = $sendmail->send({ email => $data }) ) { | ||
58 | 753 | ahitrov | $mail->status( 3 ); |
59 | 743 | ahitrov | $mail->error( $err ); |
60 | } else { | ||
61 | 753 | ahitrov | $mail->status( 1 ); |
62 | $mail->etime( $now->ymd('-').' '.$now->hms ); | ||
63 | $mail->error( undef ); | ||
64 | 743 | ahitrov | } |
65 | $mail->store; | ||
66 | } | ||
67 | } | ||
68 | } |