Renamed plain_part to body in email parser key for message body.
This commit is contained in:
parent
b8b02ca845
commit
90628fb67a
2 changed files with 52 additions and 33 deletions
|
@ -13,7 +13,27 @@ class Channel::EmailParser
|
|||
# string.encode("UTF-8")
|
||||
Iconv.conv( 'UTF8', charset, string )
|
||||
end
|
||||
|
||||
|
||||
=begin
|
||||
|
||||
mail = parse( msg_as_string )
|
||||
|
||||
mail = {
|
||||
:from => 'Some Name <some@example.com>',
|
||||
:from_email => 'some@example.com',
|
||||
:from_local => 'some',
|
||||
:from_domain => 'example.com',
|
||||
:from_display_name => 'Some Name',
|
||||
:message_id => 'some_message_id@example.com',
|
||||
:body => 'message body',
|
||||
:attachments => [
|
||||
|
||||
],
|
||||
|
||||
}
|
||||
|
||||
=end
|
||||
|
||||
def parse (msg)
|
||||
data = {}
|
||||
mail = Mail.new( msg )
|
||||
|
@ -46,21 +66,21 @@ class Channel::EmailParser
|
|||
|
||||
# text attachment/body exists
|
||||
if mail.text_part
|
||||
data[:plain_part] = mail.text_part.body.decoded
|
||||
data[:plain_part] = conv( mail.text_part.charset, data[:plain_part] )
|
||||
data[:body] = mail.text_part.body.decoded
|
||||
data[:body] = conv( mail.text_part.charset, data[:body] )
|
||||
|
||||
# html attachment/body may exists and will be converted to text
|
||||
else
|
||||
filename = '-no name-'
|
||||
if mail.html_part.body
|
||||
filename = 'html-email'
|
||||
data[:plain_part] = mail.html_part.body.to_s
|
||||
data[:plain_part] = conv( mail.html_part.charset.to_s, data[:plain_part] )
|
||||
data[:plain_part] = html2ascii( data[:plain_part] )
|
||||
data[:body] = mail.html_part.body.to_s
|
||||
data[:body] = conv( mail.html_part.charset.to_s, data[:body] )
|
||||
data[:body] = html2ascii( data[:body] )
|
||||
|
||||
# any other attachments
|
||||
else
|
||||
data[:plain_part] = 'no visible content'
|
||||
data[:body] = 'no visible content'
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -79,11 +99,11 @@ class Channel::EmailParser
|
|||
attachment = {
|
||||
:data => mail.html_part.body.to_s,
|
||||
:filename => mail.html_part.filename || filename,
|
||||
:preferences => headers_store
|
||||
:preferences => headers_store
|
||||
}
|
||||
data[:attachments].push attachment
|
||||
end
|
||||
|
||||
|
||||
# get attachments
|
||||
if mail.has_attachments?
|
||||
mail.attachments.each { |file|
|
||||
|
@ -103,7 +123,7 @@ class Channel::EmailParser
|
|||
if file.header.charset
|
||||
headers_store['Charset'] = file.header.charset
|
||||
end
|
||||
|
||||
|
||||
# remove not needed header
|
||||
headers_store.delete('Content-Transfer-Encoding')
|
||||
headers_store.delete('Content-Disposition')
|
||||
|
@ -111,9 +131,8 @@ class Channel::EmailParser
|
|||
attach = {
|
||||
:data => file.body.to_s,
|
||||
:filename => filename,
|
||||
:preferences => headers_store
|
||||
:preferences => headers_store,
|
||||
}
|
||||
|
||||
data[:attachments].push attach
|
||||
}
|
||||
end
|
||||
|
@ -123,21 +142,21 @@ class Channel::EmailParser
|
|||
|
||||
# text part
|
||||
if !mail.mime_type || mail.mime_type.to_s == '' || mail.mime_type.to_s.downcase == 'text/plain'
|
||||
data[:plain_part] = mail.body.decoded
|
||||
data[:plain_part] = conv( mail.charset, data[:plain_part] )
|
||||
data[:body] = mail.body.decoded
|
||||
data[:body] = conv( mail.charset, data[:body] )
|
||||
|
||||
# html part
|
||||
else
|
||||
filename = '-no name-'
|
||||
if mail.mime_type.to_s.downcase == 'text/html'
|
||||
filename = 'html-email'
|
||||
data[:plain_part] = mail.body.decoded
|
||||
data[:plain_part] = conv( mail.charset, data[:plain_part] )
|
||||
data[:plain_part] = html2ascii( data[:plain_part] )
|
||||
data[:body] = mail.body.decoded
|
||||
data[:body] = conv( mail.charset, data[:body] )
|
||||
data[:body] = html2ascii( data[:body] )
|
||||
|
||||
# any other attachments
|
||||
else
|
||||
data[:plain_part] = 'no visible content'
|
||||
data[:body] = 'no visible content'
|
||||
end
|
||||
|
||||
# add body as attachment
|
||||
|
@ -160,8 +179,8 @@ class Channel::EmailParser
|
|||
end
|
||||
|
||||
# strip not wanted chars
|
||||
data[:plain_part].gsub!( /\r\n/, "\n" )
|
||||
data[:plain_part].gsub!( /\r/, "\n" )
|
||||
data[:body].gsub!( /\r\n/, "\n" )
|
||||
data[:body].gsub!( /\r/, "\n" )
|
||||
|
||||
return data
|
||||
end
|
||||
|
@ -262,9 +281,9 @@ class Channel::EmailParser
|
|||
# create ticket
|
||||
ticket = Ticket.create( ticket_attributes )
|
||||
end
|
||||
|
||||
|
||||
# import mail
|
||||
|
||||
|
||||
# set attributes
|
||||
internal = false
|
||||
if mail[ 'X-Zammad-Article-Visability'.to_sym ] && mail[ 'X-Zammad-Article-Visability'.to_sym ] == 'internal'
|
||||
|
@ -275,7 +294,7 @@ class Channel::EmailParser
|
|||
:ticket_id => ticket.id,
|
||||
:ticket_article_type_id => Ticket::Article::Type.where( :name => 'email' ).first.id,
|
||||
:ticket_article_sender_id => Ticket::Article::Sender.where( :name => 'Customer' ).first.id,
|
||||
:body => mail[:plain_part],
|
||||
:body => mail[:body],
|
||||
:from => mail[:from],
|
||||
:to => mail[:to],
|
||||
:cc => mail[:cc],
|
||||
|
|
|
@ -22,7 +22,7 @@ class EmailParserTest < ActiveSupport::TestCase
|
|||
:from_email => 'martin@example.com',
|
||||
:from_display_name => 'Martin Edenhofer',
|
||||
:subject => 'aaäöüßad asd',
|
||||
:plain_part_md5 => "äöüß ad asd\n\n-Martin\n\n--\nOld programmers never die. They just branch to a new address.",
|
||||
:body_md5 => "äöüß ad asd\n\n-Martin\n\n--\nOld programmers never die. They just branch to a new address.",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -43,7 +43,7 @@ class EmailParserTest < ActiveSupport::TestCase
|
|||
:from_email => 'k.guenther@example.com',
|
||||
:from_display_name => 'Günther Katja | Example GmbH',
|
||||
:subject => 'AW: Ticket Templates [Ticket#11168]',
|
||||
:plain_part_md5 => "Hallo Katja,
|
||||
:body_md5 => "Hallo Katja,
|
||||
|
||||
super! Ich freu mich!
|
||||
|
||||
|
@ -82,7 +82,7 @@ Liebe Grüße!
|
|||
:from_email => 'me@bogen.net',
|
||||
:from_display_name => 'Hans BÄKOSchönland',
|
||||
:subject => 'utf8: 使って / ISO-8859-1: Priorität" / cp-1251: Сергей Углицких',
|
||||
:plain_part => "this is a test [1]Compare Cable, DSL or Satellite plans: As low as $2.95.
|
||||
:body => "this is a test [1]Compare Cable, DSL or Satellite plans: As low as $2.95.
|
||||
|
||||
Test1:8
|
||||
|
||||
|
@ -107,7 +107,7 @@ Test5:=
|
|||
:from_email => 'Eike.Ehringer@example.com',
|
||||
:from_display_name => nil,
|
||||
:subject => 'AW:Installation [Ticket#11392]',
|
||||
:plain_part_md5 => "Hallo.
|
||||
:body_md5 => "Hallo.
|
||||
Jetzt muss ich dir noch kurzfristig absagen für morgen.
|
||||
Lass uns evtl morgen Tel.
|
||||
|
||||
|
@ -149,7 +149,7 @@ Managing Director: Martin Edenhofer
|
|||
:from_email => 'Franz.Schaefer@example.com',
|
||||
:from_display_name => nil,
|
||||
:subject => 'could not rename: ZZZAAuto',
|
||||
:plain_part_md5 => "Gravierend?
|
||||
:body_md5 => "Gravierend?
|
||||
|
||||
Mit freundlichen Grüßen
|
||||
|
||||
|
@ -192,7 +192,7 @@ Hof",
|
|||
:from_email => 'martin@example.de',
|
||||
:from_display_name => 'Martin Edenhofer',
|
||||
:subject => 'AW: OTRS / Anfrage OTRS Einführung/Präsentation [Ticket#11545]',
|
||||
:plain_part => "Enjoy!\n\n-Martin\n\n--\nOld programmers never die. They just branch to a new address."
|
||||
:body => "Enjoy!\n\n-Martin\n\n--\nOld programmers never die. They just branch to a new address."
|
||||
},
|
||||
},
|
||||
]
|
||||
|
@ -203,16 +203,16 @@ Hof",
|
|||
data = parser.parse( file[:data] )
|
||||
|
||||
# check body
|
||||
md5 = Digest::MD5.hexdigest( data[:plain_part] )
|
||||
md5 = Digest::MD5.hexdigest( data[:body] )
|
||||
assert_equal( file[:body_md5], md5 )
|
||||
|
||||
# check params
|
||||
file[:params].each { |key, value|
|
||||
if key.to_s == 'plain_part_md5'
|
||||
if key.to_s == 'body_md5'
|
||||
# puts 'md5'
|
||||
# puts '++' + data[:plain_part].to_s + '++'
|
||||
# puts '++' + data[:body].to_s + '++'
|
||||
# puts '++' + file[:params][key.to_sym].to_s + '++'
|
||||
assert_equal( Digest::MD5.hexdigest( file[:params][key.to_sym].to_s ), Digest::MD5.hexdigest( data[:plain_part].to_s ) )
|
||||
assert_equal( Digest::MD5.hexdigest( file[:params][key.to_sym].to_s ), Digest::MD5.hexdigest( data[:body].to_s ) )
|
||||
else
|
||||
assert_equal( file[:params][key.to_sym], data[key.to_sym] )
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue