From b2b835bcc58d2e4e40c5b8714826394591da2897 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Mon, 13 Mar 2017 19:38:29 +0100 Subject: [PATCH] Strip beginning and ending new lines. Improved layout of own quoted messages. --- app/assets/stylesheets/zammad.scss | 7 +- config/initializers/html_sanitizer.rb | 4 +- lib/core_ext/string.rb | 23 ++--- .../ticket_articles_controller_test.rb | 10 ++ test/unit/aaa_string_test.rb | 96 ++++++++++++++++--- test/unit/email_parser_test.rb | 59 ++++++------ test/unit/email_process_test.rb | 4 +- test/unit/html_sanitizer_test.rb | 4 +- 8 files changed, 142 insertions(+), 65 deletions(-) diff --git a/app/assets/stylesheets/zammad.scss b/app/assets/stylesheets/zammad.scss index dfb8413f1..f04976fb1 100644 --- a/app/assets/stylesheets/zammad.scss +++ b/app/assets/stylesheets/zammad.scss @@ -4561,7 +4561,6 @@ footer { padding: 0 55px; } - .article-content-meta { position: absolute; width: 100%; @@ -4663,7 +4662,7 @@ footer { left: 0; right: 0; background: white; - + &.is-open { &:before { opacity: 0; @@ -4701,6 +4700,10 @@ footer { box-shadow: none; } + .customer .richtext-content blockquote { + border-left: 5px solid #dfdfdf; + } + .customer.ticket-article-item.state--folde-out .textBubble { border-color: hsl(199,44%,85%); } diff --git a/config/initializers/html_sanitizer.rb b/config/initializers/html_sanitizer.rb index d2815923e..f504e2acc 100644 --- a/config/initializers/html_sanitizer.rb +++ b/config/initializers/html_sanitizer.rb @@ -24,7 +24,7 @@ Rails.application.config.html_sanitizer_tags_whitelist = %w( # attributes allowed for tags Rails.application.config.html_sanitizer_attributes_whitelist = { - :all => %w(class dir lang style title translate data-signature data-signature-id), + :all => %w(class dir lang title translate data-signature data-signature-id), 'a' => %w(href hreflang name rel), 'abbr' => %w(title), 'blockquote' => %w(type cite), @@ -33,7 +33,7 @@ Rails.application.config.html_sanitizer_attributes_whitelist = { 'data' => %w(value), 'del' => %w(cite datetime), 'dfn' => %w(title), - 'img' => %w(align alt border height src srcset width), + 'img' => %w(align alt border height src srcset width style), 'ins' => %w(cite datetime), 'li' => %w(value), 'ol' => %w(reversed start type), diff --git a/lib/core_ext/string.rb b/lib/core_ext/string.rb index f309b98c3..d178875c8 100644 --- a/lib/core_ext/string.rb +++ b/lib/core_ext/string.rb @@ -301,17 +301,18 @@ class String string.gsub!(/######SIGNATURE_MARKER######/, '') return string.chomp end - - #string.gsub!(/

[[:space:]]+<\/p>

[[:space:]]+<\/p>/m, '

') - string.gsub!(%r{

[[:space:]]+

\n

[[:space:]]+

}im, '

') - string.gsub!(%r{
[[:space:]]+
\n
[[:space:]]+
}im, '
') - string.gsub!(/
[[:space:]]?
[[:space:]]?
/im, '

') - string.gsub!(/
[[:space:]]?
[[:space:]]?
/im, '

') - string.gsub!(/
[[:space:]]?
[[:space:]]?
/im, '

') - string.gsub!(%r{
[[:space:]]?
[[:space:]]?
}im, '

') - string.gsub!(%r{
[[:space:]]?
[[:space:]]?
}im, '

') - string.gsub!(%r{
[[:space:]]?
[[:space:]]?
}im, '

') + string.gsub!(%r{(

[[:space:]]*

([[:space:]]*)){2,}}im, '

\2') + string.gsub!(%r\
[[:space:]]*(([[:space:]]*)){2,}\im, '

\3') + string.gsub!(%r\[[:space:]]*(
[[:space:]]*){3,}[[:space:]]*
\im, '

') + string.gsub!(%r\
[[:space:]]*(
[[:space:]]*){1,}[[:space:]]*
\im, '
') + string.gsub!(%r\

[[:space:]]*

([[:space:]]*){2,}[[:space:]]*\im, '


') + string.gsub!(%r{

[[:space:]]*

([[:space:]]*)+

[[:space:]]*

}im, '

