зеркало из https://github.com/mozilla/pjs.git
114 строки
3.8 KiB
Perl
114 строки
3.8 KiB
Perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
|
|
#
|
|
# The contents of this file are subject to the Mozilla Public
|
|
# License Version 1.1 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# The Original Code is the Bugzilla Bug Tracking System.
|
|
#
|
|
# The Initial Developer of the Original Code is Netscape Communications
|
|
# Corporation. Portions created by Netscape are
|
|
# Copyright (C) 1998 Netscape Communications Corporation. All
|
|
# Rights Reserved.
|
|
#
|
|
# Contributor(s): Terry Weissman <terry@mozilla.org>,
|
|
# Bryce Nesbitt <bryce-mozilla@nextbus.com>
|
|
# Dan Mosedale <dmose@mozilla.org>
|
|
# Alan Raetz <al_raetz@yahoo.com>
|
|
# Jacob Steenhagen <jake@actex.net>
|
|
# Matthew Tuck <matty@chariot.net.au>
|
|
# Bradley Baetz <bbaetz@student.usyd.edu.au>
|
|
# J. Paul Reed <preed@sigkill.com>
|
|
# Gervase Markham <gerv@gerv.net>
|
|
# Byron Jones <bugzilla@glob.com.au>
|
|
# Frédéric Buclin <LpSolit@gmail.com>
|
|
# Max Kanat-Alexander <mkanat@bugzilla.org>
|
|
|
|
package Bugzilla::Mailer;
|
|
|
|
use strict;
|
|
|
|
use base qw(Exporter);
|
|
@Bugzilla::Mailer::EXPORT = qw(MessageToMTA);
|
|
|
|
use Bugzilla::Constants;
|
|
use Bugzilla::Error;
|
|
use Bugzilla::Util;
|
|
|
|
use Encode qw(encode);
|
|
use Email::MIME;
|
|
# Loading this gives us encoding_set.
|
|
use Email::MIME::Modifier;
|
|
use Email::Send;
|
|
|
|
sub MessageToMTA {
|
|
my ($msg) = (@_);
|
|
my $method = Bugzilla->params->{'mail_delivery_method'};
|
|
return if $method eq 'None';
|
|
|
|
my $email = ref($msg) ? $msg : Email::MIME->new($msg);
|
|
foreach my $part ($email->parts) {
|
|
$part->charset_set('UTF-8') if Bugzilla->params->{'utf8'};
|
|
$part->encoding_set('quoted-printable') if !is_7bit_clean($part->body);
|
|
}
|
|
|
|
# Encode the headers correctly in quoted-printable
|
|
foreach my $header qw(From To Cc Reply-To Sender Errors-To Subject) {
|
|
if (my $value = $email->header($header)) {
|
|
my $encoded = encode('MIME-Q', $value);
|
|
$email->header_set($header, $encoded);
|
|
}
|
|
}
|
|
|
|
my $from = $email->header('From');
|
|
|
|
my ($hostname, @args);
|
|
if ($method eq "Sendmail") {
|
|
if (ON_WINDOWS) {
|
|
$Email::Send::Sendmail::SENDMAIL = SENDMAIL_EXE;
|
|
}
|
|
push @args, "-i";
|
|
push(@args, "-f$from") if $from;
|
|
push(@args, "-ODeliveryMode=deferred")
|
|
if !Bugzilla->params->{"sendmailnow"};
|
|
}
|
|
else {
|
|
# Sendmail will automatically append our hostname to the From
|
|
# address, but other mailers won't.
|
|
my $urlbase = Bugzilla->params->{'urlbase'};
|
|
$urlbase =~ m|//([^/]+)/?|;
|
|
$hostname = $1;
|
|
$from .= "\@$hostname" if $from !~ /@/;
|
|
$email->header_set('From', $from);
|
|
}
|
|
|
|
if ($method eq "SMTP") {
|
|
push @args, Host => Bugzilla->params->{"smtpserver"},
|
|
Hello => $hostname;
|
|
}
|
|
|
|
if ($method eq "Test") {
|
|
my $filename = bz_locations()->{'datadir'} . '/mailer.testfile';
|
|
open TESTFILE, '>>', $filename;
|
|
print TESTFILE "\n\n---\n\n" . $email->as_string;
|
|
close TESTFILE;
|
|
}
|
|
else {
|
|
# This is useful for both Sendmail and Qmail, so we put it out here.
|
|
local $ENV{PATH} = SENDMAIL_PATH;
|
|
my $mailer = Email::Send->new({ mailer => $method,
|
|
mailer_args => \@args });
|
|
my $retval = $mailer->send($email);
|
|
ThrowCodeError('mail_send_error', { msg => $retval, mail => $email })
|
|
if !$retval;
|
|
}
|
|
}
|
|
|
|
1;
|