diff --git a/lib/WebGUI/Content/NewsletterManager.pm b/lib/WebGUI/Content/NewsletterManager.pm index 2509fd9..0ea8603 100644 --- a/lib/WebGUI/Content/NewsletterManager.pm +++ b/lib/WebGUI/Content/NewsletterManager.pm @@ -14,6 +14,7 @@ sub handler { my $class = $module eq 'manage' ? 'WebGUI::Mailing::Admin' : $module eq 'mailing' ? 'WebGUI::Mailing' + : $module eq 'bounce' ? 'WebGUI::Mailing::Bounce' : return ; diff --git a/lib/WebGUI/Mailing/Admin.pm b/lib/WebGUI/Mailing/Admin.pm index 404c080..1740047 100644 --- a/lib/WebGUI/Mailing/Admin.pm +++ b/lib/WebGUI/Mailing/Admin.pm @@ -20,7 +20,10 @@ sub getAdminConsole { my $url = $session->url; my $ac = WebGUI::AdminConsole->new( $session ); - $ac->addSubmenuItem( $url->page( 'newsletter=manage;func=settings' ), 'Newsletter settings' ); + + $ac->addSubmenuItem( $url->page( 'newsletter=manage' ), 'Manage mailings' ); + $ac->addSubmenuItem( $url->page( 'newsletter=manage;func=settings' ), 'Newsletter settings' ); + $ac->addSubmenuItem( $url->page( 'newsletter=bounce;func=bounceReport' ), 'Bounce scores' ); return $ac; } diff --git a/lib/WebGUI/Mailing/Bounce.pm b/lib/WebGUI/Mailing/Bounce.pm new file mode 100644 index 0000000..f753afe --- /dev/null +++ b/lib/WebGUI/Mailing/Bounce.pm @@ -0,0 +1,58 @@ +package WebGUI::Mailing::Bounce; + +use strict; +use warnings; + +use WebGUI::Mailing::Admin; + +sub getBounceScore { + my $self = shift; + my $address = shift; + my $session = $self->session; + + my $it = WebGUI::Mailing::Email->getAllIterator( $session, { + constraints => [ + { 'sentTo=?' => [ $address ] }, + { 'status<>?' => [ 'queued' ] }, + ], + orderBy => 'sendDate desc', + limit => 10, + } ); + + my $score = 0; + while ( my $email = $it->() ) { + $score += 1 if $email->get('status') eq 'bounced'; + } + + return $score; +} + +sub new { + my $class = shift; + my $session = shift; + + bless { _session => $session }, $class; +} + +sub session { + return (shift)->{ _session }; +} + +sub www_bounceReport { + my $self = shift; + my $session = $self->session; + + my $sth = $session->db->read( 'select distinct sentTo from WGMailing_queue where sentTo is not null' ); + + my $output = ''; + while ( my ($email) = $sth->array ) { + my $score = $self->getBounceScore( $email ); + $output .= ""; + } + $output .= '
EmailBounce score
$email$score
'; + + return WebGUI::Mailing::Admin->new( $session )->getAdminConsole->render( $output, 'Bounce score overview' ); +} + +1; + diff --git a/sbin/newsletter-transport.pl b/sbin/newsletter-transport.pl index fd21921..3fc117c 100755 --- a/sbin/newsletter-transport.pl +++ b/sbin/newsletter-transport.pl @@ -1,5 +1,12 @@ #!/data/wre/prereqs/bin/perl +BEGIN { + unshift @INC, qw( + /data/custom/webgui_newsletter/lib + /data/WebGUI/lib + ); +} + use strict; use Mail::DeliveryStatus::BounceParser; @@ -12,12 +19,6 @@ my %configs = ( 'martintwee.oqapi.nl' => 'martintwee.oqapi.nl.conf', ); -BEGIN { - unshift @INC, qw( - /data/custom/webgui_newsletter/lib - /data/WebGUI/lib - ); -} #---------------------------------------------------------------