summaryrefslogtreecommitdiff
path: root/rt/t/mail
diff options
context:
space:
mode:
Diffstat (limited to 'rt/t/mail')
-rw-r--r--rt/t/mail/gnupg-incoming.t3
-rw-r--r--rt/t/mail/gnupg-realmail.t13
-rw-r--r--rt/t/mail/gnupg-special.t86
-rw-r--r--rt/t/mail/outlook.t272
-rw-r--r--rt/t/mail/wrong_mime_charset.t25
5 files changed, 386 insertions, 13 deletions
diff --git a/rt/t/mail/gnupg-incoming.t b/rt/t/mail/gnupg-incoming.t
index ec313330a..230aa9c58 100644
--- a/rt/t/mail/gnupg-incoming.t
+++ b/rt/t/mail/gnupg-incoming.t
@@ -34,8 +34,7 @@ RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
my ($baseurl, $m) = RT::Test->started_ok;
# configure key for General queue
-$m->get( $baseurl."?user=root;pass=password" );
-$m->content_like(qr/Logout/, 'we did log in');
+ok( $m->login, 'we did log in' );
$m->get( $baseurl.'/Admin/Queues/');
$m->follow_link_ok( {text => 'General'} );
$m->submit_form( form_number => 3,
diff --git a/rt/t/mail/gnupg-realmail.t b/rt/t/mail/gnupg-realmail.t
index de1d95815..198402b23 100644
--- a/rt/t/mail/gnupg-realmail.t
+++ b/rt/t/mail/gnupg-realmail.t
@@ -2,7 +2,7 @@
use strict;
use warnings;
-use RT::Test tests => 197;
+use RT::Test tests => 196;
plan skip_all => 'GnuPG required.'
unless eval 'use GnuPG::Interface; 1';
@@ -37,20 +37,11 @@ $m->submit_form( form_number => 3,
fields => { CorrespondAddress => 'rt-recipient@example.com' } );
$m->content_like(qr/rt-recipient\@example.com.* - never/, 'has key info.');
-diag "load Everyone group" if $ENV{'TEST_VERBOSE'};
-my $everyone;
-{
- $everyone = RT::Group->new( $RT::SystemUser );
- $everyone->LoadSystemInternalGroup('Everyone');
- ok $everyone->id, "loaded 'everyone' group";
-}
-
RT::Test->set_rights(
- Principal => $everyone,
+ Principal => 'Everyone',
Right => ['CreateTicket'],
);
-
my $eid = 0;
for my $usage (qw/signed encrypted signed&encrypted/) {
for my $format (qw/MIME inline/) {
diff --git a/rt/t/mail/gnupg-special.t b/rt/t/mail/gnupg-special.t
new file mode 100644
index 000000000..7e50819e8
--- /dev/null
+++ b/rt/t/mail/gnupg-special.t
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use RT::Test tests => 11;
+
+plan skip_all => 'GnuPG required.'
+ unless eval 'use GnuPG::Interface; 1';
+plan skip_all => 'gpg executable is required.'
+ unless RT::Test->find_executable('gpg');
+
+use File::Temp qw(tempdir);
+my $homedir = tempdir( CLEANUP => 1 );
+
+# catch any outgoing emails
+RT::Test->set_mail_catcher;
+
+RT->Config->Set( 'GnuPG',
+ Enable => 1,
+ OutgoingMessagesFormat => 'RFC' );
+
+RT->Config->Set( 'GnuPGOptions',
+ homedir => $homedir,
+ 'no-permission-warning' => undef);
+
+RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
+
+RT::Test->import_gnupg_key('rt-recipient@example.com');
+RT::Test->import_gnupg_key('rt-test@example.com', 'public');
+
+my ($baseurl, $m) = RT::Test->started_ok;
+
+ok( $m->login, 'we did log in' );
+
+# configure key for General queue
+{
+ $m->get( $baseurl.'/Admin/Queues/');
+ $m->follow_link_ok( {text => 'General'} );
+ $m->submit_form(
+ form_number => 3,
+ fields => { CorrespondAddress => 'rt-recipient@example.com' },
+ );
+ $m->content_like(qr/rt-recipient\@example.com.* - never/, 'has key info.');
+}
+
+ok(my $user = RT::User->new($RT::SystemUser));
+ok($user->Load('root'), "Loaded user 'root'");
+$user->SetEmailAddress('recipient@example.com');
+
+RT::Test->set_rights(
+ Principal => 'Everyone',
+ Right => ['CreateTicket'],
+);
+
+{
+ my $id = send_via_mailgate('quoted_inline_signature.txt');
+
+ my $tick = RT::Ticket->new( $RT::SystemUser );
+ $tick->Load( $id );
+ ok ($tick->id, "loaded ticket #$id");
+
+ my $txn = $tick->Transactions->First;
+ my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
+
+ is( $msg->GetHeader('X-RT-Privacy'),
+ undef,
+ "no privacy is set as this ticket is not encrypted"
+ );
+
+ my @mail = RT::Test->fetch_caught_mails;
+ is(scalar @mail, 1, "autoreply only");
+}
+
+sub send_via_mailgate {
+ my $fname = shift;
+ my $emaildatadir = RT::Test::get_relocatable_dir(File::Spec->updir(),
+ qw(data gnupg emails special));
+ my $file = File::Spec->catfile( $emaildatadir, $fname );
+ my $mail = RT::Test->file_content($file);
+
+ my ($status, $id) = RT::Test->send_via_mailgate($mail);
+ is ($status >> 8, 0, "the mail gateway exited normally");
+ ok ($id, "got id of a newly created ticket - $id");
+ return $id;
+}
+
diff --git a/rt/t/mail/outlook.t b/rt/t/mail/outlook.t
new file mode 100644
index 000000000..15bfa21bc
--- /dev/null
+++ b/rt/t/mail/outlook.t
@@ -0,0 +1,272 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
+# <jesse.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/copyleft/gpl.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+
+=head1 NAME
+
+rt-mailgate - Mail interface to RT3.
+
+=cut
+
+use strict;
+use warnings;
+
+use RT::Test tests => 43;
+my ($baseurl, $m) = RT::Test->started_ok;
+# 12.0 is outlook 2007, 14.0 is 2010
+for my $mailer ( 'Microsoft Office Outlook 12.0', 'Microsoft Outlook 14.0' ) {
+ diag "Test mail with multipart/alternative" if $ENV{'TEST_VERBOSE'};
+ {
+ my $text = <<EOF;
+From: root\@localhost
+X-Mailer: $mailer
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: outlook basic test
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0004_01CB045C.A5A075D0"
+
+------=_NextPart_000_0004_01CB045C.A5A075D0
+Content-Type: text/plain;
+ charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+here is the content
+
+
+
+blahmm
+
+another line
+
+
+------=_NextPart_000_0004_01CB045C.A5A075D0
+Content-Type: text/html;
+ charset="us-ascii"
+Content-Transfer-Encoding: quoted-printable
+
+<html>this is fake</html>
+
+
+------=_NextPart_000_0004_01CB045C.A5A075D0--
+
+EOF
+
+ my $content = <<EOF;
+here is the content
+
+blahmm
+another line
+EOF
+ test_email( $text, $content,
+ $mailer . ' with multipart/alternative, \n\n are replaced' );
+ }
+
+ diag "Test mail with multipart/mixed, with multipart/alternative in it"
+ if $ENV{'TEST_VERBOSE'};
+ {
+ my $text = <<EOF;
+From: root\@localhost
+X-Mailer: $mailer
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: outlook basic test
+Content-Type: multipart/mixed;
+ boundary="----=_NextPart_000_000F_01CB045E.5222CB40"
+
+------=_NextPart_000_000F_01CB045E.5222CB40
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_001_0010_01CB045E.5222CB40"
+
+
+------=_NextPart_001_0010_01CB045E.5222CB40
+Content-Type: text/plain;
+ charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+foo
+
+
+
+bar
+
+baz
+
+
+------=_NextPart_001_0010_01CB045E.5222CB40
+Content-Type: text/html;
+ charset="us-ascii"
+Content-Transfer-Encoding: quoted-printable
+
+<html>this is fake</html>
+
+------=_NextPart_001_0010_01CB045E.5222CB40--
+
+------=_NextPart_000_000F_01CB045E.5222CB40
+Content-Type: text/plain;
+ name="att.txt"
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: attachment;
+ filename="att.txt"
+
+this is the attachment! :)=0A=
+
+------=_NextPart_000_000F_01CB045E.5222CB40--
+EOF
+
+ my $content = <<EOF;
+foo
+
+bar
+baz
+EOF
+ test_email( $text, $content,
+ $mailer . ' with multipart/multipart, \n\n are replaced' );
+ }
+
+ diag "Test mail with with outlook, but the content type is text/plain"
+ if $ENV{'TEST_VERBOSE'};
+ {
+ my $text = <<EOF;
+From: root\@localhost
+X-Mailer: $mailer
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: outlook basic test
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+foo
+
+
+
+bar
+
+baz
+
+EOF
+
+ my $content = <<EOF;
+foo
+
+
+
+bar
+
+baz
+
+EOF
+ test_email( $text, $content,
+ $mailer . ' with only text/plain, \n\n are not replaced' );
+ }
+}
+
+diag "Test mail with with multipart/alternative but x-mailer is not outlook "
+ if $ENV{'TEST_VERBOSE'};
+{
+ my $text = <<EOF;
+From: root\@localhost
+X-Mailer: Mutt
+To: rt\@@{[RT->Config->Get('rtname')]}
+Subject: outlook basic test
+Content-Type: multipart/alternative;
+ boundary="----=_NextPart_000_0004_01CB045C.A5A075D0"
+
+------=_NextPart_000_0004_01CB045C.A5A075D0
+Content-Type: text/plain;
+ charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+foo
+
+
+
+bar
+
+baz
+
+
+------=_NextPart_000_0004_01CB045C.A5A075D0
+Content-Type: text/html;
+ charset="us-ascii"
+Content-Transfer-Encoding: quoted-printable
+
+<html>this is fake</html>
+
+
+------=_NextPart_000_0004_01CB045C.A5A075D0--
+
+EOF
+
+ my $content = <<EOF;
+foo
+
+
+
+bar
+
+baz
+
+EOF
+ test_email( $text, $content, 'without outlook, \n\n are not replaced' );
+}
+
+sub test_email {
+ my ( $text, $content, $msg ) = @_;
+ my ( $status, $id ) = RT::Test->send_via_mailgate($text);
+ is( $status >> 8, 0, "The mail gateway exited normally" );
+ ok( $id, "Created ticket" );
+
+ my $ticket = RT::Test->last_ticket;
+ isa_ok( $ticket, 'RT::Ticket' );
+ is( $ticket->Id, $id, "correct ticket id" );
+ is( $ticket->Subject, 'outlook basic test', "subject of ticket $id" );
+ my $txns = $ticket->Transactions;
+ $txns->Limit( FIELD => 'Type', VALUE => 'Create' );
+ my $txn = $txns->First;
+
+ is( $txn->Content, $content, $msg );
+}
+
diff --git a/rt/t/mail/wrong_mime_charset.t b/rt/t/mail/wrong_mime_charset.t
new file mode 100644
index 000000000..f53c872e5
--- /dev/null
+++ b/rt/t/mail/wrong_mime_charset.t
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use RT::Test nodata => 1, tests => 3;
+
+use_ok('RT::I18N');
+use utf8;
+use Encode;
+my $test_string = 'À';
+my $encoded_string = encode( 'iso-8859-1', $test_string );
+my $mime = MIME::Entity->build(
+ Subject => $encoded_string,
+ Data => [$encoded_string],
+);
+
+# set the wrong charset mime in purpose
+$mime->head->mime_attr( "Content-Type.charset" => 'utf8' );
+
+RT::I18N::SetMIMEEntityToEncoding( $mime, 'iso-8859-1' );
+my $subject = decode( 'iso-8859-1', $mime->head->get('Subject') );
+chomp $subject;
+is( $subject, $test_string, 'subject is set to iso-8859-1' );
+my $body = decode( 'iso-8859-1', $mime->stringify_body );
+chomp $body;
+is( $body, $test_string, 'body is set to iso-8859-1' );