webgui/lib/WGDev/Command/Mail.pm

168 lines
4.1 KiB
Perl

package WGDev::Command::Mail;
# ABSTRACT: Sends emails via the WebGUI::Mail::Send API
use strict;
use warnings;
use 5.008008;
use Carp;
use parent qw(WGDev::Command::Base);
use WGDev::X ();
sub config_options {
return qw(
list|l
delete
processQueue
queue|q
toUser=s
toGroup=s
subject|s=s
from=s
cc=s
bcc=s
replyTo=s
returnPath=s
contentType=s
messageId=s
inReplyTo=s
isInbox
verbose|v
);
}
sub process {
my $self = shift;
my $wgd = $self->wgd;
my $verbose = $self->option('verbose');
# Handle special cases
if ( !$self->arguments ) {
my $dbh = $wgd->db->connect;
my $count = $dbh->selectrow_array('SELECT COUNT(*) FROM mailQueue');
print "Mail queue has @{[ $count || 'no' ]} message(s).\n";
if ( $self->option('list') ) {
for my $message (
@{ $dbh->selectcol_arrayref('SELECT message FROM mailQueue') }
)
{
print $message . "\n";
}
}
elsif ( $self->option('delete') ) {
$dbh->do('DELETE FROM mailQueue');
print "Deleted all messages from mail queue.\n";
}
elsif ( $self->option('processQueue') ) {
my $WORKFLOW_ID = 'pbworkflow000000000007';
my $found
= $dbh->selectrow_array(
'SELECT count(*) FROM Workflow WHERE workflowId = ?',
{}, $WORKFLOW_ID, );
if ( !$found ) {
WGDev::X->throw(
q{The default "Send Queued Email Messages" Workflow was not found,}
. q{ unable to run.} );
}
require WebGUI::Workflow::Instance;
my $session = $wgd->session;
WebGUI::Workflow::Instance->create( $session,
{ workflowId => $WORKFLOW_ID, } )->start;
print
qq{Triggered Workflow, the mail queue should be being processed as we speak.\n};
}
return 1;
}
my $session = $wgd->session;
my $to = join q{,}, $self->arguments;
my $body;
while ( my $line = <STDIN> ) {
last if $line eq ".\n";
$body .= $line;
}
# We are going to pass pretty much all options into WebGUI::Mail::Send::create
my $options = $self->{options};
$options->{to} = $to;
# Pull out the non-api options (or short-hands)
if ( my $s = delete $options->{s} ) {
$options->{subject} = $s;
}
my $queue = delete $options->{q} || delete $options->{queue};
if ($verbose) {
print $queue ? 'Queueing' : 'Sending', " message:\n";
print $body;
print "Using the following options:\n";
print Data::Dumper::Dumper( $self->{options} );
print 'SMTP Server: ' . $session->setting->get('smtpServer') . "\n";
print "emailToLog: 1\n" if $session->config->get('emailToLog');
}
require WebGUI::Mail::Send;
my $msg = WebGUI::Mail::Send->create( $session, $options );
WGDev::X->throw('Unable to instantiate message') unless $msg;
$msg->addText($body);
my $status;
if ($queue) {
$status = $msg->queue;
}
else {
$status = $msg->send;
}
print "Status: $status\n" if $verbose;
return 1;
}
1;
=head1 SYNOPSIS
wgd mail
wgd mail -s test pat@patspam.com
=head1 DESCRIPTION
Sends emails via the L<WebGUI::Mail::Send> API
If run with no arguments, displays the number of messages currently
in the mail queue.
Accepts all options supported by
L<WebGUI::Mail::Send::create|WebGUI::Mail::Send/create>, plus the
following additional items:
=head1 OPTIONS
=over 8
=item C<-l> C<--list>
List (print) the raw contents of the mail queue.
=item C<--delete>
Delete the contents of the mail queue.
=item C<--processQueue>
Trigger the default "Send Queued Email Messages" Workflow. This
will send all of the messages in the mail queue.
=item C<-q> C<--queue>
Add the message to the queue rather than sending it immediately.
=item C<-s>
Short-hand for C<--subject>.
=back
=cut