[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