| 1 | ################################################################################ |
1 | ################################################################################ |
| 2 | # WeBWorK Online Homework Delivery System |
2 | # WeBWorK Online Homework Delivery System |
| 3 | # Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/ |
3 | # Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/ |
| 4 | # $CVSHeader: webwork-modperl/lib/WeBWorK/ContentGenerator/Instructor/SendMail.pm,v 1.39 2004/12/18 16:09:54 gage Exp $ |
4 | # $CVSHeader$ |
| 5 | # |
5 | # |
| 6 | # This program is free software; you can redistribute it and/or modify it under |
6 | # This program is free software; you can redistribute it and/or modify it under |
| 7 | # the terms of either: (a) the GNU General Public License as published by the |
7 | # the terms of either: (a) the GNU General Public License as published by the |
| 8 | # Free Software Foundation; either version 2, or (at your option) any later |
8 | # Free Software Foundation; either version 2, or (at your option) any later |
| 9 | # version, or (b) the "Artistic License" which comes with this package. |
9 | # version, or (b) the "Artistic License" which comes with this package. |
| … | |
… | |
| 370 | $self->{response} = 'send_email'; |
370 | $self->{response} = 'send_email'; |
| 371 | |
371 | |
| 372 | # check that recipients have been selected. |
372 | # check that recipients have been selected. |
| 373 | my @recipients = @{$self->{ra_send_to}}; |
373 | my @recipients = @{$self->{ra_send_to}}; |
| 374 | $self->addbadmessage(CGI::p("No recipients selected ")) unless @recipients; |
374 | $self->addbadmessage(CGI::p("No recipients selected ")) unless @recipients; |
| 375 | # check merge file |
375 | # get merge file |
| 376 | my $merge_file = ( defined($self->{merge_file}) ) ? $self->{merge_file} : 'None'; |
376 | my $merge_file = ( defined($self->{merge_file}) ) ? $self->{merge_file} : 'None'; |
| 377 | my $delimiter = ','; |
377 | my $delimiter = ','; |
| 378 | my $rh_merge_data = $self->read_scoring_file("$merge_file", "$delimiter"); |
378 | my $rh_merge_data = $self->read_scoring_file("$merge_file", "$delimiter"); |
| 379 | unless (ref($rh_merge_data) ) { |
379 | unless (ref($rh_merge_data) ) { |
| 380 | $self->addbadmessage(CGI::p("No merge data file")); |
380 | $self->addbadmessage(CGI::p("No merge data file")); |
| 381 | $self->addbadmessage(CGI::p("Can't read merge file $merge_file. No message sent")); |
381 | $self->addbadmessage(CGI::p("Can't read merge file $merge_file. No message sent")); |
| 382 | return; |
382 | return; |
| 383 | } ; |
383 | } ; |
| 384 | if (@recipients) { |
|
|
| 385 | $self->{rh_merge_data} = $rh_merge_data; |
|
|
| 386 | $self->{smtpServer} = $ce->{mail}->{smtpServer}; |
|
|
| 387 | my $post_connection_action = sub { |
|
|
| 388 | my $r = shift; |
|
|
| 389 | my $result_message = $self->mail_message_to_recipients(); |
|
|
| 390 | $self->email_notification($result_message); |
|
|
| 391 | }; |
|
|
| 392 | $r->post_connection($post_connection_action) ; |
|
|
| 393 | } |
384 | |
|
|
385 | |
| 394 | # foreach my $recipient (@recipients) { |
386 | foreach my $recipient (@recipients) { |
| 395 | # #warn "FIXME sending email to $recipient"; |
387 | #warn "FIXME sending email to $recipient"; |
| 396 | # my $ur = $self->{db}->getUser($recipient); #checked |
388 | my $ur = $self->{db}->getUser($recipient); #checked |
| 397 | # die "record for user $recipient not found" unless $ur; |
389 | die "record for user $recipient not found" unless $ur; |
| 398 | # unless ($ur->email_address) { |
390 | unless ($ur->email_address) { |
| 399 | # $self->addbadmessage(CGI::p("user $recipient does not have an email address -- skipping")); |
391 | $self->addbadmessage(CGI::p("user $recipient does not have an email address -- skipping")); |
| 400 | # next; |
392 | next; |
| 401 | # } |
393 | } |
| 402 | # my ($msg, $preview_header); |
394 | my ($msg, $preview_header); |
| 403 | # eval{ ($msg,$preview_header) = $self->process_message($ur,$rh_merge_data); }; |
395 | eval{ ($msg,$preview_header) = $self->process_message($ur,$rh_merge_data); }; |
| 404 | # $self->addbadmessage(CGI::p("There were errors in processing user $ur, merge file $merge_file. $@")) if $@; |
396 | $self->addbadmessage(CGI::p("There were errors in processing user $ur, merge file $merge_file. $@")) if $@; |
| 405 | # my $mailer = Mail::Sender->new({ |
397 | my $mailer = Mail::Sender->new({ |
| 406 | # from => $from, |
398 | from => $from, |
| 407 | # to => $ur->email_address, |
399 | to => $ur->email_address, |
| 408 | # smtp => $ce->{mail}->{smtpServer}, |
400 | smtp => $ce->{mail}->{smtpServer}, |
| 409 | # subject => $subject, |
401 | subject => $subject, |
| 410 | # headers => "X-Remote-Host: ".$r->get_remote_host(), |
402 | headers => "X-Remote-Host: ".$r->get_remote_host(), |
| 411 | # }); |
403 | }); |
| 412 | # unless (ref $mailer) { |
404 | unless (ref $mailer) { |
| 413 | # $self->addbadmessage(CGI::p("Failed to create a mailer for user $recipient: $Mail::Sender::Error")); |
405 | $self->addbadmessage(CGI::p("Failed to create a mailer for user $recipient: $Mail::Sender::Error")); |
| 414 | # next; |
406 | next; |
| 415 | # } |
407 | } |
| 416 | # unless (ref $mailer->Open()) { |
408 | unless (ref $mailer->Open()) { |
| 417 | # $self->addbadmessage(CGI::p("Failed to open the mailer for user $recipient: $Mail::Sender::Error")); |
409 | $self->addbadmessage(CGI::p("Failed to open the mailer for user $recipient: $Mail::Sender::Error")); |
| 418 | # next; |
410 | next; |
| 419 | # } |
411 | } |
| 420 | # my $MAIL = $mailer->GetHandle() or $self->addbadmessage(CGI::p("Couldn't get handle")); |
412 | my $MAIL = $mailer->GetHandle() or $self->addbadmessage(CGI::p("Couldn't get handle")); |
| 421 | # print $MAIL $msg || $self->addbadmessage(CGI::p("Couldn't print to $MAIL")); |
413 | print $MAIL $msg || $self->addbadmessage(CGI::p("Couldn't print to $MAIL")); |
| 422 | # close $MAIL || $self->addbadmessage(CGI::p("Couldn't close $MAIL")); |
414 | close $MAIL || $self->addbadmessage(CGI::p("Couldn't close $MAIL")); |
| 423 | # #warn "FIXME mailed to ", $ur->email_address, "from $from subject $subject"; |
415 | #warn "FIXME mailed to ", $ur->email_address, "from $from subject $subject"; |
| 424 | # |
416 | |
| 425 | # } |
417 | } |
| 426 | |
418 | |
| 427 | } else { |
419 | } else { |
| 428 | $self->addbadmessage(CGI::p("Didn't recognize button $action")); |
420 | $self->addbadmessage(CGI::p("Didn't recognize button $action")); |
| 429 | } |
421 | } |
| 430 | |
422 | |
| … | |
… | |
| 453 | unless $authz->hasPermissions($user, "send_mail"); |
445 | unless $authz->hasPermissions($user, "send_mail"); |
| 454 | |
446 | |
| 455 | if ($response eq 'preview') { |
447 | if ($response eq 'preview') { |
| 456 | $self->print_preview($setID); |
448 | $self->print_preview($setID); |
| 457 | } elsif (($response eq 'send_email')){ |
449 | } elsif (($response eq 'send_email')){ |
| 458 | my $message = CGI::i("Email is being sent to ". scalar(@{$self->{ra_send_to}})." recipients. You will be notified" |
450 | $self->addgoodmessage(CGI::p("Email sent to ". scalar(@{$self->{ra_send_to}})." students.")); |
| 459 | ." when the task is completed. This may take several minutes if the class is large." |
451 | $self->{message} .= CGI::i("Email sent to ". scalar(@{$self->{ra_send_to}})." students."); |
| 460 | ); |
|
|
| 461 | $self->addgoodmessage($message); |
|
|
| 462 | $self->{message} .= $message; |
|
|
| 463 | |
|
|
| 464 | $self->print_form($setID); |
452 | $self->print_form($setID); |
| 465 | } else { |
453 | } else { |
| 466 | $self->print_form($setID); |
454 | $self->print_form($setID); |
| 467 | } |
455 | } |
| 468 | |
456 | |