[Koha-patches] [PATCH] Bug 6973 - this forces alerts to use the message queue

Robin Sheat robin at catalyst.net.nz
Thu Oct 13 04:58:31 CEST 2011


Alerts, such as serials claims and routing lists messages and new
member details originally used sendmail directly. Now they go into the
message queue so that they can use centralised configuration.
---
 C4/Letters.pm |   90 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 55 insertions(+), 35 deletions(-)

diff --git a/C4/Letters.pm b/C4/Letters.pm
index 0fccad4..63095f2 100644
--- a/C4/Letters.pm
+++ b/C4/Letters.pm
@@ -279,20 +279,18 @@ sub SendAlerts {
             my $innerletter = $letter;
             my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'});
             parseletter( $innerletter, 'borrowers', $_->{'borrowernumber'} );
+            $innerletter->{'content-type'} = 'text/plain; charset="utf8"';
 
             # ... then send mail
-            if ( $borinfo->{email} ) {
-                my %mail = (
-                    To      => $borinfo->{email},
-                    From    => $borinfo->{email},
-                    Subject => "" . $innerletter->{title},
-                    Message => "" . $innerletter->{content},
-                    'Content-Type' => 'text/plain; charset="utf8"',
-                    );
-                sendmail(%mail) or carp $Mail::Sendmail::error;
+            my %mail = (
+                borrowernumber         => $borinfo->{borrowernumber},
+                message_transport_type => 'email',
+                letter                 => $innerletter,
+                no_local_bcc           => 1,
+            );
+            EnqueueLetter( \%mail );
 
 # warn "sending to $mail{To} From $mail{From} subj $mail{Subject} Mess $mail{Message}";
-            }
         }
     }
     elsif ( $type eq 'claimacquisition' ) {
@@ -335,24 +333,24 @@ sub SendAlerts {
         }
         $letter->{content} =~ s/<<[^>]*>>//g;
         my $innerletter = $letter;
-
+        $innerletter->{'content-type'} = 'text/plain; charset="utf8"';
         # ... then send mail
         if (   $databookseller->{bookselleremail}
             || $databookseller->{contemail} )
         {
             my %mail = (
-                To => $databookseller->{bookselleremail}
+                to_address => $databookseller->{bookselleremail}
                   . (
                     $databookseller->{contemail}
                     ? "," . $databookseller->{contemail}
                     : ""
                   ),
-                From           => $userenv->{emailaddress},
-                Subject        => "" . $innerletter->{title},
-                Message        => "" . $innerletter->{content},
-                'Content-Type' => 'text/plain; charset="utf8"',
+                from_address           => $userenv->{emailaddress},
+                message_transport_type => 'email',
+                letter                 => $innerletter,
+                no_local_bcc           => 1,
             );
-            sendmail(%mail) or carp $Mail::Sendmail::error;
+            EnqueueLetter( \%mail );
         }
         if ( C4::Context->preference("LetterLog") ) {
             logaction(
@@ -422,15 +420,19 @@ sub SendAlerts {
             my $mail_msg  = $innerletter->{content};
             $mail_msg  ||= q{};
             $mail_subj ||= q{};
-
+            my $letter = {
+            	title => $mail_subj,
+            	content => $mail_msg,
+            	'content-type' => 'text/plain; charset="utf8"',
+            };
             my %mail = (
-                To => $mail_to,
-                From    => $userenv->{emailaddress},
-                Subject => $mail_subj,
-                Message => $mail_msg,
-                'Content-Type' => 'text/plain; charset="utf8"',
+                to_address             => $mail_to,
+                from_address           => $userenv->{emailaddress},
+                message_transport_type => 'email',
+                letter                 => $letter,
+                no_local_bcc           => 1,
             );
-            sendmail(%mail) or carp $Mail::Sendmail::error;
+            EnqueueLetter( \%mail );
             logaction(
                 "ACQUISITION",
                 "CLAIM ISSUE",
@@ -443,7 +445,7 @@ sub SendAlerts {
                   . $innerletter->{content}
             ) if C4::Context->preference("LetterLog");
         }
-    }    
+    }
    # send an "account details" notice to a newly created user 
     elsif ( $type eq 'members' ) {
         # must parse the password special, before it's hashed.
@@ -453,14 +455,15 @@ sub SendAlerts {
         parseletter( $letter, 'branches', $externalid->{'branchcode'} );
 
         my $branchdetails = GetBranchDetail($externalid->{'branchcode'});
+        $letter->{'content-type'} = 'text/plain; charset="utf8"';
+
         my %mail = (
-                To      =>     $externalid->{'emailaddr'},
-                From    =>  $branchdetails->{'branchemail'} || C4::Context->preference("KohaAdminEmailAddress"),
-                Subject => $letter->{'title'}, 
-                Message => $letter->{'content'},
-                'Content-Type' => 'text/plain; charset="utf8"',
+            to_address         => $externalid->{'emailaddr'},
+            message_transport_type => 'email',
+            letter                 => $letter,
+            no_local_bcc           => 1,
         );
-        sendmail(%mail) or carp $Mail::Sendmail::error;
+        EnqueueLetter( \%mail );
     }
 }
 
@@ -633,13 +636,30 @@ sub EnqueueLetter ($) {
     # If we have any attachments we should encode then into the body.
     if ( $params->{'attachments'} ) {
         $params->{'letter'} = _add_attachments(
-            {   letter      => $params->{'letter'},
+            {
+                letter      => $params->{'letter'},
                 attachments => $params->{'attachments'},
                 message     => MIME::Lite->new( Type => 'multipart/mixed' ),
             }
         );
     }
 
+    # If we aren't given a from address, we first go for the user's
+    # branch (which may be the librarians, but that's OK) email, if that doesn't
+    # work, we go for the koha admin address.
+    if ( !$params->{'from_address'} ) {
+        my $userenv       = C4::Context->userenv;
+        my $branch        = $userenv->{branch};
+        my $branch_detail = GetBranchDetail($branch);
+        my $branch_email  = $branch_detail->{branchemail};
+        $params->{from_address} = $branch_email
+          || C4::Context->preference('KohaAdminEmailAddress');
+    }
+
+    # Set a reply-to if there isn't one already.
+    $params->{'reply_to_address'} = $params->{from_address}
+      if !$params->{reply_to_address};
+
     my $dbh       = C4::Context->dbh();
     my $statement = << 'ENDSQL';
 INSERT INTO message_queue
@@ -652,9 +672,9 @@ ENDSQL
 
     my $sth    = $dbh->prepare($statement);
     my $result = $sth->execute(
-        $params->{'borrowernumber'},                # borrowernumber
-        $params->{'letter'}->{'title'},             # subject
-        $params->{'letter'}->{'content'},           # content
+        $params->{'borrowernumber'},         # borrowernumber
+        $params->{'letter'}->{'title'},      # subject
+        $params->{'letter'}->{'content'},    # content
         $params->{'letter'}->{'metadata'} || '',    # metadata
         $params->{'letter'}->{'code'}     || '',    # letter_code
         $params->{'letter'}->{'content-type'},      # content_type
-- 
1.7.4.1



More information about the Koha-patches mailing list