16 |
our @EXPORT = qw( |
our @EXPORT = qw( |
17 |
); |
); |
18 |
|
|
19 |
our $VERSION = '0.7'; |
our $VERSION = '0.8'; |
20 |
|
|
21 |
use Class::DBI::Loader; |
use Class::DBI::Loader; |
22 |
use Email::Valid; |
use Email::Valid; |
116 |
|
|
117 |
$self->{'hash_len'} ||= 8; |
$self->{'hash_len'} ||= 8; |
118 |
|
|
119 |
|
$self->{'loader'}->find_class('received')->set_sql( |
120 |
|
'received' => qq{ |
121 |
|
select |
122 |
|
received.id as id, |
123 |
|
lists.name as list, |
124 |
|
users.ext_id as ext_id, |
125 |
|
users.email as email, |
126 |
|
bounced,received.date as date |
127 |
|
from received |
128 |
|
join lists on lists.id = list_id |
129 |
|
join users on users.id = user_id |
130 |
|
}, |
131 |
|
); |
132 |
|
|
133 |
$self ? return $self : return undef; |
$self ? return $self : return undef; |
134 |
} |
} |
135 |
|
|
489 |
|
|
490 |
=back |
=back |
491 |
|
|
492 |
|
Any other driver name will try to use C<Email::Send::that_driver> module. |
493 |
|
|
494 |
Default sleep wait between two messages is 3 seconds. |
Default sleep wait between two messages is 3 seconds. |
495 |
|
|
496 |
|
This method will return number of succesfully sent messages. |
497 |
|
|
498 |
=cut |
=cut |
499 |
|
|
500 |
sub send_queued_messages { |
sub send_queued_messages { |
507 |
my $sleep = $arg->{'sleep'}; |
my $sleep = $arg->{'sleep'}; |
508 |
$sleep ||= 3 unless defined($sleep); |
$sleep ||= 3 unless defined($sleep); |
509 |
|
|
510 |
|
# number of messages sent o.k. |
511 |
|
my $ok = 0; |
512 |
|
|
513 |
my $email_send_driver = 'Email::Send::IO'; |
my $email_send_driver = 'Email::Send::IO'; |
514 |
my @email_send_options; |
my @email_send_options; |
515 |
|
|
516 |
if (lc($driver) eq 'smtp') { |
if (lc($driver) eq 'smtp') { |
517 |
$email_send_driver = 'Email::Send::SMTP'; |
$email_send_driver = 'Email::Send::SMTP'; |
518 |
@email_send_options = ['127.0.0.1']; |
@email_send_options = ['127.0.0.1']; |
519 |
|
} elsif ($driver && $driver ne '') { |
520 |
|
$email_send_driver = 'Email::Send::' . $driver; |
521 |
} else { |
} else { |
522 |
warn "dumping all messages to STDERR\n"; |
warn "dumping all messages to STDERR\n"; |
523 |
} |
} |
587 |
} |
} |
588 |
|
|
589 |
croak "can't send e-mail: $sent_status\n\nOriginal e-mail follows:\n".$m_obj->as_string unless ($sent_status); |
croak "can't send e-mail: $sent_status\n\nOriginal e-mail follows:\n".$m_obj->as_string unless ($sent_status); |
590 |
my @bad = @{ $sent_status->prop('bad') }; |
my @bad; |
591 |
|
@bad = @{ $sent_status->prop('bad') } if (eval { $sent_status->can('prop') }); |
592 |
croak "failed sending to ",join(",",@bad) if (@bad); |
croak "failed sending to ",join(",",@bad) if (@bad); |
593 |
|
|
594 |
if ($sent_status) { |
if ($sent_status) { |
602 |
|
|
603 |
print " - $sent_status\n"; |
print " - $sent_status\n"; |
604 |
|
|
605 |
|
$ok++; |
606 |
} else { |
} else { |
607 |
warn "ERROR: $sent_status\n"; |
warn "ERROR: $sent_status\n"; |
608 |
} |
} |
618 |
$m->dbi_commit; |
$m->dbi_commit; |
619 |
} |
} |
620 |
|
|
621 |
|
return $ok; |
622 |
|
|
623 |
} |
} |
624 |
|
|
625 |
=head2 inbox_message |
=head2 inbox_message |
718 |
# print "message_id: ",($message_id || "not found")," -- $is_bounce\n"; |
# print "message_id: ",($message_id || "not found")," -- $is_bounce\n"; |
719 |
} |
} |
720 |
|
|
721 |
|
=head2 received_messages |
722 |
|
|
723 |
|
Returns all received messages for given list or user. |
724 |
|
|
725 |
|
my @received = $nos->received_message( |
726 |
|
list => 'My list', |
727 |
|
email => "john.doe@example.com", |
728 |
|
); |
729 |
|
|
730 |
|
Each element in returned array will have following structure: |
731 |
|
|
732 |
|
{ |
733 |
|
id => 42, # unique ID of received message |
734 |
|
list => 'My list', # useful only of filtering by email |
735 |
|
ext_id => 9999, # ext_id from message user |
736 |
|
email => 'jdoe@example.com', # e-mail of user |
737 |
|
bounced => 0, # true value if message is bounce |
738 |
|
date => '2005-08-24 18:57:24', # date of recival in ISO format |
739 |
|
} |
740 |
|
|
741 |
|
|
742 |
|
=cut |
743 |
|
|
744 |
|
sub received_messages { |
745 |
|
my $self = shift; |
746 |
|
|
747 |
|
my $arg = {@_}; |
748 |
|
|
749 |
|
croak "need list name or email" unless ($arg->{'list'} || $arg->{'email'}); |
750 |
|
|
751 |
|
$arg->{'list'} = lc($arg->{'list'}); |
752 |
|
$arg->{'email'} = lc($arg->{'email'}); |
753 |
|
|
754 |
|
my @out; |
755 |
|
|
756 |
|
my $sth = $self->{'loader'}->find_class('received')->sql_received; |
757 |
|
$sth->execute(); |
758 |
|
return $sth->fetchall_hash; |
759 |
|
} |
760 |
|
|
761 |
|
|
762 |
=head1 INTERNAL METHODS |
=head1 INTERNAL METHODS |
763 |
|
|
990 |
aliases => '/etc/aliases', |
aliases => '/etc/aliases', |
991 |
); |
); |
992 |
|
|
993 |
|
If you are writing SOAP server (like C<soap.cgi> example), you will need to |
994 |
|
call this method once to make new instance of Nos::SOAP and specify C<dsn> |
995 |
|
and options for it. |
996 |
|
|
997 |
=cut |
=cut |
998 |
|
|
999 |
sub new { |
sub new { |
1164 |
|
|
1165 |
You can specify just C<list> or C<email> or any combination of those. |
You can specify just C<list> or C<email> or any combination of those. |
1166 |
|
|
1167 |
It will return array of hashes with following structure: |
For format of returned array element see C<received_messages>. |
|
|
|
|
{ |
|
|
id => 42, # unique ID of received message |
|
|
list => 'My list', # useful only of filtering by email |
|
|
ext_id => 9999, # ext_id from message user |
|
|
email => 'jdoe@example.com', # e-mail of user |
|
|
bounced => 0, # true value if message is bounce |
|
|
date => '2005-08-24 18:57:24', # date of recival in ISO format |
|
|
} |
|
1168 |
|
|
1169 |
=head2 MessagesReceivedByDate |
=head2 MessagesReceivedByDate |
1170 |
|
|