diff --git a/app/models/channel/email_parser.rb b/app/models/channel/email_parser.rb index 1f3cfa228..88f64700a 100644 --- a/app/models/channel/email_parser.rb +++ b/app/models/channel/email_parser.rb @@ -1,3 +1,5 @@ +# encoding: utf-8 + require 'mail' require 'iconv' class Channel::EmailParser @@ -39,8 +41,39 @@ class Channel::EmailParser # html_part = message.html_part ? message.html_part.body.decoded : nil data[:attachments] = [] if mail.multipart? - data[:plain_part] = mail.text_part.body.decoded - data[:plain_part] = conv( mail.text_part.charset, data[:plain_part] ) + if mail.text_part + data[:plain_part] = mail.text_part.body.decoded + data[:plain_part] = conv( mail.text_part.charset, data[:plain_part] ) + else + + # html part + 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] ) + + # any other attachments + else + data[:plain_part] = 'no visible content' + end + + # add body as attachment + headers_store = {} + if mail.mime_type + headers_store['Mime-Type'] = mail.html_part.mime_type + end + if mail.charset + headers_store['Charset'] = mail.html_part.charset + end + attachment = { + :data => mail.html_part.body, + :filename => mail.html_part.filename || filename, + :preferences => headers_store + } + data[:attachments].push attachment + end else # text part @@ -283,10 +316,13 @@ class Channel::EmailParser string.gsub!( /^\s*/m, '' ) # fix some bad stuff from opera and others - string.gsub!( /(\n\r|\r\r\n|\r\n)/s, "\n" ) + string.gsub!( /(\n\r|\r\r\n|\r\n)/, "\n" ) # strip all other tags - string.gsub!( /\<.+?\>/s, '' ) + string.gsub!( /\<(br|br\/|br\s\/)\>/, "\n" ) + + # strip all other tags + string.gsub!( /\<.+?\>/, '' ) # encode html entities like "–" string.gsub!( /(&\#(\d+);?)/x ) { |item| diff --git a/test/fixtures/mail7.box b/test/fixtures/mail7.box new file mode 100644 index 000000000..a1dd93280 --- /dev/null +++ b/test/fixtures/mail7.box @@ -0,0 +1,108 @@ +From Eike.Ehringer@example.com Thu Jun 14 17:42:55 2012 +Return-Path: +X-Original-To: support@example.com +Delivered-To: box@samba.edenhofer.de +X-Greylist: delayed 360 seconds by postgrey-1.32 at samba; Thu, 14 Jun 2012 17:42:55 BST +Received: from mailout64.xx.de (mailout64.xx.de [1.134.45.44]) + by samba.edenhofer.de (Postfix) with ESMTP id 42872500D3D + for ; Thu, 14 Jun 2012 17:42:55 +0100 (BST) +Received: from [1.64.70.33] (HELO kdin65.xx.de) + by mailout64.xx.de (CommuniGate Pro SMTP 5.2.13 _community_) + with ESMTP id 34935681 for support@example.com; Thu, 14 Jun 2012 18:37:00 +0200 +Received: from sbas141a.vs.de.xx.de ([1.215.251.127]) + by kdin65.xx.de (8.14.2/8.14.2/retarus.custom) with ESMTP id q5EGaw6c006002 + (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) + for ; Thu, 14 Jun 2012 18:36:59 +0200 +Received: from sbas141a.cw01.xx.com (sbas141a.vs.de.xx.de [1.92.186.140]) + by sbas141a.vs.de.xx.de (8.13.8/8.13.8) with ESMTP id q5EGawKW028486 + for ; Thu, 14 Jun 2012 18:36:58 +0200 +Received: from sbas703a.cw01.xx.com ([1.92.186.29]) + by sbas141a.cw01.xx.com (Lotus Domino Release 8.5.3FP1) + with ESMTP id 2012061418365728-403048 ; + Thu, 14 Jun 2012 18:36:57 +0200 +To: "Martin Edenhofer via Znuny Team" +In-Reply-To: <20120613122802.489.352153@portal.example.com> +Importance: Normal +Date: Thu, 14 Jun 2012 18:36:54 +0200 +Subject: AW:Installation [Ticket#11392] +From: Eike.Ehringer@example.com +Message-ID: +X-MIMETrack: Itemize by Notes Server on rbld1502/srvc15/srvc/cagtv(Release 8.5.3 HF667|May + 14, 2012) at 06/14/2012 06:36:54 PM, + Serialize by Router on vshb001/srvc7/srvc/cag(Release 8.5.3FP1|March 07, 2012) at + 14.06.2012 18:36:57, + Itemize by SMTP Server on vshb102/srvcMX/srvc/cag(Release 8.5.3FP1|March 07, 2012) at + 06/14/2012 06:36:57 PM, + Serialize by Router on vshb102/srvcMX/srvc/cag(Release 8.5.3FP1|March 07, 2012) at + 06/14/2012 06:36:58 PM, + Serialize complete at 06/14/2012 06:36:58 PM +MIME-Version: 1.0 +X-TNEFEvaluated: 1 +Content-Type: multipart/mixed; + boundary="==IFJRGLKFGIR26824UHRUHIHD" +X-AutoFooter: AFMA Version 2.0.11 (sbas141a) +X-RMX-ID: 20120614-183659-q5EGaw6c006002-0@kdin65 +X-RMX-TRACE: 2012-06-14 18:37:00 RmxMSO@kdin65/mailcc65 [0.1s] 20120614-183659-q5EGaw6c006002-0@kdin65 0:00:01 +X-RMX-TRACE: 2012-06-14 18:36:59 KdIn@kdin65/mailcc64 [0.5s] 20120614-183659-q5EGaw6c006002-0@kdin65 0:00:00 +Status: RO +X-Status: +X-Keywords: +X-UID: 154 + + +--==IFJRGLKFGIR26824UHRUHIHD +Content-Transfer-Encoding: quoted-printable +Content-Type: text/html; charset=UTF-8 + +Hallo.
Jetzt muss ich dir noch kurzfristig absa= +gen f=C3=BCr morgen.
Lass uns evtl morgen Tel.

Mfg eike

= +Martin Edenhofer via Znuny Team --- Installation =5BTicket=2311392=5D --- <= +/font>

= +
Von:"Martin Edenhofer= + via Znuny Team" <support=40example.com>
Aneike.xx=40xx-corp= +xx.com
Datum:= +Mi., 13.06.2012 14:30
BetreffInstallation =5BTicket=2311392=5D


Hi Eike,
+
+anbei wie gestern telefonisch besprochen Informationen zur Vorbereitung.
+
+a) Installation von http://ftp.gwdg.de/pub/misc/zammad/RPMS/fedora/4/zammad-3.0=
+.13-01.noarch.rpm (dieses RPM ist RHEL kompatible) und dessen Abh=C3=A4ngig=
+keiten.
+
+b) Installation von "mysqld" und "perl-DBD-MySQL".
+
+Das w=C3=A4re es zur Vorbereitung=21
+
+Bei Fragen nur zu=21
+
+ -Martin
+
+--
+Martin Edenhofer
+
+Znuny GmbH // Marienstra=C3=9Fe 11 // 10117 Berlin // Germany
+
+P: +49 (0) 30 60 98 54 18-0
+F: +49 (0) 30 60 98 54 18-8
+W: http://example.com=20
+
+Location: Berlin - HRB 139852 B Amtsgericht Berlin-Charlottenburg
+Managing Director: Martin Edenhofer
+
+
+--==IFJRGLKFGIR26824UHRUHIHD-- diff --git a/test/unit/email_parser_test.rb b/test/unit/email_parser_test.rb index 39530709b..c4b3ff121 100644 --- a/test/unit/email_parser_test.rb +++ b/test/unit/email_parser_test.rb @@ -99,6 +99,42 @@ Test5:= " }, }, + { + :data => IO.read('test/fixtures/mail7.box'), + :body_md5 => '775a69acf8ba0495712a3953f2ecff6a', + :params => { + :from => 'Eike.Ehringer@example.com', + :from_email => 'Eike.Ehringer@example.com', + :from_display_name => nil, + :subject => 'AW:Installation [Ticket#11392]', + :plain_part => "Hallo. +Jetzt muss ich dir noch kurzfristig absagen für morgen. +Lass uns evtl morgen Tel. + +Mfg eike + +Martin Edenhofer via Znuny Team --- Installation [Ticket#11392] --- +Von:"Martin Edenhofer via Znuny Team" <support@example.com>Aneike.xx@xx-corpxx.comDatum:Mi., 13.06.2012 14:30BetreffInstallation [Ticket#11392] +Hi Eike, +anbei wie gestern telefonisch besprochen Informationen zur Vorbereitung. +a) Installation von http://ftp.gwdg.de/pub/misc/zammad/RPMS/fedora/4/zammad-3.0.13-01.noarch.rpm (dieses RPM ist RHEL kompatible) und dessen Abhängigkeiten. +b) Installation von "mysqld" und "perl-DBD-MySQL". +Das wäre es zur Vorbereitung! +Bei Fragen nur zu! +-Martin +-- +Martin Edenhofer +Znuny GmbH // Marienstraße 11 // 10117 Berlin // Germany +P: +49 (0) 30 60 98 54 18-0 +F: +49 (0) 30 60 98 54 18-8 +W: http://example.com +Location: Berlin - HRB 139852 B Amtsgericht Berlin-Charlottenburg +Managing Director: Martin Edenhofer + + +", + }, + }, ] files.each { |file|