diff options
-rw-r--r-- | app/models/incoming_message.rb | 3 | ||||
-rw-r--r-- | spec/fixtures/files/space-boundary.email | 37 | ||||
-rw-r--r-- | spec/models/incoming_message_spec.rb | 8 |
3 files changed, 46 insertions, 2 deletions
diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb index fcb4671c5..113a06c55 100644 --- a/app/models/incoming_message.rb +++ b/app/models/incoming_message.rb @@ -75,8 +75,7 @@ class IncomingMessage < ActiveRecord::Base # Documentation at http://i.loveruby.net/en/projects/tmail/doc/ def mail(force = nil) if (!force.nil? || @mail.nil?) && !self.raw_email.nil? - # Hack round bug in TMail's MIME decoding. Example request which provokes it: - # http://www.whatdotheyknow.com/request/reviews_of_unduly_lenient_senten#incoming-4830 + # Hack round bug in TMail's MIME decoding. # Report of TMail bug: # http://rubyforge.org/tracker/index.php?func=detail&aid=21810&group_id=4512&atid=17370 copy_of_raw_data = self.raw_email.data.gsub(/; boundary=\s+"/ims,'; boundary="') diff --git a/spec/fixtures/files/space-boundary.email b/spec/fixtures/files/space-boundary.email new file mode 100644 index 000000000..37d65dbb5 --- /dev/null +++ b/spec/fixtures/files/space-boundary.email @@ -0,0 +1,37 @@ +From responder@example.com Wed Sep 03 10:44:18 2008 +Return-path: <responder@example.com> +Envelope-to: foi@sandwich.ukcod.org.uk +Delivery-date: Wed, 03 Sep 2008 10:44:18 +0100 +X-MimeOLE: Produced By Microsoft Exchange V6.5 +Content-class: urn:content-classes:message +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary= + "----_=_NextPart_001_01C90DA9.9B158D0D" +Subject: A subject +Date: Wed, 3 Sep 2008 10:44:05 +0100 +Message-ID: <D403C5D38B9BD6468928738951034DDE85A457@aglnex02.attorneygeneral.gsi.gov.uk> +X-MS-Has-Attach: yes +X-MS-TNEF-Correlator: +Thread-Topic: Freedom of Information request - An information request about + stuff +Thread-Index: AckNqOAr459KZB17Q1OIy1jxNVd9xAAAAnVAAAAWJ+A= +From: "A responder" <responder@example.com> +To: FOI Person <EMAIL_TO> + +This is a multi-part message in MIME format. + +------_=_NextPart_001_01C90DA9.9B158D0D +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: quoted-printable + +=20Apologies.=20Herewith. + +------_=_NextPart_001_01C90DA9.9B158D0D +Content-Type: application/octet-stream; name="Mr Gradwick.pdf" +Content-Transfer-Encoding: base64 +Content-Description: Mr Gradwick.pdf +Content-Disposition: attachment; filename="Mr Gradwick.pdf" + +xxx + +------_=_NextPart_001_01C90DA9.9B158D0D-- diff --git a/spec/models/incoming_message_spec.rb b/spec/models/incoming_message_spec.rb index 14bed281d..c27501b56 100644 --- a/spec/models/incoming_message_spec.rb +++ b/spec/models/incoming_message_spec.rb @@ -12,6 +12,14 @@ describe IncomingMessage, " when dealing with incoming mail" do ActionMailer::Base.deliveries.clear end + it 'should correctly parse multipart mails with a linebreak in the boundary marker' do + ir = info_requests(:fancy_dog_request) + receive_incoming_mail('space-boundary.email', ir.incoming_email) + message = ir.incoming_messages[1] + message.mail.parts.size.should == 2 + message.mail.multipart?.should == true + end + it "should return the mail Date header date for sent at" do @im.parse_raw_email!(true) @im.reload |