mirror of
https://github.com/TracksApp/tracks.git
synced 2025-09-22 05:50:47 +02:00
handle multipart emails better in message_gateway
This commit is contained in:
parent
cbf7a6fd43
commit
29c5103a98
4 changed files with 1534 additions and 2 deletions
|
@ -65,8 +65,25 @@ class MessageGateway < ActionMailer::Base
|
|||
end
|
||||
|
||||
def get_first_text_plain_part(email)
|
||||
parts = email.parts.reject{|part| !part.content_type.start_with?("text/plain") }
|
||||
return parts ? sanitize(parts[0].decoded.strip) : ""
|
||||
# get all parts from multipart/alternative attachments
|
||||
parts = get_all_parts(email.parts)
|
||||
|
||||
# remove all parts that are not text/plain
|
||||
parts.reject{|part| !part.content_type.start_with?("text/plain") }
|
||||
|
||||
return parts.count > 0 ? sanitize(parts[0].decoded.strip) : ""
|
||||
end
|
||||
|
||||
def get_all_parts(parts)
|
||||
# return a flattened array of parts. If a multipart attachment is found, recurse over its parts
|
||||
all_parts = parts.inject([]) do |set, elem|
|
||||
if elem.content_type.start_with?("multipart/alternative")
|
||||
# recurse to handle multiparts in this multipart
|
||||
set += get_all_parts(elem.parts)
|
||||
else
|
||||
set << elem
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
1405
test/fixtures/email_with_multipart.txt
vendored
Normal file
1405
test/fixtures/email_with_multipart.txt
vendored
Normal file
File diff suppressed because it is too large
Load diff
92
test/fixtures/email_with_winmail.txt
vendored
Normal file
92
test/fixtures/email_with_winmail.txt
vendored
Normal file
|
@ -0,0 +1,92 @@
|
|||
From lrbalt@gmail.com Fri Aug 24 07:31:58 2012
|
||||
Return-Path: <lrbalt@gmail.com>
|
||||
From: 5555555555@tmomail.net
|
||||
To: 5555555555@tmomail.net
|
||||
Subject: RE: email with winmail.dat
|
||||
Date: Fri, 24 Aug 2012 16:31:56 +0200
|
||||
MIME-Version: 1.0
|
||||
Content-Type: multipart/mixed; boundary="----=_NextPart_000_031D_01CD8215.FB27DC30"
|
||||
X-Mailer: Microsoft Outlook 14.0
|
||||
|
||||
This is a multipart message in MIME format.
|
||||
|
||||
------=_NextPart_000_031D_01CD8215.FB27DC30
|
||||
Content-Type: text/plain; charset="us-ascii"
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Now we replied to self
|
||||
|
||||
|
||||
|
||||
Van: Reinier Balt [mailto:lrbalt@gmail.com]
|
||||
Verzonden: vrijdag 24 augustus 2012 16:32
|
||||
Aan: 'Reinier Balt'
|
||||
Onderwerp: email with winmail.dat
|
||||
|
||||
|
||||
|
||||
Winmail.dat causes me to email myself
|
||||
|
||||
|
||||
------=_NextPart_000_031D_01CD8215.FB27DC30
|
||||
Content-Type: application/ms-tnef; name="winmail.dat"
|
||||
Content-Transfer-Encoding: base64
|
||||
Content-Disposition: attachment; filename="winmail.dat"
|
||||
|
||||
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
|
||||
QU46UkVJTkkAAAAARaY=
|
||||
|
||||
------=_NextPart_000_031D_01CD8215.FB27DC30--
|
||||
|
||||
|
|
@ -40,7 +40,25 @@ class MessageGatewayTest < ActiveSupport::TestCase
|
|||
assert_equal(@user, message_todo.user)
|
||||
assert_equal("This is the message body", message_todo.notes)
|
||||
end
|
||||
|
||||
def test_email_with_winmail_dat
|
||||
todo_count = Todo.count
|
||||
|
||||
load_message('email_with_winmail.txt')
|
||||
|
||||
# assert some stuff about it being created
|
||||
assert_equal(todo_count+1, Todo.count)
|
||||
end
|
||||
|
||||
def test_email_with_multipart_attachments
|
||||
todo_count = Todo.count
|
||||
|
||||
load_message('email_with_multipart.txt')
|
||||
|
||||
# assert some stuff about it being created
|
||||
assert_equal(todo_count+1, Todo.count)
|
||||
end
|
||||
|
||||
def test_no_user
|
||||
todo_count = Todo.count
|
||||
badmessage = File.read(File.join(Rails.root, 'test', 'fixtures', 'sample_sms.txt'))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue