Improved html2text method by using HTMLEntities gem.

This commit is contained in:
Martin Edenhofer 2016-02-03 14:33:03 +01:00
parent 8d1f2c2598
commit 29ff4e6fd3
5 changed files with 99 additions and 53 deletions

View file

@ -38,6 +38,7 @@ gem 'twitter'
gem 'koala' gem 'koala'
gem 'mail' gem 'mail'
gem 'email_verifier' gem 'email_verifier'
gem 'htmlentities'
gem 'mime-types' gem 'mime-types'

View file

@ -120,6 +120,7 @@ GEM
guard-compat (~> 1.0) guard-compat (~> 1.0)
multi_json (~> 1.8) multi_json (~> 1.8)
hashie (3.4.3) hashie (3.4.3)
htmlentities (4.3.4)
http (1.0.2) http (1.0.2)
addressable (~> 2.3) addressable (~> 2.3)
http-cookie (~> 1.0) http-cookie (~> 1.0)
@ -341,6 +342,7 @@ DEPENDENCIES
execjs execjs
guard (>= 2.2.2) guard (>= 2.2.2)
guard-livereload guard-livereload
htmlentities
icalendar icalendar
json json
koala koala

View file

@ -149,43 +149,50 @@ class String
# replace multiple spaces with one # replace multiple spaces with one
string.gsub!(/ /, ' ') string.gsub!(/ /, ' ')
# strip all & < > " # try HTMLEntities, if it fails on invalid signes, use manual way
string.gsub!( '&', '&' ) begin
string.gsub!( '&lt;', '<' ) coder = HTMLEntities.new
string.gsub!( '&gt;', '>' ) string = coder.decode(string)
string.gsub!( '&quot;', '"' ) rescue
string.gsub!( '&nbsp;', ' ' )
# encode html entities like "&#8211;" # strip all &amp; &lt; &gt; &quot;
string.gsub!( /(&\#(\d+);?)/x ) { string.gsub!( '&amp;', '&' )
$2.chr string.gsub!( '&lt;', '<' )
} string.gsub!( '&gt;', '>' )
string.gsub!( '&quot;', '"' )
string.gsub!( '&nbsp;', ' ' )
# encode html entities like "&#3d;" # encode html entities like "&#8211;"
string.gsub!( /(&\#[xX]([0-9a-fA-F]+);?)/x ) { string.gsub!( /(&\#(\d+);?)/x ) {
chr_orig = $1 $2.chr
hex = $2.hex }
if hex
chr = hex.chr # encode html entities like "&#3d;"
if chr string.gsub!( /(&\#[xX]([0-9a-fA-F]+);?)/x ) {
chr_orig = chr chr_orig = $1
hex = $2.hex
if hex
chr = hex.chr
if chr
chr_orig = chr
else
chr_orig
end
else else
chr_orig chr_orig
end end
else
chr_orig
end
# check valid encoding # check valid encoding
begin begin
if !chr_orig.encode('UTF-8').valid_encoding? if !chr_orig.encode('UTF-8').valid_encoding?
chr_orig = '?'
end
rescue
chr_orig = '?' chr_orig = '?'
end end
rescue chr_orig
chr_orig = '?' }
end end
chr_orig
}
# remove tailing empty spaces # remove tailing empty spaces
string.gsub!(/\s+\n$/, "\n") string.gsub!(/\s+\n$/, "\n")

View file

@ -132,7 +132,7 @@ class AaaStringTest < ActiveSupport::TestCase
html = ' line&nbsp;1<br> html = ' line&nbsp;1<br>
you<br/> you<br/>
-----&amp;' -----&amp;'
should = 'line 1 should = 'line 1
you you
-----&' -----&'
assert_equal( should, html.html2text) assert_equal( should, html.html2text)

View file

@ -86,7 +86,7 @@ Liebe Grüße!
}, },
{ {
data: IO.read('test/fixtures/mail6.box'), data: IO.read('test/fixtures/mail6.box'),
body_md5: '6229bcc5fc1396445d781daf3c12a285', body_md5: '683ac042e94e99a8bb5e8ced7893b1d7',
params: { params: {
from: '"Hans BÄKOSchönland" <me@bogen.net>', from: '"Hans BÄKOSchönland" <me@bogen.net>',
from_email: 'me@bogen.net', from_email: 'me@bogen.net',
@ -97,9 +97,9 @@ Liebe Grüße!
___ ___
[1] Compare Cable, DSL or Satellite plans: As low as $2.95. [1] Compare Cable, DSL or Satellite plans: As low as $2.95.
Test1:8 Test1:
Test2:& Test2:&
Test3:&ni; Test3:
Test4:& Test4:&
Test5:= Test5:=
@ -328,7 +328,7 @@ Hof
# spam email # spam email
{ {
data: IO.read('test/fixtures/mail16.box'), data: IO.read('test/fixtures/mail16.box'),
body_md5: '5e96cc53e78c0e44523502ee50647808', body_md5: '91e698a1ba3679dff398ba3587b3f3d9',
params: { params: {
from: nil, from: nil,
from_email: 'vipyimin@126.com', from_email: 'vipyimin@126.com',
@ -373,7 +373,7 @@ Hof
}, },
{ {
data: IO.read('test/fixtures/mail20.box'), data: IO.read('test/fixtures/mail20.box'),
body_md5: '646e803f30cddf06db90f426df3672c1', body_md5: 'ddcbbb850491ae9a174c4f1e42309f84',
params: { params: {
from: 'Health and Care-Mall <drugs-cheapest8@sicor.com>', from: 'Health and Care-Mall <drugs-cheapest8@sicor.com>',
from_email: 'drugs-cheapest8@sicor.com', from_email: 'drugs-cheapest8@sicor.com',
@ -382,28 +382,28 @@ Hof
to: 'info2@znuny.com', to: 'info2@znuny.com',
body: "________________________________________________________________________Yeah but even when they. Beth liî ed her neck as well body: "________________________________________________________________________Yeah but even when they. Beth liî ed her neck as well
&oacute;25aHw511I&Psi;11xG&lfloor;o8KHCm&sigmaf;9-2&frac12;23Qg&ntilde;V6UAD12AX&larr;t1Lf7&oplus;1Ir&sup2;r1TLA5pYJhjV gPn&atilde;M36V1E89RUD&Tau;&Aring;12I92s2C&Theta;YE&upsih;Afg&lowast;bT11&int;rIoi&scaron;&brvbar;O5oUIN1Is2S21Pp &Yuml;2q1F&Chi;&uArr;eGOz&lceil;F1R98y&sect; 74&rdquo;lTr8r1H2&aelig;u2E2P2q VmkfB&int;SKNElst4S&exist;182T2G1&iacute; lY92Pu&times;8>R&Ograve;&not;&oplus;&Mu;I&Ugrave;z&Ugrave;CC412QE&Rho;&ordm;S2!Xg&OElig;s. óû5aHw5³½IΨµÁxGo8KHCmς9-Ö½23QgñV6UAD¿ùAXt¨Lf7®Ir²r½TLA5pYJhjV gPnãM36V®E89RUDΤÅ©ÈI9æsàCΘYEϒAfgbT¡1rIoiš¦O5oUIN±IsæSعPp Ÿÿq1FΧeGOzF³R98y§ 74lTr8r§HÐæuØEÛPËq VmkfBSKNElst4SÁ8üTðG°í lY9åPu×8>¬ΜIÙzÙCC4³ÌQEΡºSè!XgŒs.
2&gamma;&dArr;B[1] cwspC&ensp;L8I C K88H E1R?E2e31 !Calm dylan for school today. çγB[1] cwspCLI C KH E R Eëe3¸ !Calm dylan for school today.
Closing the nursery with you down. Here and made the mess. Maybe the from under his mother. Song of course beth touched his pants. Closing the nursery with you down. Here and made the mess. Maybe the from under his mother. Song of course beth touched his pants.
When someone who gave up from here. Feel of god knows what. When someone who gave up from here. Feel of god knows what.
TB&piv;&exist;M5T5&Epsilon;Ef2&ucirc;&ndash;N&para;1v&Zeta;'1&dArr;&prop;5S2225 &Chi;0j&Delta;HbAg&thorn;E&mdash;2i6A2lD&uArr;LGj2nTOy11H2&tau;9&rsquo;:Their mother and tugged it seemed like TBϖM5T5ΕEf2ûNÁvΖ'®5SÐçË5 Χ0jΔHbAgþE2i6A2lDLGjÓnTOy»¦Hëτ9:Their mother and tugged it seemed like
d3RsV&para;H2&Theta;i&macr;B&part;gax1b&icirc;gdH23r2J&yuml;1aIK1&sup2; n1jfaTk1Vs3952 C&tilde;lBl&lsquo;mxGo0&radic;2XwT8Ya 28ksa&int;f1&alefsym;s&rdquo;62Q 2Ad7$p32d1e&prod;2e.0&rdquo;261a2&Kappa;63&alpha;SM2 Nf52CdL&cup;1i&harr;xcaa52R3l6Lc3i2z16s&oacute;9&egrave;U zDE1aE21gs25&Euml;2 hE1cl&sup;&cent;11o21&micro;Bw1zF1 q2k&otilde;aXUius1r0&sube; d&bull;&isin;2$1Z2F1218l.07d56P&Uacute;l25JAO6 d3RsVHÓΘi¯Bgax1bîgdHä3rýJÿ1aIKDz n1jfaTk³Vs395ß C˜lBlmxGo0úXwT8Ya õ8ksaf·s6ÑQ ÍAd7$p32d1eæe.0×61Κ63αSMû Nf5ÉCdL1ixcaa5êR3l6Lc3iãz16só9èU zDE²aEȨgs25ËÞ hE§cl¢¢ÂoÒµBw²zF© qÏkõaXUius1r0 dø$¢Z2F12­8l.07d56PÚl25JAO6
45loV2iv1i2&atilde;&Upsilon;&lfloor;a2&sup;d2g&Atilde;&Upsilon;3&trade;r22u&cedil;aWjO8 n40&ndash;Soy&egrave;2u1&empty;23p1J&Mu;Ne&Igrave;22jr&aacute;2r&Kappa; 1229A2rAkc8nuEtl22ai&Dagger;OB8vSb&eacute;&sigma;e&iota;&otilde;q1+65cw 2s8Ua&ograve;4PrsE1y8 &lang;fMElh&upsih;&sdot;Jo8pmzwj&circ;N1 wv39aW1WtsvuU3 1a&oelig;1$2&Nu;nR2O2&rceil;B.&forall;2c&rarr;5&Ecirc;9&chi;w5p1&frasl;N fHGFVfE&sup3;2i&sigma;jGpa51kgg12cWrUq52akx2h 0F24P&cedil;2L2rn22&Iuml;o2&Yacute;2HfoRb2eU&alpha;w6s2N&oline;ws&para;13&Beta;i2X1&cedil;ofgtHnR&perp;32ase92lF1H5 26B1a&sup;2i&upsih;s&ocirc;12i &Aring;kMyl2J1&Auml;oQ&ndash;0&image;wvm&ugrave;2 2&circ;&mu;\"aQ7jVse62f 1h2p$L2r&pound;3i1t2.323h5qP8g0&hearts;&divide;R2 45loVóiv1i2ãΥd2gÃΥ3rÎÍu¸aWjO8 n40Soyè2u¡Î3p¢JΜNeÌé×jráÒrΚ 1ÌÓ9AúrAkc8nuEtl22aiOB8vSbéσeιõq1+65cw Òs8Uaò4PrsE1y8 fMElhϒJo8pmzwjˆN¥ wv39aW¡WtsvuU3 1³ΝnR2OÏB.þc5Ê9χw5pÃN fHGFVfE³ãiσjGpa5kgg¡ìcWrUq5æakx2h 0Fè4P¸ÕLñrn22ÏoþÝÐHfoRb2eUαw6sñNws§3ΒiòX¸ofgtHnR3âase9álF¿H5 à6BÁa2iϒ¡ói ÅkMylÚJ¾ÄoQ0wvmùþ ˈμ\"aQ7jVse6Ðf «hÜp$Lâr£3i1tÚ.323h5qP8g0♥÷R÷
&middot;i&fnof;PV1&Beta;&ni;&oslash;iF1R1a4v32gL9&cent;wr1722a2&ucirc;0&eta; &thorn;12&szlig;Stu21u7&aacute;&iexcl;lp2ocEe1SLlrV2Xj &perp;U&micro;1F&not;48&eth;ov71Arm242c2Vw2e1&sect;&supe;N 1242aL&thorn;Z2ski&times;5 c&euro;pBl&ucirc;26&part;ol1f&Uacute;wK&szlig;32 4i2la4C12sRE21 &atilde;eI2$2z8t442fG.&cedil;1&le;12F&rsquo;&Atilde;152in&nsub; Tl1&euml;C2v7Ci71X8a225Nl&thorn;U&rang;&iota;icO&sum;&laquo;s&middot;iKN Uu&upsih;jS1j52u2J&uuml;&sect;pn5&deg;1e&yen;&Ucirc;3&weierp;r1W&Dagger;2 J&lsaquo;S7A1j0sc&1pkt1qq2iZ561vn81&lowast;e22Q3+723&Scaron; &sum;RkLaKX2as2s22 &iuml;111lD2z8o278wwU&ndash;&Agrave;C T6U2a&upsih;938s20G&yuml; Ox2&isin;$98&lsquo;R21H25.&Ograve;L6b9&theta;r&delta;292f9j ·iƒPV1ΒøiF¤RÃa4v3âgL9¢wr¨7ø×aÏû0η þ1àßStuÞ³u7á¡lpÑocEe·SLlrVàXj ¢F¬48ðov7¨Arm×4ÍcùVwÞe1§N ÂÛ4äaLþZ2ski×5 cpBlûù6olÃfÚwKß3Ñ 4iíla4C³êsREÕ1 ãeIó$âz8t442fG.¸1¸2FÃ152in Tl©ëC2v7Ci7·X8a×ú5NlþUιicO«s·iKN UuϒjSÃj5Ýu÷§pn5°§e¥Û3rÆWò JS7A1j0sc&ºpkt·qqøiZ56½vn8¨eîØQ3+7Î3Š RkLaKXËasÐsÌ2 ïÇ­lDäz8oã78wwUÀC T6Uûaϒ938sÌ0Gÿ Oxó$98R2ÂHï5.ÒL6b9θrδÜ92f9j
Please matt on his neck. Okay matt huï ed into your mind Since her head to check dylan. Where dylan matt got up there Please matt on his neck. Okay matt huï ed into your mind Since her head to check dylan. Where dylan matt got up there
1&Egrave;&plusmn;&Alpha;AYQ1dN12&upsih;XT00&Agrave;vI&or;&iacute;o8-1b&reg;8A&Epsilon;1V4Lg&Otilde;&uarr;7LKtgcEiw1yR5Y22GRA1&deg;I10C2C2Ti&uuml;/2wc0Ax211S&Uuml;&Acirc;2&OElig;T&Aacute;22&ograve;HpN&acirc;&ugrave;M6&Egrave;10A5Tb1:Simmons and now you really is what. Matt picked up this moment later that. 1ȱΑAYQªdN¬ÚϒXT00ÀvIío8-½b®8AΕºV4LgÕ7LKtgcEiw­yR5YýæGRA1°I¿0CïCàTiü/þwc0Ax211SÜÂùŒTÁ2êòHpNâùM6Ⱦ0A5Tb»:Simmons and now you really is what. Matt picked up this moment later that.
251yV922Yeg1&uarr;DnJ3l4t22b1os&prod;jll&divide;iS2iwB&Icirc;4n021&Ouml; 1f&divide;2a11l2su&Uacute;82 2LCblgvN&frac12;o1oP3wn&spades;90 FZora&M&trade;xs&Kappa;bb1 251&xi;$12&middot;22iG2&nabla;1&supe;&Xi;&not;3.0P0&kappa;53V1203&Yacute;Yz 2X&cent;BAZ4Kwddu2vvuB&uarr;&Beta;a1&rsquo;THi0&mdash;93rZ&epsilon;j0 1r&Mu;1a2111s71&Iota;f 8&dArr;2olW&bdquo;62o6yH&yen;wKZ&and;6 21h2aKJ&ldquo;&real;s48I&Igrave; 21&not;1$Z&Sigma;122&ntilde;26B42YMZ.21V19f10&aring;54&lceil;R8 25¯yV9ÙßYeg·DnJ3l4tÝæb1osjll÷iSÐiwBÎ4n0ú1Ö ªf÷Ña§1løsuÚ8ê 2LCblgvN½o¼oP3wn90 FZora&MxsΚbb ç5Ãξ$Âô·×2iGæ1Ξ¬3.0P0κ53VÁö03ÝYz øX¢BAZ4KwdduÜvvuBΒTHi093rZεj0 §rΜÅa2­·§s7¸Ιf 8þolW6Ýo6yH¥wKZ6 21hÒaKJs48IÌ ÔÀ¬­$ZΣ¹ü2ñÙ6B42YMZ.Ô¹V¼9f·0å54R8
2w\"9N2gB&Agrave;a2S&ecirc;1s&cong;gG&Ocirc;o0Dn4n&crarr;&gamma;7&otimes;eS7e2xf3Jd q&divide;CMa221isNMZp zz0&tilde;l&Kappa;Lw8o229ww1&sect;Qu 1D&lceil;&iacute;a2212sJ811 3o&ugrave;2$&brvbar;1N&real;1>R2t7WPM1.181D92k5D9&lowast;8&asymp;R l131Sj1&Psi;8p&Sigma;2K&ugrave;i6rr2rb&Ucirc;u&not;i2V&lowast;&prod;v5&ordf;10a27B1 &Uacute;&diams;&Xi;sa9j3&chi;sa1i&Omicron; Oi&weierp;ml6&oacute;f2owbz&forall;wA6&ugrave;&rarr; 22b2ai1wbs&diams;&beta;Gs 281i$i&Agrave;&circ;12&sup;2wC82n8o.13NJ9S11&Theta;0P1Sd ÷w\"9N2gBÀaðSê¢s≅gGÔo0Dn4n↵γ7⊗eS7eýxf3Jd q÷CMaÍä³isNMZp zz0˜lΚLw8oë29ww¤§Qu ¥D⌈íaýË¢ésJ8Á¬ 3oùÙ$¦1N1>Rét7WPM¨.¶8¹D92k5D98≈R l©3ªSj·Ψ8pΣïKùi6rrÔrbÛu¬i2V∏v5ª10a27BÁ Ú♦Ξsa9j3χsa¯iΟ Oi℘ml6óféowbz∀wA6ù→ ñ×bàai´wbs♦βGs Ù81i$iÀˆ12⊃2wC82n8o.µ3NJ9S1©Θ0P1Sd
What made no one in each time. Mommy was thinking of course beth. Everything you need the same thing What made no one in each time. Mommy was thinking of course beth. Everything you need the same thing
P2EVG29srEx&lArr;9oN3U1yE2i2OR5k&Ccedil;&yuml;A&Tau;&eta;&nu;ULP&iquest;&and;q R5&iquest;FHt7J6E&raquo;1C&empty;A2&exist;aVLu&lowast;&cent;tT&lang;21&scaron;Hq9N&eacute;: PïEVGÿ9srEx9oN3U®yEÎi2OR5kÇÿAΤηνULP¿q R5¿FHt7J6E»¯CaVLu¢tT2ÚHq9Né:
&perp;&THORN;21T11BrrC712ad&scaron;6lmzb16ai07tdBo&times;Kop&iacute;&Rho;1lj4Hy 2a&Oacute;1a&Ouml;&iacute;&notin;&Oacute;s1a2&rsquo; 4D1kleow2o3&ndash;12wjR&le;&Pi; 1Rh2af27&cong;s26u2 8NLV$&cup;&dArr;1&darr;1Y&para;21.v2&Egrave;232S7202n11 m5VKZy3K2i&ntilde;21Dt&Uacute;2HrhGaMvr5&iuml;R1o11nam&Mu;w22anFu8x7&lceil;sU E4cva11&epsilon;&trade;s7&Alpha;GO dA35ld&ntilde;&Igrave;&egrave;oA&xi;I1wXK2n f1x&frac34;a&prod;7ffs&dagger;222 5msC$72t10z&bdquo;n2.it1T7O8vt5182&middot; J&iuml;12Pk&aacute;O1rn2rAo8s5&empty;z&mdash;4Rha11t&tilde;cq5Y&Chi; &Tau;Q2ra2&rfloor;4&sup1;s&Uuml;51&sect; 2VB&iota;luw2ioL32Bw1111 5&isin;22a1I22s&scaron;&Ucirc;21 G17&rho;$kJM80&sim;&ang;&alefsym;l.J1Km3212&sup;52&eacute;&frac14;&sect; p121A1NU0c&yen;x2fo&lang;22cm14QGpHEj7lnDPVieV21a&Pi;2H7 1j26azBSes&euml;1c9 &acute;2&Ugrave;&not;l0n21o22RVw1X1&Iuml; &alpha;V21a&cong;&sigma;1Zs&sect;jJ&aring; 3pFN$1Kf821Y&Omicron;7.32Y95J&Alpha;q&Yuml;0v91Q ÞÞ¨T¦ªBrrC7³2adš6lmzb¨6ai07tdBo×KopíΡÄlj4Hy ÝaÓ1aÖíÓs1aá 4D­kleowËo31ÍwjRΠ £RhÈafà7sù6u2 8NLV$»1Y2µ.vßÈ23ÖS7û0Ün¬Ä m5VKZy3KÎiñë¹DtÚ2HrhGaMvr5ïR«oÂ1namΜwÐãanFu8x7sU E4cva£Âεs7ΑGO dA35ldñÌèoAξI1wXKïn f¼x¾a7ffsìÖð 5msC$7Ët¦0zn÷.it¡T7O8vt5¼8å· Jï1ÏPkáOrnùrAo8s5z4Rha1®t˜cq5YΧ ΤQÍraÑ4¹sÜ5²§ ûVBιluwóioL3ëBw£±1 5àáa1IÊ2sšÛÛ G´7ρ$kJM80l.J1Km32µÚ5ã鼧 p°ÿ­A¹NU0c¥xçfoØácm14QGpHEj7lnDPVieV2aΠ2H7 ²j26azBSesë1c9 ´2Ù¬l0nò¤oõâRVw¦X´Ï α­aσ¼Zs§jJå 3pFN$¾Kf821YΟ7.3ÍY95JΑqŸ0v9ÄQ
&ntilde;&uarr;yjP&Tau;1u6rFwhNeCO&piv;2d5&Gamma;&ecirc;cne&frac14;a0iTF15sxUS0o88&alefsym;1la&Aring;T&weierp;oOB11n2111e&and;Kpf &upsilon;98&xi;abp&dagger;3sj82& 9&copy;Bol2AWSo7wNgw21mM tteQat0&piv;2s4&equiv;N&Ccedil; &Otilde;&AElig;1&Theta;$2R2q0117&ordf;.mt111&mdash;uwF57H&clubs;f &aelig;&cup;HYSj&psi;3By&scaron;1g1ndX15t1126hZ&rArr;y2r82mdowy2di&psi;8Y&Eta;d0r&scaron;&Scaron; N029a13I&brvbar;sQa&yacute;2 20Y7lZ118o&int;50&Ccedil;w1\"1&Zeta; n6&Uuml;&ge;a&nabla;l&szlig;nsF&rsaquo;J9 1D&Omicron;K$142L0S7z2.Ta2X31R9953911 ñyjPΤ1u6rFwhNeCOϖúd5Γêcne¼a0iTF¹5sxUS0o88ℵªlaÅToOBÀ¹·­1eKpf υ98ξabp3sj8â& 9©BolÎAWSo7wNgwø¦mM tteQat0ϖ2s4 ÕƦΘ$ùRÓq0·Ã7ª.mt¾³1uwF57Hf æHYSjψ3Byš²g¤ndXÀ5tµ¯ò6hZyÿr8ÿmdowyðdiψ8YΗd0ršŠ N0Ý9aÃ3I¦sQaýê Õ0Y7lZ¯18o50Ç\"©Ζ n6Ü≥a∇lßnsFJ9 ºDΟK$Á4ÉL0S7zÖ.Ta2X3²R995391¡
Turning to mess up with. Well that to give her face Another for what she found it then. Since the best to hear Turning to mess up with. Well that to give her face Another for what she found it then. Since the best to hear
GX1&diams;Ca2isA18&iexcl;bN2&icirc;81A22z&Theta;D&nabla;tNXIfWi&ndash;Ap2WYNYF1b &ne;7y&phi;Dpj6&copy;R04E1U1&ntilde;n7G1o2jS111&ni;TC&perp;&pi;&Euml;O1&lowast;21RtS2wE6621 &nu;222ASi21DP&ldquo;8&lambda;V&and;W&sdot;OA2g6qNtNp1T269XA7&yen;11GGI6SEwU22S3&Chi;12!Okay let matt climbed in front door. Well then dropped the best she kissed GX°Ca2isA¾8¡bNÉî8ÂAöÜzΘDtNXIfWiAp2WYNYF®b 7yφDpj6©R04EÂU´ñn7GÆoÌjS³ÁTCπËO1÷©RtS2wE66è­ νÑêéASi21DP8λVWOAÖg6qNtNp1T269XA7¥À²GGI6SEwU2íS3Χ!Okay let matt climbed in front door. Well then dropped the best she kissed
122C>&Phi;221 flQkWM&Scaron;tvo2dV1rT1ZtlN6R9dZ12LwuD19i3B5Fdc&AElig;l2eSwJd K1tDDfoX&plusmn;evr&yacute;wlK7P&divide;i1e13v2z&egrave;Ce&not;&Mu;&clubs;&Nu;rGhs2y172Y!gZp&aacute; R6O4O112&ni;r92Z1dB6i1e2&sigma;&sim;&Oacute;rCZ1s 122I31e2&curren;+&rceil;C&ecirc;U 1k6wG1c&sbquo;1o60AJoR72sd3i11s22pt &Oslash;277a2&forall;f5np&curren;n2duE8&rArr; 21SHGJVAtew&nabla;L&euml;t&sigmaf;2D2 6k28FgQQ&sub;R81L2EI2&notin;iEH&Iacute;&Eacute;3 H2r5Af1qxim&sigmaf;&rho;&Dagger;r6&copy;2jmWv92aW21giAC21lM&rfloor;1k 2V2&cedil;S2&ugrave;&theta;2h15B&Iota;i&lowast;ttEp8&cent;EPpSzWJi32U2n5&igrave;Ihgx8n&rceil;!j&prod;e5 ¤ÊüC>ΦÉí© flQkWMŠtvoÐdV¯rT´ZtlN6R9dZ¾ïLwuD¢9i3B5FdcÆlÝeSwJd KªtDDfoX±evrýwlK7P÷i§e³3vÎzèCe¬ΜΝrGhsáy°72Y!gZpá R6O4O»£ðr9ÊZÀdB6iÀeîσÓrCZ1s ²ú÷I3ÁeÒ¤+CêU »k6wG´c¾o60AJoR7Ösd3i¿Ásððpt Øè77f5np¤nþduE8 ȹSHGJVAtewLëtςëDæ 6kÌ8FgQQR8ÇL2EI2iEHÍÉ3 Hÿr5Af1qximςρr6©2jmWv9ÛaWð¸giACÜ¢lM¿k ʸSÓùθçhµ5BΙittEp8¢EPpSzWJi32UÎn5ìIhgx8n!je5
x1qJ>mC7f 512y1GA420lCQe09s9u%uks&atilde; &psi;2X5A4g3nu&larr;&Tau;yst72pMh&scaron;g12e&rang;p&Uacute;1n1Y&fnof;&Scaron;t&Eacute;2LGizqQ&darr;c3t&Ugrave;I &oelig;&iuml;bXMK&Ucirc;RSertj2d\"Ot2ss581!oo2i F&Acirc;W2EW2DDx7hI2p&Phi;S2Bi2drUr&hArr;J<2a1&Alpha;zwt01p2i28R2oH21&Auml;n172r 1122DYvO7ak21ht204&Pi;e&part;&lambda;11 12dUo&omicron;1X3fc631 e&&cup;GOxT3CvXcO1e3K2&nu;r31y2 262z31&infin;I1 P&igrave;&exist;zYt6F4e6&egrave;&dArr;va5229rk&Theta;32sKP5R!&iota;&micro;mz x¯qJ>mC7f 5ºñy1GA4Ý0lCQe09s9u%uksã ψìX5A4g3nuΤyst7ÍpMhšgÀÖe£n¼YƒŠtÉÚLGizqQc3tÙI œïbXMKÛRSertj×d\"OtÊss58®!oo2i FÂWáEWøDDx7hIÕpΦSôBiÒdrUr⇔J<Õa1Αzwt0°p×ià8RÌoHÛ1Än¥7ÿr ¯¥õàDYvO7aká»htì04Πe∂λÇ1 1ÈdUoο°X3fc63¶ e&GOxT3CvXcO·e3KËνr3¸y2 26Ëz3Ã∞I± Pì∃zYt6F4e6è⇓va5÷þ9rkΘ3äsKP5R!ιµmz
3212>22&prime;L 2&oacute;B&perp;S&cap;OQMe&yacute;&notin;2&Phi;c229Tu2a&int;dr25&ucirc;MeLk92 121OO&oslash;9oKn&yuml;&psi;&Agrave;Wl7H2&empty;i9&rho;&Egrave;2ni2&bull;2eXPx&iacute; 1251SUqtBh72a5otSZ9p222Dpf1&Yacute;2i2&omega;bjn11&Yuml;2gs2h&minus; b&aring;2swx2oSiq8hvt2262h&lceil;b&sup2;S 26&thorn;SVBEFCi2U&agrave;ds9&Ntilde;1&Epsilon;a11&xi;2,1&bdquo;wv jw7AMK2&harr;la2G91s23&laquo;etuB2keD&atilde;2&igrave;r1&uml;IeC&frac34;Ea&Auml;ao&divide;&Prime;&and;r>6e1d9D21,mtS2 I&lowast;44A1R&circ;2M98zME&cong;Q&Yuml;&ETH;X&sup1;4j6 20n3a1&apos;22nxpl6d832J 06&ETH;9E22&yacute;2-2829c42r2h72&yen;med&frac12;&spades;kc23sPk12&bull;r!&rang;QCa 3í1ë>ð2L 2óBSOQMeýÑΦcöè9Tuãadrâ5ûMeLk9Ô £æ1OOø9oKnÿψÀWl7HÏi9ρÈÊniâÛeXPxí ´Í5¡SUqtBh7æa5otSZ9pØËÛDpf®ÝÊiÛωbjn¯½Ÿ2gsçh båÌswxðoSiq8hvtèé6Òhb²S ×6þSVBEFCiøUàds9Ñ¤Ε§ξÜ,1wv jw7AMKÈlaæG9¦së3«etuB2keDãæìr°¨IeC¾EaÄao÷r>6e¸d9DùÇ,mtSö I44A¹RˆêM98zMEQŸÐX¹4j6 î0n3a1'Êânxpl6d83þJ 06Ð9Eïãýã-28Ú9c4ßrØh7è¥med½kcñ3sPk2r!QCa
&Scaron;e21>1&sigma;12 bp&oslash;NERN8eaD61ns7Abhy&plusmn;12&cap; D7sVR8&apos;1Ee22DVfc&tilde;32u72&AElig;qnc23qd2&sim;4&nabla;s&rho;mi5 6212a21&prop;TnQb9sd1M&ugrave;&image; &sum;gM22bN2&para;4c&auml;&frac12;&sube;/4X1&kappa;71f1z &piv;12ECzf&bull;1uMbycs1&bull;9&frac34;ts0T2o3h2DmSs31e7B2&Eacute;r2&sdot;22 &phi;81&Prime;SSX&eth;1u&uacute;I15p58uHp2c2&plusmn;o&part;T1Rrd6sMt&cup;1&micro;&xi;!24Xb ŠeÏÀ>Ãσ½å bpøNERN8eaD6Åns7Abhy±Æü D7sVR8'ºEeÿáDVfc˜3ëu7ÏÆqncË3qdÊ4sρmi5 6æ¾Ê°TnQb9sdÀMù gMÿ2bNð4½/4X1κ7¥f1z ϖ1úECzf1uMbycs19¾ts0Tào3hêDmSs3Áe7BíÉrôãÔ φ8ÄSSXð¤uúI¸5p58uHp2cß±oT©Rrd6sMtµµξ!é4Xb
Both hands through the fear in front. Both hands through the fear in front.
Wade to give it seemed like this. Yeah but one for any longer. Everything you going inside the kids. Wade to give it seemed like this. Yeah but one for any longer. Everything you going inside the kids.
@ -414,7 +414,7 @@ Wade to give it seemed like this. Yeah but one for any longer. Everything you go
}, },
{ {
data: IO.read('test/fixtures/mail21.box'), data: IO.read('test/fixtures/mail21.box'),
body_md5: '617017ee0b2d1842f410fceaac696230', body_md5: 'c9fb828072385643e528ab3a9ce7f10c',
params: { params: {
from: 'Viagra Super Force Online <pharmacy_affordable1@ertelecom.ru>', from: 'Viagra Super Force Online <pharmacy_affordable1@ertelecom.ru>',
from_email: 'pharmacy_affordable1@ertelecom.ru', from_email: 'pharmacy_affordable1@ertelecom.ru',
@ -684,6 +684,42 @@ Weil wir die Echtheit oder Vollständigkeit der in dieser Nachricht enthaltenen
body: 'some html text', body: 'some html text',
}, },
}, },
{
data: IO.read('test/fixtures/mail36.box'),
body_md5: '428327fb533b387b3efca181ae0c25d0',
params: {
from: 'Martin Smith <m.Smith@example.com>',
from_email: 'm.Smith@example.com',
from_display_name: 'Martin Smith',
subject: 'Fw: Zugangsdaten',
to: 'Martin Edenhofer <me@example.com>',
body: ' 
-- 
don\'t cry - work! (Rainald Goetz)
 
 
Gesendet: Mittwoch, 03. Februar 2016 um 12:43 Uhr
Von: "Martin Smith" <m.Smith@example.com>
An: linuxhotel@zammad.com
Betreff: Fw: Zugangsdaten
 
-- 
don\'t cry - work! (Rainald Goetz)
 
 
Gesendet: Freitag, 22. Januar 2016 um 11:52 Uhr
Von: "Martin Edenhofer" <me@example.com>
An: m.Smith@example.com
Betreff: Zugangsdaten
Um noch vertrauter zu werden, kannst Du mit einen externen E-Mail Account (z. B. [1] web.de) mal ein wenig selber spielen. :)
[1] http://web.de',
},
},
] ]
count = 0 count = 0