') + string.gsub!(%r\(
[[:space:]]*
[[:space:]]*){2,}\im, '
') + string.gsub!(/(
[[:space:]]*){3,}/im, '

') + string.gsub!(%r\([[:space:]]*){3,}\im, '

') string.gsub!(%r{

[[:space:]]+

}im, '

 

') + string.gsub!(%r{\A([[:space:]]*)*}i, '') + string.gsub!(%r{[[:space:]]*([[:space:]]*)*\Z}i, '') string.signature_identify('html') @@ -332,7 +333,7 @@ class String '<\/div>[[:space:]]*(--|__)', '

[[:space:]]*(--|__)', '(|

|

)[[:space:]]*(Von|From|De|от|Z|Od|Ze|Fra|Van|Mistä|Από|Dal|から|Из|од|iz|Från|จาก|з|Từ):[[:space:]]*', - '
[[:space:]]*
[[:space:]]*(Von|From|De|от|Z|Od|Ze|Fra|Van|Mistä|Από|Dal|から|Из|од|iz|Från|จาก|з|Từ):[[:space:]]+', + '(
|
)[[:space:]]*
[[:space:]]*(Von|From|De|от|Z|Od|Ze|Fra|Van|Mistä|Από|Dal|から|Из|од|iz|Från|จาก|з|Từ):[[:space:]]+', '[[:space:]]*
[[:space:]]*(On|Am)', ] map.each { |regexp| diff --git a/test/controllers/ticket_articles_controller_test.rb b/test/controllers/ticket_articles_controller_test.rb index cc454978d..449f6590b 100644 --- a/test/controllers/ticket_articles_controller_test.rb +++ b/test/controllers/ticket_articles_controller_test.rb @@ -109,6 +109,12 @@ AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO assert_equal(0, ticket.articles[0].attachments.count) assert_equal(0, ticket.articles[1].attachments.count) assert_equal(1, ticket.articles[2].attachments.count) + assert(ticket.articles[2].attachments[0]['id']) + assert_match(/@zammad.example.com/, ticket.articles[2].attachments[0]['filename']) + assert_equal('21', ticket.articles[2].attachments[0]['size']) + assert_equal('image/png', ticket.articles[2].attachments[0]['preferences']['Mime-Type']) + assert_equal('inline', ticket.articles[2].attachments[0]['preferences']['Content-Disposition']) + assert_match(/@zammad.example.com/, ticket.articles[2].attachments[0]['preferences']['Content-ID']) params = { ticket_id: result['ticket_id'], @@ -142,6 +148,10 @@ AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO result = JSON.parse(@response.body) assert_equal(Hash, result.class) assert_equal(1, result['attachments'].count) + assert(result['attachments'][0]['id']) + assert_equal('some_file.txt', result['attachments'][0]['filename']) + assert_equal('8', result['attachments'][0]['size']) + assert_equal('text/plain', result['attachments'][0]['preferences']['Mime-Type']) end test '02.01 ticket create with customer and articles' do diff --git a/test/unit/aaa_string_test.rb b/test/unit/aaa_string_test.rb index d538a8873..2154a2817 100644 --- a/test/unit/aaa_string_test.rb +++ b/test/unit/aaa_string_test.rb @@ -467,11 +467,41 @@ Men-----------------------' assert_equal(result, html.html2html_strict) html = "

" - result = "
\n

 

\n
" + result = "
+

 

+
" assert_equal(result, html.html2html_strict) html = "
" - result = "
\n
\n
" + result = "
\n
" + assert_equal(result, html.html2html_strict) + + html = "
" + result = "
\n
" + assert_equal(result, html.html2html_strict) + + html = "
+

" + result = "
" + assert_equal(result, html.html2html_strict) + + html = '
+

Description

+

' + result = '
+

Description

+

' + assert_equal(result, html.html2html_strict) + + html = '
+

Description

+


' + result = '
+

Description



' + assert_equal(result, html.html2html_strict) + + html = '

 



 

' + result = '

 

 

' assert_equal(result, html.html2html_strict) html = "
a\nb\nc
" @@ -517,8 +547,15 @@ Men-----------------------' result = 'web.de' assert_equal(result, html.html2html_strict) - html = '
https://www.facebook.com/test
' - result = '
https://www.facebook.com/test
' + html = '
https://www.facebook.com/test
' + result = '' + assert_equal(result, html.html2html_strict) + + html = '

https://www.facebook.com/test
' + result = '' assert_equal(result, html.html2html_strict) html = 'some text http://example.com some other text' @@ -630,16 +667,15 @@ abc

Von: Fritz Bauer [mailto:me@example.com]
Gesendet: Donne christian.schaefer@example.com
' - result = "
Franz Schäfer



Telefon\n+49 000 000 8565
\nchristian.schaefer@example.com


" - result = '
-Franz Schäfer + result = "Franz Schäfer



Telefon\n+49 000 000 8565
\nchristian.schaefer@example.com


" + result = 'Franz Schäfer
Manager Information Systems

Telefon +49 000 000 8565
-christian.schaefer@example.com
' +christian.schaefer@example.com' assert_equal(result, html.html2html_strict) html = "test" @@ -670,6 +706,37 @@ christian.schaefer@example.com
' result = '' assert_equal(result, html.html2html_strict) + html = '

abc
' + result = '
abc
' + assert_equal(result, html.html2html_strict) + + html = '
abc


' + result = '
abc
' + assert_equal(result, html.html2html_strict) + + html = '



' + result = '
' + assert_equal(result, html.html2html_strict) + + html = '

abc

' + result = '
+
abc

+
' + assert_equal(result, html.html2html_strict) + + html = '

' + result = '

 

' + assert_equal(result, html.html2html_strict) + + html = '

+

+

+
' + result = '
+

 

+
' + assert_equal(result, html.html2html_strict) + html = '

' result = '

' assert_equal(result, html.html2html_strict) @@ -901,25 +968,26 @@ christian.schaefer@example.com
' ' assert_equal(result, html.html2html_strict) - html = '
+ html = '



Von:        Hotel <info@example.de>
An:       - ' - result = '

Von: Hotel <info@example.de> -
An:' + 
' + result = '

Von: Hotel <info@example.de> +
An: +
' assert_equal(result, html.html2html_strict) html = '
On 04 Mar 2017, at 14:47, Oliver Ruhm <oliver@example.com> wrote:

' - result = '
+ result = '
On 04 Mar 2017, at 14:47, Oliver Ruhm <oliver@example.com> wrote:

' assert_equal(result, html.html2html_strict) html = '
some note

' - result = '
+ result = '
some note

' diff --git a/test/unit/email_parser_test.rb b/test/unit/email_parser_test.rb index 193799c4c..6c840df2b 100644 --- a/test/unit/email_parser_test.rb +++ b/test/unit/email_parser_test.rb @@ -197,7 +197,7 @@ Liebe Grüße! }, { data: IO.binread('test/fixtures/mail7.box'), - body_md5: 'b435df94abbdd3e2c90928d8b156c4a5', + body_md5: '74cccd6144737f4cc895788d8cd0870e', params: { from: 'Eike.Ehringer@example.com', from_email: 'Eike.Ehringer@example.com', @@ -206,12 +206,11 @@ Liebe Grüße! content_type: 'text/html', body: '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>
An eike.xx@xx-corpxx.com
Datum: Mi., 13.06.2012 14:30
-Betreff Installation [Ticket#11392]

+Betreff Installation [Ticket#11392]


Hi Eike,
 
 anbei wie gestern telefonisch besprochen Informationen zur Vorbereitung.
@@ -245,7 +244,7 @@ Managing Director: Martin Edenhofer
       },
       {
         data: IO.binread('test/fixtures/mail8.box'),
-        body_md5: 'fa130a3d6437ddb26f7bba80c8a3fdc8',
+        body_md5: '630aa1cc84fcaee8a0f232908c454c5f',
         attachments: [
           {
             md5: 'c3ca4aab222eed8a148a716371b70129',
@@ -258,7 +257,7 @@ Managing Director: Martin Edenhofer
           from_display_name: '',
           subject: 'could not rename: ZZZAAuto',
           content_type: 'text/html',
-          body: '
+ body: '

Gravierend?
@@ -289,7 +288,7 @@ Geschäftsführung/Management Board: Jan Bauer (Vorsitzender/Chairman), Oliver B
Sitz der Gesellschaft / Registered Office: Hof
-Registergericht / Commercial Register of the Local Court: HRB 0000 AG Hof
', +Registergericht / Commercial Register of the Local Court: HRB 0000 AG Hof', }, }, { @@ -353,7 +352,7 @@ Registergericht / Commercial Register of the Local Court: HRB 0000 AG Hof
', }, { data: IO.binread('test/fixtures/mail11.box'), - body_md5: 'cb85100f3c7bef62a56bfd47f4e5f94d', + body_md5: '6a90db640ae9dd677ab6e4b441c58d68', attachments: [ { md5: '08660cd33ce8c64b95bcf0207ff6c4d6', @@ -367,18 +366,18 @@ Registergericht / Commercial Register of the Local Court: HRB 0000 AG Hof
', subject: 'Eine schöne Adventszeit für ZNUNY GMBH - ENTERPRISE SERVICES FÜR OTRS', to: 'enjoy_us@znuny.com', content_type: 'text/html', - body: '
http://newsletters.cylex.de/ref/www.cylex.de/sid-105/uid-4134001/lid-2/http://web2.cylex.de/advent2012?b2b + body: 'http://newsletters.cylex.de/ref/www.cylex.de/sid-105/uid-4134001/lid-2/http://web2.cylex.de/advent2012?b2b

Lieber CYLEX Eintragsinhaber,

das Jahr neigt sich dem Ende und die besinnliche Zeit beginnt laut Kalender mit dem
1. Advent. Und wie immer wird es in der vorweihnachtlichen Zeit meist beruflich und privat
so richtig schön hektisch.

Um Ihre Weihnachtsstimmung in Schwung zu bringen kommen wir nun mit unserem Adventskalender ins Spiel. Denn 24 Tage werden Sie unsere netten Geschichten, Rezepte und Gewinnspiele sowie ausgesuchte Geschenktipps und Einkaufsgutscheine online begleiten. Damit lässt sich Ihre Freude auf das Fest garantiert mit jedem Tag steigern.


Einen gemütlichen Start in die Adventszeit wünscht Ihnen http://newsletters.cylex.de/ref/www.cylex.de/sid-105/uid-4134001/lid-1/http://web2.cylex.de/advent2012?b2b

Ihr CYLEX Team

P.S. Damit Sie keinen Tag versäumen, empfehlen wir Ihnen den Link des Adventkalenders (http://newsletters.cylex.de/ref/www.cylex.de/sid-105/uid-4134001/lid-3/http://web2.cylex.de/advent2012?b2b) in
Ihrer Lesezeichen-Symbolleiste zu ergänzen.

 


Impressum
S.C. CYLEX INTERNATIONAL S.N.C.
Sat. Palota 119/A RO 417516 Palota Romania
Tel.: +49 208/62957-0 |
Geschäftsführer: Francisc Osvald
Handelsregister: J05/1591/2009
USt.IdNr.: RO26332771
serviceteam@cylex.de
Homepage (http://newsletters.cylex.de/ref/www.cylex.de/sid-105/uid-4134001/lid-98/http://web2.cylex.de/homepage/home.asp)
-Newsletter abbestellen (http://newsletters.cylex.de/ref/www.cylex.de/sid-105/uid-4134001/lid-99/http://newsletters.cylex.de/unsubscribe.aspx?uid=4134001&d=www.cylex.de&e=enjoy@znuny.com&sc=3009&l=d)
', +Newsletter abbestellen (http://newsletters.cylex.de/ref/www.cylex.de/sid-105/uid-4134001/lid-99/http://newsletters.cylex.de/unsubscribe.aspx?uid=4134001&d=www.cylex.de&e=enjoy@znuny.com&sc=3009&l=d)', }, }, { data: IO.binread('test/fixtures/mail12.box'), - body_md5: '24d66a30f572c1d742f9c54b3947ba2b', + body_md5: 'eacbca29d25cd10aa0f7e2ca558d38f2', attachments: [ { md5: '46cf0f95ea0c8211cbb704e1959b9173', @@ -412,7 +411,6 @@ Newsletter abbestellen (www.example.com

 

-

 

-----Ursprüngliche Nachricht-----
Von: Martin Edenhofer via Znuny Sales [mailto:example@znuny.com]
Gesendet: Freitag, 30. November 2012 13:50
An: Smith, Alex
Betreff: Agenda [Ticket#11995]

 

Sehr geehrte Frau Smith,

@@ -518,7 +516,7 @@ Newsletter abbestellen (', from_email: 'ghgbwum@185.com.cn', @@ -552,7 +550,7 @@ Newsletter abbestellen (', from_email: '"=?GB2312?B?ztI=?=" <>', @@ -577,7 +575,7 @@ Newsletter abbestellen (
", + body: "Ihre Rechnung als PDF-Dokument", }, attachments: [ { @@ -712,7 +710,7 @@ end }, { data: IO.binread('test/fixtures/mail29.box'), - body_md5: '5545ece414ae1e48e64c9682cd636d75', + body_md5: 'd52e493b8c1132da8cc321d5e47f4fa7', params: { from: 'Example Sales ', from_email: 'sales@example.com', @@ -721,7 +719,7 @@ end to: 'info@znuny.inc', body: 'Dear Mr. Edenhofer,

We want to keep you updated on TeamViewer licensing shortages on a regular basis.

We would like to inform you that since the last message on 25-Nov-2014 there have been temporary session channel exceedances which make it impossible to establish more sessions. Since the last e-mail this has occurred in a total of 1 cases.

Additional session channels can be added at any time. Please visit ourTeamViewer Online Shop (https://www.teamviewer.com/en/licensing/update.aspx?channel=d842cs9bf85-p1009645n-348785e76e) for pricing information.

Thank you - and again all the best with TeamViewer!

Best regards,

Your TeamViewer Team

P.S.: You receive this e-mail because you are listed in our database as person who ordered a TeamViewer license. Please clickhere (http://www.teamviewer.com/en/company/unsubscribe.aspx?id=1009645&ident=e37682eac65e8ca6ff36074907d8bc14) to unsubscribe from further e-mails.

-----------------------------
www.teamviewer.com
-
TeamViewer GmbH * Jahnstr. 30 * 73037 Göppingen * Germany
Tel. 07161 60692 50 * Fax 07161 60692 79

Registration AG Ulm HRB 534075 * General Manager Holger Felgner

' +
TeamViewer GmbH * Jahnstr. 30 * 73037 Göppingen * Germany
Tel. 07161 60692 50 * Fax 07161 60692 79

Registration AG Ulm HRB 534075 * General Manager Holger Felgner' }, }, { @@ -773,7 +771,7 @@ end }, { data: IO.binread('test/fixtures/mail36.box'), - body_md5: 'be0ae19251440f2e8164fcf204c1c0e4', + body_md5: '0c03749418faa758ee385a1fc9f01fbc', params: { from: 'Martin Smith ', from_email: 'm.Smith@example.com', @@ -781,8 +779,7 @@ end subject: 'Fw: Zugangsdaten', to: 'Martin Edenhofer ', body: "
-
-
+
--
don't cry - work! (Rainald Goetz)
@@ -792,8 +789,7 @@ end Betreff: Fw: Zugangsdaten
-
-
+
--
don't cry - work! (Rainald Goetz)
@@ -932,7 +928,7 @@ end }, { data: IO.binread('test/fixtures/mail43.box'), - body_md5: '6bb5b8fa67eb5061fa234fcb1e8e58bb', + body_md5: 'df230afc9ce79d364c52969c3b05cd27', params: { from: 'Paula ', from_email: 'databases.en@example.com', @@ -940,13 +936,13 @@ end subject: 'Kontakte', to: 'info@example.ch', cc: nil, - body: '

http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxnawvplguzzhx4bnxlzwy=

Geben Sie diese Information an den Direktor oder den für Marketing und Umsatzsteigerung verantwortlichen Mitarbeiter Ihrer Firma weiter!




Hallo,


Bei uns können Sie mit nur wenigen Clicks Geschäftskontakte verschiedener Länder erwerben.

Dies ist eineschnelle und bequeme Methode, um Daten zu einem vernünftigen Preis zu erhalten.

Alle Daten werdenständig aktualisiertm so dass Sie sich keine Sorgen machen müssen.

 


http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0lnnzdxjobgzzzwvsdgetlm10cmvzb2yvy2vtl2xpz25pywlnav9hbc9zog1loxgyotdzzw1hl2vll2xwzwxhehb4q18ubxhzfehsodh8y2m= http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxnawvplguzzhx4bnxlzwy=

XLS-Muster herunterladen (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0lnnzdxjobgzzzwvsdgetlm10cmvzb2yvy2vtl2xpz25pywlnav9hbc9zog1loxgyotdzzw1hl2vll2xwzwxhehb4q18ubxhzfehsodh8y2m=)

Datenbank bestellen - (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxnawvplguzzhx4bnxlzwy=)



Die Anmeldung ist absolut kostenlos und unverbindlich. Sie können die Kataloge gemäß Ihren eigenen Kriterien filtern und ein kostenloses Datenmuster bestellen, sobald Sie sich angemeldet haben.




Wir haben Datenbanken der folgenden Länder:


  • Österreich (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nuqwvpmjz8fgex)
  • + (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxnawvplguzzhx4bnxlzwy=)



    Die Anmeldung ist absolut kostenlos und unverbindlich. Sie können die Kataloge gemäß Ihren eigenen Kriterien filtern und ein kostenloses Datenmuster bestellen, sobald Sie sich angemeldet haben.



    Wir haben Datenbanken der folgenden Länder:


  • Österreich (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nuqwvpmjz8fgex)
  • Belgien (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nfqmvpyzr8fgnh)
  • Belarus (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nzqmvpmgj8fdaw)
  • Schweiz (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3niq2vpyjf8fgy4)
  • Tschechische Republik (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3naq2vpmtz8fdc1)
  • @@ -965,7 +961,7 @@ end
  • Russland (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nvumvpztv8fgvk)
  • Slowenien (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nju2vpn2r8fgyz)
  • Slowakei (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nlu2vpnjz8fdq5)
  • -
  • Ukraine (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxny25plgusdxj0b3nbvwvpytd8fdnh)


  • Anwendungsmöglichkeiten für Geschäftskontakte

     

    Sie könnenAbschnitte wählen (filtern) Empfänger gemäß Tätigkeitsbereichen und Standort der Firmen, um die Effizienz Ihrer Werbemaßnahmen zu erhöhen.

     


    Für jeden Kauf von2016-11-05 23:59:59

    wir gewähren30% Rabatt

    RABATTCODE: WZ2124DD



    Bestellen Sie online bei:

    company-catalogs.com (http://business-catalogs.example.com/odtpbgs5mwizbjuyyzexlta4yy06mmg7n3avl3r0bmfvy3b0lxlhbw9sc2nhb3nnyy5ll3rpbxjlzi9lbs9ycnjuawfpzxmsdgxnawvplguzzhx4bnxlzwy=)

    Für weitere Informationen:

    E-Mail:databases.en@example.com
    Telefon: +370-52-071554 (languages: EN, PL, RU, LT)



    Unsubscribe from newsletter: Click here (http://business-catalogs.example.com/c2judxvlcmnic2i4mwk7mtgxotmyns1jmmmtnza=)' }, }, { diff --git a/test/unit/email_process_test.rb b/test/unit/email_process_test.rb index 181ca4fcd..b7dd2e5b0 100644 --- a/test/unit/email_process_test.rb +++ b/test/unit/email_process_test.rb @@ -224,10 +224,10 @@ Some Text", body: "_________________________________________________________________________________Please beth saw his head

    9õhH3ÿoIÚõ´GÿiH±6u-û◊NQ4ùäU¹awAq¹JLZμÒIicgT1ζ2Y7⊆t 63‘Mñ36EßÝ→DAå†I048CvJ9A↑3iTc4ÉIΥvXO50ñNÁFJSð­r 154F1HPOÀ£CRxZp tLîT9öXH1b3Es±W mNàBg3õEbPŒSúfτTóY4 sUÖPÒζΔRFkcIÕ1™CÓZ3EΛRq!Cass is good to ask what that
    86Ëhttp://piufup.medicatingsafemart.ruLuke had been thinking about that.
    Shannon said nothing in fact they. Matt placed the sofa with amy smiled. Since the past him with more. Maybe he checked the phone. Neither did her name only. Ryan then went inside matt.
    Maybe we can have anything you sure.
    á•XMYÍÅEE£ÓN°kP'dÄÅS4⌉d √p¨HΣ>jE4y4ACüûLì“vT∧4tHXÆX:
    x5VV\"¹tiçÂaaΦ3fg¦zèr«°haeJw n§Va879sÆ3j f¶ïlÞ9lo5F¾wν¶1 κψ›a9f4sLsL ùVo$v3x1¸nz.uȦ1H4s35Ô7 CÄFMiMzda¯ZεlÝHNi¬cÚsù–ϖ DYhaã7Ns4Ö· n3dl1XÆo¯µ¶wpN↑ YQ7aé39s1qÓ QyL$fcÕ1ΝS5.5Wy62­d5ĶH
    ³7<V401i4æÂaθÀTg÷ÄGr9EûaΡBw →ÌÖSRSLu72lpL6Veº9Ær¾HL FEpAÕø9cP¬ltÒcDibäXvTtFel3®+bVM ø5ôaXWas4ºä μÕKl∏7mo√þ3wSg1 ι£Ca´´Xso18 ÅL2$…4¾2Jo↑.0Λa53iè55WÕ V4◊9iFÊVaßÕóg8³9r℘buaf®2 fc7Pg3⊆rzç8oÜ−⋅fÿ≥ZeaPÑs5⇐TsiΨ∋i9ÌuoU8RnΨ⌉•aw1flfùë TQNaU›ésvDu BÇIl6Θlo∠HfwNX8 36Xa∼α»sT½d ŠHG$Îõ¬3QWÀ.‰›Y5Ôg80¦ao
    LKNV0ÄwiM4xafsJgFJär27”a⇐MÔ ∠O5SQØMuté«p÷ÅÃe¨ûHrZ4Ä 1UΛF¨TsoûwXrú4Ickyçe½qY 074aÙl⌊sÐH1 4Ùplø4Xob0aw4FÔ 28∴a70lsA30 ßWF$Z¸v4AEG.Î6¨2t9p5¶¼Q Cε92i0qPa¹AölW5Pi5Vusi8ë ðO0SE2Euù∈èpòY3eTs6r6ý2 lªÌAyîjcQpet½3õiiqXvPVOe8­V+«“G ¤ó6a®Π7sJÕg ¡JÈl♥Š¾oÐolwBVà →AmaηÒ¯saÑÚ Häð$2Ef2∈n5.Œ8H95¨19⊃ƒõ
    Up dylan in love and found herself. Sorry for beth smiled at some time
    ÚúeACíøN˵UT3L♠ICë9-BŒfAoÓCL5ΒÉLHοNE5∂7RScdGX­ªIpΣuCCw∨/D¤6A´vâS0d⊂TÇ'BHfóΔMåß7A63B:
    2UýV5¦Ueý¿×nRm2tæÓOoγ1øly¼Wi6pxnÀZ« câSa8ï¤sGï⊂ ΜJll1£„onbéw⌉ö1 vY8aΘmgs0Ú4 å¥G$·592KkU1®b0.½Âℜ54Èh0º´h A0j¸dc1ξv™Xpagl×ib8YrSf0 ¨WiaÀ4»sÁ×7 TAwll¨dom1Gw2¿z ΒÿÀaˆyÎsN8η 3oo$D012Λp³4cìz.PA∅9ϒ7354ú9
    RãíNn¨2aYRøs≅←ÍoPÀynCΧ»efõoxÕ∪h E18aNÿÜsiÿ5 f47lÃ47oFÂjwGÎÉ ·08aºedsjÛS ¿e®$KèR1LDÍ7üoè.4·O99Ý£9íϖn Sι3”pÝó‾iEuerΓy0iY30vΤA6a2\"Y 465a1m6sgÁs C∀ilΑÒΠor6yw7¿ð 1KΩaÐ32s∇Δ¤ 9Χ9$MWN2P0É8óËβ.Ö∩S93íñ0RQ’
    Have anything but matty is taking care. Voice sounded in name only the others
    ÿ²íGu8NEZ3FNFsôEÆRnRÇC9AK4xLÀ5Ç Ì5bH97CE«Ì0AÎq¢Lµk→TªJkHe3š:Taking care about matt li? ed ryan. Knowing he should be there.
    Ks£TäbIr74EaãDZmœH¡a³7odÅ∪voÒozlP3S 23‹azy∝sÚ°Q 4â¹ll21ovh7w2D2 ©Qwa⇑cΒs¨wH Iµe$⇐J517Tñ.t5f36ÅB06ãΨ Z4nGiý89t←f4hvnàrbŸTo1s9m¥Ëqand·xxO6 Iÿ∪ak½0sÙ£M ûΗ¡løȾorztw170 —♣≅ar6qsvDv 76T$3×D0erÍ.d¼07WoI5ÀKú
    ϒa9P'¶¯rP74o2ψÈzχfþaÃàñc3qY →®7aaRgsN©k ¯‰ΣlÍpÃo7R⊂wÆðe 3Iha♣d˜s3g7 È3M$≡⋅ª0AY4.Uq√3Û±k5SUΜ A8Ö6cZŸdoΡeumpq¼pAoUlèI2ieYÒaK>∂ 3n6ax1Qs20b °Häl9¶ÑoÏ6aw≡dä ΗÅ2a¢Óvs⊃Á7 C⊆Ä$2Bz2sló.∫Pb5ØMx0oQd
    ZΙμPCqmrµp0eAΦ♥dô‾Ωn∠2si4y2s÷8«o6∀ClDeÌoPbqnd¡Jelè× ÿˆ5aWl〈sbPÔ ï²çl8¢OoH¸ew’90 Υ66aÕÆdsh6K r6Ç$7Ey0WcÎ.£—012C857Aþ S€53yxµèn80ntΡΠmhç≡hrB²doµS¥ih÷rdOKK 7½öa←ãIs2⌉V Cssl±´RoT1QwyÉΔ •∏∞aïYGsÂ8E 1πx$04ò0gMF.bTQ3Íx658ùς
    Maybe even though she followed.
    ←4BC3éhAGAWNrÛjAGυ»D¬f4Iðm√AHM9N〉1è ‚¬HDÁ9ÜRâ3∨U90IG¾99S¶∪”T¥ì3OË°cR0E⇑E2°1 4ÖaA″XΝDµ4ℑVAK8Aµd9NrÅDT¦12A5khGA3mE98ÔS9KC!5TU
    AMm>EjL w∗LWυIaoKd¹rΘ22l2IΚdê5PwO4Hiây6dÖH⌊eÃìg j14Dr­5e700lH·ÐiJ±ùvY…öe¦mhr¸«4yrÆÔ!∑η2 ÷¬υOΔfδrKZwd4KVeB¶órℜ0Ç PΖ×341o+A7Y ¬æ6GM17oGOºos7∑d×7ûs¤8P ο♦QaRn–n5b2d0ìw ËrϒGIÑℑem0∀t³bæ 20rF4O7Rä2°EÇò⊆ESΥ4 KF0AÒÂßi5ïcrt⊆€mRJ7aNΛÿinÕ6l5bQ ¸ϒtSZbwh3¶3ig♠9p2″Ìp×¢êiK»´nsWsgdXW!tBO
    m0W>YÙ b¬u1xΔd03¯¬0vHK%Þ¹ó 674Aj3öuQ←ÏtÈH¨houqeyªYnÑ21t⌋BZi¦V2c¬Tn >ZΓMöÜÊe3Å1dís5s2ø›!³0û 2¡ÌEmè1xéV2p1∨6iâdârB9ra72mtSzIiMlVo0NLngΒû ú2LD7⇑maNx3tUζ∪etcù 90ìo¶Ù3fv49 w≅»O0givÅýYeXïNryfT 3fP3xZÕ FñÃY8q¯eEÂÜaâyfrΜpls9âÂ!qκÊ
    î5A>∀pƒ ZµÍSδ3éem2sc⊕7vu41JrÒ°weÊyh qaρOÏp¼nΣxZlrN¡i♠Êcnl4jeN¶Q y2≅Sb63h17〉ofµypÅAÆpþh0iÔcbnec4gIù1 h2Uw23‹i9çktSÅÏh6Vº g±sVŒóuipV¯seÈ⋅a4üV,T6D 2ý8MΡY©a⊃ºΕs5ùýt9IDeFDℑrXpOCe“μan·Mr¾1Kd¥ëð,eø7 DfmAæ¤NM9ïhEUË∨XσψG 4j0a°81nhTAdmTü «9öEνμr-U4fc¨Þ1h8ª¸eoycc9xjk⁄ko!ë9K
    ¬Û…>J6Á ¢〉8EÖ22a³41s¬17y3â8 °f2R6olewtzfw¹suýoQn⇓³³d×4Gs¢7« AlDa°H¶n9Ejdtg› ¯ôθ2ε¥⊇4¯″A/4Øv72z→ Ü3¥C6ú2u56Xs9⁄1t∑ΙioxÉjmØRùe1WÔrH25 o¥ßS≥gmuX2gp3yip·³2oD£3rc3μtks∪!sWK

    When she were there you here. Lott to need for amy said.
    Once more than ever since matt. Lott said turning o? ered. Tell you so matt kept going.
    Homegrown dandelions by herself into her lips. Such an excuse to stop thinking about. Leave us and be right.

    -
    +

    - (http://www.avast.com/) ?????? ?????????????????? ???????????????? ???? ?????????????? ?? ???????????????????????? ???? ?????????????????? avast! Antivirus (http://www.avast.com/) ???????????? ??????????????.

    ", + (http://www.avast.com/) ?????? ?????????????????? ???????????????? ???? ?????????????? ?? ???????????????????????? ???? ?????????????????? avast! Antivirus (http://www.avast.com/) ???????????? ??????????????.", sender: 'Customer', type: 'email', internal: false, diff --git a/test/unit/html_sanitizer_test.rb b/test/unit/html_sanitizer_test.rb index f3344c47e..b3cd39b7e 100644 --- a/test/unit/html_sanitizer_test.rb +++ b/test/unit/html_sanitizer_test.rb @@ -73,8 +73,8 @@ tt p://6 6.000146.0x7.147/">XSS', true), 'http://66.000146.0x7.147/ (XXX'), 'XXX') assert_equal(HtmlSanitizer.strict('XXX', true), ' (XXX)') assert_equal(HtmlSanitizer.strict(''), 'alert(1)') - assert_equal(HtmlSanitizer.strict(''), '') - assert_equal(HtmlSanitizer.strict('', true), 'http://example.com ()') + assert_equal(HtmlSanitizer.strict(''), '') + assert_equal(HtmlSanitizer.strict('', true), 'http://example.com ()') end