email_parser_test.rb 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. # encoding: utf-8
  2. # rubocop:disable all
  3. require 'test_helper'
  4. class EmailParserTest < ActiveSupport::TestCase
  5. test 'parse' do
  6. files = [
  7. {
  8. data: IO.read('test/fixtures/mail1.box'),
  9. body_md5: 'b57d21dcac6b05e1aa67af51a9e4c1ec',
  10. params: {
  11. from: 'John.Smith@example.com',
  12. from_email: 'John.Smith@example.com',
  13. from_display_name: '',
  14. subject: 'CI Daten für PublicView ',
  15. },
  16. },
  17. {
  18. data: IO.read('test/fixtures/mail2.box'),
  19. body_md5: '154c7d3ae7b94f99589df62882841b08',
  20. params: {
  21. from: 'Martin Edenhofer <martin@example.com>',
  22. from_email: 'martin@example.com',
  23. from_display_name: 'Martin Edenhofer',
  24. subject: 'aaäöüßad asd',
  25. body_md5: "äöüß ad asd\n\n-Martin\n\n--\nOld programmers never die. They just branch to a new address.\n",
  26. body: "äöüß ad asd
  27. -Martin
  28. --
  29. Old programmers never die. They just branch to a new address.
  30. "
  31. },
  32. },
  33. {
  34. data: IO.read('test/fixtures/mail3.box'),
  35. body_md5: '96a0a7847c1c60e82058db8f8bff8136',
  36. params: {
  37. from: '"Günther John | Example GmbH" <k.guenther@example.com>',
  38. from_email: 'k.guenther@example.com',
  39. from_display_name: 'Günther John | Example GmbH',
  40. subject: 'Ticket Templates',
  41. },
  42. },
  43. {
  44. data: IO.read('test/fixtures/mail4.box'),
  45. body_md5: '9fab9a0e8523011fde0f3ecd80f8d72c',
  46. params: {
  47. from: '"Günther Katja | Example GmbH" <k.guenther@example.com>',
  48. from_email: 'k.guenther@example.com',
  49. from_display_name: 'Günther Katja | Example GmbH',
  50. subject: 'AW: Ticket Templates [Ticket#11168]',
  51. body: "Hallo Katja,
  52. super! Ich freu mich!
  53. Wir würden gerne die Präsentation/Einführung in die Ticket Templates per Screensharing oder zumindest per Telefon machen.
  54. Mögliche Termine:
  55. o Do, 10.05.2012 15:00-16:00
  56. o Fr, 11.05.2012 13:00-14:00
  57. o Di, 15.05.2012 17:00-18:00
  58. Über Feedback würde ich mich freuen!
  59. PS: Zur besseren Übersicht habe ich ein Ticket erstellt. :) Im Footer sind unsere geschäftlichen Kontaktdaten (falls diese irgendwann einmal benötigt werden sollten), mehr dazu in ein paar Tagen.
  60. Liebe Grüße!
  61. -Martin
  62. ",
  63. },
  64. },
  65. {
  66. data: IO.read('test/fixtures/mail5.box'),
  67. body_md5: 'f34033e9a34bb5367062dd5df21115df',
  68. params: {
  69. from: 'marc.smith@example.com (Marc Smith)',
  70. from_email: 'marc.smith@example.com',
  71. from_display_name: 'Marc Smith',
  72. subject: 'Re: XXXX Betatest Ticket Templates [Ticket#11162]',
  73. },
  74. },
  75. {
  76. data: IO.read('test/fixtures/mail6.box'),
  77. body_md5: '683ac042e94e99a8bb5e8ced7893b1d7',
  78. params: {
  79. from: '"Hans BÄKOSchönland" <me@bogen.net>',
  80. from_email: 'me@bogen.net',
  81. from_display_name: 'Hans BÄKOSchönland',
  82. subject: 'utf8: 使って / ISO-8859-1: Priorität" / cp-1251: Сергей Углицких',
  83. body: "this is a test
  84. ___
  85. [1] Compare Cable, DSL or Satellite plans: As low as $2.95.
  86. Test1:–
  87. Test2:&
  88. Test3:∋
  89. Test4:&
  90. Test5:=
  91. [1] http://localhost/8HMZENUS/2737??PS="
  92. },
  93. },
  94. {
  95. data: IO.read('test/fixtures/mail7.box'),
  96. body_md5: 'c78f6a91905538ee32bc0bf71f70fcf2',
  97. params: {
  98. from: 'Eike.Ehringer@example.com',
  99. from_email: 'Eike.Ehringer@example.com',
  100. from_display_name: '',
  101. subject: 'AW:Installation [Ticket#11392]',
  102. body: "Hallo.
  103. Jetzt muss ich dir noch kurzfristig absagen für morgen.
  104. Lass uns evtl morgen Tel.
  105. Mfg eike
  106. Martin Edenhofer via Znuny Team --- Installation [Ticket#11392] ---
  107. Von: \"Martin Edenhofer via Znuny Team\" <support@example.com>
  108. An eike.xx@xx-corpxx.com
  109. Datum: Mi., 13.06.2012 14:30
  110. Betreff Installation [Ticket#11392]
  111. ___
  112. Hi Eike,
  113. anbei wie gestern telefonisch besprochen Informationen zur Vorbereitung.
  114. 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.
  115. b) Installation von \"mysqld\" und \"perl-DBD-MySQL\".
  116. Das wäre es zur Vorbereitung!
  117. Bei Fragen nur zu!
  118. -Martin
  119. --
  120. Martin Edenhofer
  121. Znuny GmbH // Marienstraße 11 // 10117 Berlin // Germany
  122. P: +49 (0) 30 60 98 54 18-0
  123. F: +49 (0) 30 60 98 54 18-8
  124. W: http://example.com
  125. Location: Berlin - HRB 139852 B Amtsgericht Berlin-Charlottenburg
  126. Managing Director: Martin Edenhofer",
  127. },
  128. },
  129. {
  130. data: IO.read('test/fixtures/mail8.box'),
  131. body_md5: 'ca502c70a1b006f5184d1f0bf79d5799',
  132. attachments: [
  133. {
  134. md5: 'c3ca4aab222eed8a148a716371b70129',
  135. filename: 'message.html',
  136. },
  137. ],
  138. params: {
  139. from: 'Franz.Schaefer@example.com',
  140. from_email: 'Franz.Schaefer@example.com',
  141. from_display_name: '',
  142. subject: 'could not rename: ZZZAAuto',
  143. body_md5: "Gravierend?
  144. Mit freundlichen Grüßen
  145. Franz Schäfer
  146. Manager Information Systems
  147. Telefon
  148. +49 000 000 8565
  149. franz.schaefer@example.com
  150. Example Stoff GmbH
  151. Fakultaet
  152. Düsseldorfer Landstraße 395
  153. D-00000 Hof
  154. www.example.com
  155. Geschäftsführung/Management Board: Jan Bauer (Vorsitzender/Chairman),
  156. Oliver Bauer, Heiko Bauer, Boudewijn Bauer
  157. Sitz der Gesellschaft / Registered Office: Hof
  158. Registergericht / Commercial Register of the Local Court: HRB 0000 AG
  159. Hof
  160. ",
  161. },
  162. },
  163. {
  164. data: IO.read('test/fixtures/mail9.box'),
  165. body_md5: 'c70de14cc69b17b07850b570d7a4fbe7',
  166. attachments: [
  167. {
  168. md5: '9964263c167ab47f8ec59c48e57cb905',
  169. filename: 'message.html',
  170. },
  171. {
  172. md5: 'ddbdf67aa2f5c60c294008a54d57082b',
  173. filename: 'super-seven.jpg',
  174. },
  175. ],
  176. params: {
  177. from: 'Martin Edenhofer <martin@example.de>',
  178. from_email: 'martin@example.de',
  179. from_display_name: 'Martin Edenhofer',
  180. subject: 'AW: OTRS / Anfrage OTRS Einführung/Präsentation [Ticket#11545]',
  181. body: "Enjoy!\n\n-Martin\n\n--\nOld programmers never die. They just branch to a new address.\n\n"
  182. },
  183. },
  184. {
  185. data: IO.read('test/fixtures/mail10.box'),
  186. body_md5: 'ddfad696bd34d83f607763180243f3c5',
  187. attachments: [
  188. {
  189. md5: '52d946fdf1a9304d0799cceb2fcf0e36',
  190. filename: 'message.html',
  191. },
  192. {
  193. md5: 'a618d671348735744d4c9a4005b56799',
  194. filename: 'image001.jpg',
  195. },
  196. ],
  197. params: {
  198. from: 'Smith Sepp <smith@example.com>',
  199. from_email: 'smith@example.com',
  200. from_display_name: 'Smith Sepp',
  201. subject: 'Gruß aus Oberalteich',
  202. # :body => "Herzliche Grüße aus Oberalteich sendet Herrn Smith\n\n \n\nSepp Smith - Dipl.Ing. agr. (FH)\n\nGeschäftsführer der example Straubing-Bogen\n\nKlosterhof 1 | 94327 Bogen-Oberalteich\n\nTel: 09422-505601 | Fax: 09422-505620\n\nInternet: http://example-straubing-bogen.de <http://example-straubing-bogen.de/> \n\nFacebook: http://facebook.de/examplesrbog <http://facebook.de/examplesrbog> \n\n - European Foundation für Quality Management\n\n"
  203. },
  204. },
  205. {
  206. data: IO.read('test/fixtures/mail11.box'),
  207. body_md5: 'cf8b26d9fc4ce9abb19a36ce3a130c79',
  208. attachments: [
  209. {
  210. md5: '08660cd33ce8c64b95bcf0207ff6c4d6',
  211. filename: 'message.html',
  212. },
  213. ],
  214. params: {
  215. from: 'CYLEX Newsletter <carina.merkant@cylex.de>',
  216. from_email: 'carina.merkant@cylex.de',
  217. from_display_name: 'CYLEX Newsletter',
  218. subject: 'Eine schöne Adventszeit für ZNUNY GMBH - ENTERPRISE SERVICES FÜR OTRS',
  219. to: 'enjoy_us@znuny.com',
  220. },
  221. },
  222. {
  223. data: IO.read('test/fixtures/mail12.box'),
  224. body_md5: '8b48e082bc77e927d395448875259172',
  225. attachments: [
  226. {
  227. md5: '46cf0f95ea0c8211cbb704e1959b9173',
  228. filename: 'message.html',
  229. },
  230. {
  231. md5: 'b6e70f587c4b1810facbb20bb5ec69ef',
  232. filename: 'image002.png',
  233. },
  234. ],
  235. params: {
  236. from: 'Alex.Smith@example.com',
  237. from_email: 'Alex.Smith@example.com',
  238. from_display_name: '',
  239. subject: 'AW: Agenda [Ticket#11995]',
  240. to: 'example@znuny.com',
  241. },
  242. },
  243. {
  244. data: IO.read('test/fixtures/mail13.box'),
  245. body_md5: '58806e006b14b04a535784a5462d09b0',
  246. attachments: [
  247. {
  248. md5: '29cc1679f8a44c72be6be7c1da4278ac',
  249. filename: 'message.html',
  250. },
  251. ],
  252. params: {
  253. from: 'thomas.smith@example.com',
  254. from_email: 'thomas.smith@example.com',
  255. from_display_name: '',
  256. subject: 'Antwort: Probleme ADB / Anlegen von Tickets [Ticket#111079]',
  257. to: 'q1@znuny.com',
  258. },
  259. },
  260. {
  261. data: IO.read('test/fixtures/mail14.box'),
  262. body_md5: '154c7d3ae7b94f99589df62882841b08',
  263. attachments: [
  264. {
  265. md5: '5536be23f647953dc39c1673205d6f5b',
  266. filename: 'file-1',
  267. },
  268. {
  269. md5: '4eeeae078b920f9d0708353ba0f6aa63',
  270. filename: 'file-2',
  271. },
  272. ],
  273. params: {
  274. from: '"Müller, Bernd" <Bernd.Mueller@example.com>',
  275. from_email: 'Bernd.Mueller@example.com',
  276. from_display_name: 'Müller, Bernd',
  277. subject: 'AW: OTRS [Ticket#118192]',
  278. to: '\'Martin Edenhofer via Znuny Sales\' <sales@znuny.com>',
  279. },
  280. },
  281. # spam email
  282. {
  283. data: IO.read('test/fixtures/mail15.box'),
  284. body_md5: '5872ddcdfdf6bfe40f36cd0408fca667',
  285. attachments: [
  286. # :preferences=>{"Message-ID"=>"<temp@test>", "Content-Type"=>"application/octet-stream; name=\"\xBC\xA8\xD0\xA7\xB9\xDC\xC0\xED,\xBE\xBF\xBE\xB9\xCB\xAD\xB4\xED\xC1\xCB.xls\"", "Mime-Type"=>"application/octet-stream", "Charset"=>"UTF-8"}}
  287. # mutt c1abb5fb77a9d2ab2017749a7987c074
  288. {
  289. md5: '2ef81e47872d42efce7ef34bfa2de043',
  290. filename: 'file-1',
  291. },
  292. ],
  293. params: {
  294. from: '"Sara.Gang" <ynbe.ctrhk@gmail.com>',
  295. from_email: 'ynbe.ctrhk@gmail.com',
  296. from_display_name: 'Sara.Gang',
  297. subject: '绩效管理,究竟谁错了',
  298. to: 'info42@znuny.com',
  299. },
  300. },
  301. # spam email
  302. {
  303. data: IO.read('test/fixtures/mail16.box'),
  304. body_md5: '91e698a1ba3679dff398ba3587b3f3d9',
  305. params: {
  306. from: nil,
  307. from_email: 'vipyimin@126.com',
  308. from_display_name: '',
  309. subject: '【 直通美国排名第49大学 成功后付费 】',
  310. to: '"enterprisemobility.apacservice" <enterprisemobility.apacservice@motorola.com>',
  311. },
  312. },
  313. # spam email
  314. {
  315. data: IO.read('test/fixtures/mail17.box'),
  316. body_md5: 'c32d6502f47435e613a2112625118270',
  317. params: {
  318. from: '"都琹" <ghgbwum@185.com.cn>',
  319. from_email: 'ghgbwum@185.com.cn',
  320. from_display_name: '都琹',
  321. subject: '【专业为您注册香港及海外公司(好处多多)】                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               人物 互联网事百度新闻独家出品传媒换一批捷克戴维斯杯决赛前任命临时领队 前领队因病住院最新:盖世汽车讯 11月6日,通用汽车宣布今年10月份在华销量...减持三特索道 孟凯将全力发展湘鄂情江青摄影作品科技日报讯 (记者过国忠 通讯员陈飞燕)江苏省无线电科学研究所有限公司院士工作站日前正式建...[详细]',
  322. to: 'info@znuny.com',
  323. },
  324. },
  325. {
  326. data: IO.read('test/fixtures/mail18.box'),
  327. body_md5: '66f20e8557095762ccad9a6cb6f59c3a',
  328. params: {
  329. from: 'postmaster@example.com',
  330. from_email: 'postmaster@example.com',
  331. from_display_name: '',
  332. subject: 'Benachrichtung zum =?unicode-1-1-utf-7?Q?+ANw-bermittlungsstatus (Fehlgeschlagen)?=',
  333. to: 'sales@znuny.org',
  334. },
  335. },
  336. {
  337. data: IO.read('test/fixtures/mail19.box'),
  338. body_md5: '0bf7e746158d121bce7e2c46b64b0d39',
  339. params: {
  340. from: '"我" <>',
  341. from_email: '"=?GB2312?B?ztI=?=" <>',
  342. from_display_name: '',
  343. subject: '《欧美简讯》',
  344. to: '377861373 <377861373@qq.com>',
  345. },
  346. },
  347. {
  348. data: IO.read('test/fixtures/mail20.box'),
  349. body_md5: 'ddcbbb850491ae9a174c4f1e42309f84',
  350. params: {
  351. from: 'Health and Care-Mall <drugs-cheapest8@sicor.com>',
  352. from_email: 'drugs-cheapest8@sicor.com',
  353. from_display_name: 'Health and Care-Mall',
  354. subject: 'The Highest Grade Drugs And EXTRA LOW Price .',
  355. to: 'info2@znuny.com',
  356. body: "________________________________________________________________________Yeah but even when they. Beth liî ed her neck as well
  357. óû5aHw5³½IΨµÁxG⌊o8KHCmς9-Ö½23QgñV6UAD¿ùAX←t¨Lf7⊕®Ir²r½TLA5pYJhjV gPnãM36V®E89RUDΤÅ©ÈI9æsàCΘYEϒAfg∗bT¡1∫rIoiš¦O5oUIN±IsæSعPp Ÿÿq1FΧ⇑eGOz⌈F³R98y§ 74”lTr8r§HÐæuØEÛPËq VmkfB∫SKNElst4S∃Á8üTðG°í lY9åPu×8>RÒ¬⊕ΜIÙzÙCC4³ÌQEΡºSè!XgŒs.
  358. çγ⇓B[1] cwspC L I C K  H E R Eëe3¸ !Calm dylan for school today.
  359. Closing the nursery with you down. Here and made the mess. Maybe the oï from under his mother. Song of course beth touched his pants.
  360. When someone who gave up from here. Feel of god knows what.
  361. TBϖ∃M5T5ΕEf2û–N¶ÁvΖ'®⇓∝5SÐçË5 Χ0jΔHbAgþE—2i6A2lD⇑LGjÓnTOy»¦Hëτ9’:Their mother and tugged it seemed like
  362. d3RsV¶HÓΘi¯B∂gax1bîgdHä3rýJÿ1aIKDz n1jfaTk³Vs395ß C˜lBl‘mxGo0√úXwT8Ya õ8ksa∫f·ℵs”6ÑQ ÍAd7$p32d1e∏æe.0”×61aîΚ63αSMû Nf5ÉCdL∪1i↔xcaa5êR3l6Lc3iãz16só9èU zDE²aEȨgs25ËÞ hE§cl⊃¢¢ÂoÒµBw²zF© qÏkõaXUius1r0⊆ d•∈ø$¢Z2F12­8l.07d56PÚl25JAO6
  363. 45loVóiv1i2ãΥ⌊að⊃d2gÃΥ3™rÎÍu¸aWjO8 n40–Soyè2u¡∅Î3p¢JΜNeÌé×jráÒrΚ 1ÌÓ9AúrAkc8nuEtl22ai‡OB8vSbéσeιõq1+65cw Òs8Uaò4PrsE1y8 〈fMElhϒ⋅Jo8pmzwjˆN¥ wv39aW¡WtsvuU3 1aœ³$éΝnR2OÏ⌉B.∀þc→5Ê9χw5pÃ⁄N fHGFVfE³ãiσjGpa5¶kgg¡ìcWrUq5æakx2h 0Fè4P¸ÕLñrn22ÏoþÝÐHfoRb2eUαw6sñN‾ws¶§3ΒiòX¶¸ofgtHnR⊥3âase9álF¿H5 à6BÁa⊃2iϒsô¡ói ÅkMylÚJ¾ÄoQ–0ℑwvmùþ ˈμ\"aQ7jVse6Ðf «hÜp$Lâr£3i1tÚ.323h5qP8g0♥÷R÷
  364. ·iƒPV1Β∋øiF¤RÃa4v3âgL9¢wr¨7ø×aÏû0η þ1àßStuÞ³u7á¡lpÑocEe·SLlrVàXj ⊥Uµ¢F¬48ðov7¨Arm×4ÍcùVwÞe1§⊇N ÂÛ4äaLþZ2ski×5 c€pBlûù6∂olÃfÚwKß3Ñ 4iíla4C³êsREÕ1 ãeIó$âz8t442fG.¸1≤¸2F’Ã152in⊄ Tl©ëC2v7Ci7·X8a×ú5NlþU〉ιicO∑«s·iKN UuϒjSÃj5Ýu÷Jü§pn5°§e¥Û3℘rÆW‡ò J‹S7A1j0sc&ºpkt·qqøiZ56½vn8¨∗eîØQ3+7Î3Š ∑RkLaKXËasÐsÌ2 ïÇ­¶lDäz8oã78wwU–ÀC T6Uûaϒ938sÌ0Gÿ Oxó∈$98‘R2ÂHï5.ÒL6b9θrδÜ92f9j
  365. Please matt on his neck. Okay matt huï ed into your mind Since her head to check dylan. Where dylan matt got up there
  366. 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.
  367. 25¯yV9ÙßYeg·↑DnJ3l4tÝæb1os∏jll÷iSÐiwBÎ4n0ú1Ö ªf÷Ña§1løsuÚ8ê 2LCblgvN½o¼oP3wn♠90 FZora&M™xsΚbb ç5Ãξ$Âô·×2iGæ∇1⊇Ξ¬3.0P0κ53VÁö03ÝYz øX¢BAZ4KwdduÜvvuB↑ΒaÄ’THi0—93rZεj0 §rΜÅa2­·§s7¸Ιf 8⇓þolW„6Ýo6yH¥wKZ∧6 21hÒaKJ“ℜs48IÌ ÔÀ¬­$ZΣ¹ü2ñÙ6B42YMZ.Ô¹V¼9f·0å54⌈R8
  368. ÷w\"9N2gBÀaðSê¢s≅gGÔo0Dn4n↵γ7⊗eS7eýxf3Jd q÷CMaÍä³isNMZp zz0˜lΚLw8oë29ww¤§Qu ¥D⌈íaýË¢ésJ8Á¬ 3oùÙ$¦1Nℜ1>Rét7WPM¨.¶8¹D92k5D9∗8≈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
  369. What made no one in each time. Mommy was thinking of course beth. Everything you need the same thing
  370. PïEVGÿ9srEx⇐9oN3U®yEÎi2OR5kÇÿAΤηνULP¿∧q R5¿FHt7J6E»¯C∅Aå∃aVLu∗¢tT〈2ÚHq9Né:
  371. ⊥ÞÞ¨T¦ªBrrC7³2adš6lmzb¨6ai07tdBo×KopíΡÄlj4Hy ÝaÓ1aÖí∉Ós1aá’ 4D­kleowËo3–1ÍwjR≤Π £RhÈafà7≅sù6u2 8NLV$∪⇓»↓1Y¶2µ.vßÈ23ÖS7û0Ün¬Ä m5VKZy3KÎiñë¹DtÚ2HrhGaMvr5ïR«oÂ1namΜwÐãanFu8x7⌈sU E4cva£Âε™s7ΑGO dA35ldñÌèoAξI1wXKïn f¼x¾a∏7ffs†ìÖð 5msC$7Ët¦0z„n÷.it¡T7O8vt5¼8å· Jï1ÏPkáO¶rnùrAo8s5∅z—4Rha1®t˜cq5YΧ ΤQÍraÑ⌋4¹sÜ5²§ ûVBιluwóioL3ëBw£±1¶ 5∈àáa1IÊ2sšÛÛ G´7ρ$kJM80∼∠ℵl.J1Km32µÚ⊃5ã鼧 p°ÿ­A¹NU0c¥xçfo〈Øácm14QGpHEj7lnDPVieV2¶aΠ2H7 ²j26azBSesë1c9 ´2Ù¬l0nò¤oõâRVw¦X´Ï αVõ­a≅σ¼Zs§jJå 3pFN$¾Kf821YΟ7.3ÍY95JΑqŸ0v9ÄQ
  372. ñ↑yjPΤ1u6rFwhNeCOϖúd5Γêcne¼a0iTF¹5sxUS0o88ℵªlaÅT℘oOBÀ¹në·­1e∧Kpf υ98ξabp†3sj8â& 9©BolÎAWSo7wNgwø¦mM tteQat0ϖ2s4≡NÇ ÕƦΘ$ùRÓq0·Ã7ª.mt¾³1—uwF57H♣f æ∪HYSjψ3Byš²g¤ndXÀ5tµ¯ò6hZ⇒yÿr8ÿmdowyðdiψ8YΗd0ršŠ N0Ý9aÃ3I¦sQaýê Õ0Y7lZ¯18o∫50Çwµ\"©Ζ n6Ü≥a∇lßnsF›J9 ºDΟK$Á4ÉL0S7zÖ.Ta2X3²R995391¡
  373. Turning to mess up with. Well that to give her face Another for what she found it then. Since the best to hear
  374. GX°♦Ca2isA¾8¡bNÉî8ÂAöÜzΘD∇tNXIfWi–Ap2WYNYF®b ≠7yφDpj6©R04EÂU´ñn7GÆoÌjS³Á∋TC⊥πËO1∗÷©RtS2wE66è­ νÑêéASi21DP“8λV∧W⋅OAÖg6qNtNp1T269XA7¥À²GGI6SEwU2íS3Χ1â!Okay let matt climbed in front door. Well then dropped the best she kissed
  375. ¤Êü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 Øè77añ∀f5np¤nþduE8⇒ ȹSHGJVAtew∇LëtςëDæ 6kÌ8FgQQ⊂R8ÇL2EI2∉iEHÍÉ3 Hÿr5Af1qximςρ‡r6©2jmWv9ÛaWð¸giACÜ¢lM⌋¿k ÊVÚ¸SÓùθçhµ5BΙi∗ttEp8¢EPpSzWJi32UÎn5ìIhgx8n⌉!j∏e5
  376. x¯qJ>mC7f 5ºñy1GA4Ý0lCQe09s9u%uksã ψìX5A4g3nu←Τyst7ÍpMhšgÀÖe〉pÚ£n¼YƒŠtÉÚLGizqQ↓c3tÙ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
  377. 3í1ë>ð2′L 2óB⊥S∩OQMeý∉ÑΦcöè9Tuãa∫drâ5ûMeLk9Ô £æ1OOø9oKnÿψÀWl7HÏ∅i9ρÈÊniâ•ÛeXPxí ´Í5¡SUqtBh7æa5otSZ9pØËÛDpf®ÝÊiÛωbjn¯½Ÿ2gsçh− båÌswxðoSiq8hvtèé6Òh⌈b²S ×6þSVBEFCiøUàds9ѤΕaƧξÜ,1„wv jw7AMKÈ↔laæG9¦së3«etuB2keDãæìr°¨IeC¾EaÄao÷″∧r>6e¸d9DùÇ,mtSö I∗44A¹RˆêM98zME≅QŸÐX¹4j6 î0n3a1'Êânxpl6d83þJ 06Ð9Eïãýã-28Ú9c4ßrØh7è¥med½♠kcñ3sPk¶2•r!〉QCa
  378. ŠeÏÀ>Ãσ½å bpøNERN8eaD6Åns7Abhy±Æü∩ D7sVR8'ºEeÿáDVfc˜3ëu7ÏÆqncË3qdÊ∼4∇sρmi5 6æ¾Êaä°∝TnQb9sdÀMùℑ ∑gMÿ2bNð¶4cä½⊆/4X1κ7¥f1z ϖ1úECzf•1uMbycs1•9¾ts0Tào3hêDmSs3Áe7BíÉrô⋅ãÔ φ8Ä″SSXð¤uúI¸5p58uHp2cß±o∂T©Rrd6sMt∪µµξ!é4Xb
  379. Both hands through the fear in front.
  380. Wade to give it seemed like this. Yeah but one for any longer. Everything you going inside the kids.
  381. [1] http://pxmzcgy.storeprescription.ru?zz=fkxffti"
  382. },
  383. },
  384. {
  385. data: IO.read('test/fixtures/mail21.box'),
  386. body_md5: 'c9fb828072385643e528ab3a9ce7f10c',
  387. params: {
  388. from: 'Viagra Super Force Online <pharmacy_affordable1@ertelecom.ru>',
  389. from_email: 'pharmacy_affordable1@ertelecom.ru',
  390. from_display_name: 'Viagra Super Force Online',
  391. subject: 'World Best DRUGS Mall For a Reasonable Price.',
  392. to: 'info@znuny.nix',
  393. },
  394. },
  395. {
  396. data: IO.read('test/fixtures/mail22.box'),
  397. body_md5: '7dd64b40dce1aa3053fc7bbdea136612',
  398. params: {
  399. from: 'Gilbertina Suthar <ireoniqla@lipetsk.ru>',
  400. from_email: 'ireoniqla@lipetsk.ru',
  401. from_display_name: 'Gilbertina Suthar',
  402. subject: 'P..E..N-I..S__-E N L A R-G E-M..E..N T-___P..I-L-L..S...Info.',
  403. to: 'Info <info@znuny.nix>',
  404. body: "Puzzled by judith bronte dave. Melvin will want her way through with.
  405. Continued adam helped charlie cried. Soon joined the master bathroom. Grinned adam rubbed his arms she nodded.
  406. Freemont and they talked with beppe.
  407. Thinking of bed and whenever adam.
  408. Mike was too tired man to hear.
  409. I10PQSHEJl2Nwf&tilde;2113S173 &Icirc;1mEbb5N371L&piv;C7AlFnR1&diams;HG64B242&brvbar;M2242zk&Iota;N&rceil;7&rceil;TBN&ETH; T2xPI&ograve;gI2&Atilde;lL2&Otilde;ML&perp;22Sa&Psi;RBreathed adam gave the master bedroom door.
  410. Better get charlie took the wall.
  411. Charlotte clark smile he saw charlie.
  412. Dave and leaned her tears adam.
  413. Maybe we want any help me that.
  414. Next morning charlie gazed at their father.
  415. Well as though adam took out here. Melvin will be more money. Called him into this one last night.
  416. Men joined the pickup truck pulled away. Chuck could make sure that.[1] &dagger;p1C?L&thinsp;I?C&ensp;K?88&ensp;5 E R?EEOD !Chuckled adam leaned forward and le? charlie.
  417. Just then returned to believe it here.
  418. Freemont and pulling out several minutes.
  419. [1] &#104;&#116;&#116;&#112;&#58;&#47;&#47;&#1072;&#1086;&#1089;&#1082;&#46;&#1088;&#1092;?jmlfwnwe&ucwkiyyc",
  420. },
  421. },
  422. {
  423. data: IO.read('test/fixtures/mail23.box'),
  424. body_md5: '545a1b067fd10ac636c20b44f5df8868',
  425. params: {
  426. from: 'marketingmanager@nthcpghana.com',
  427. from_email: 'marketingmanager@nthcpghana.com',
  428. from_display_name: '',
  429. subject: nil,
  430. to: '',
  431. },
  432. },
  433. {
  434. data: IO.read('test/fixtures/mail24.box'),
  435. body_md5: '5872ddcdfdf6bfe40f36cd0408fca667',
  436. params: {
  437. from: 'oracle@IG0-1-DB01.example.com',
  438. from_email: 'oracle@IG0-1-DB01.example.com',
  439. from_display_name: '',
  440. subject: 'Regelsets im Test-Status gefunden: 1',
  441. to: 'support@example.com',
  442. body: 'no visible content',
  443. },
  444. attachments: [
  445. {
  446. data: 'RULESET_ID;NAME;ACTIV;RUN_MODE;AUDIT_MODIFY_DATE
  447. 387;DP DHL JOIN - EN : Einladung eAC;T;SM;1.09.14
  448. ',
  449. md5: 'a61c76479fdc2f107fe2697ac5ad60ae',
  450. filename: 'rulesets-report.csv',
  451. },
  452. ],
  453. },
  454. {
  455. data: IO.read('test/fixtures/mail25.box'),
  456. body_md5: '436f71d8d8a4ffbd3f18fc9de7d7f767',
  457. params: {
  458. from: 'oracle@IG0-1-DB01.example.com',
  459. from_email: 'oracle@IG0-1-DB01.example.com',
  460. from_display_name: '',
  461. subject: 'Regelsets im Test-Status gefunden: 1',
  462. to: 'support@example.com',
  463. body: "begin 644 rulesets-report.csv
  464. M4E5,15-%5%])1#M.04U%.T%#5$E6.U)53E]-3T1%.T%51$E47TU/1$E&65]$
  465. M051%\"C,X-SM$4\"!$2$P@2D])3B`M($5.(#H@16EN;&%D=6YG(&5!0SM4.U--
  466. *.S$W+C`Y+C$T\"@``
  467. `
  468. end
  469. ",
  470. },
  471. },
  472. {
  473. data: IO.read('test/fixtures/mail26.box'),
  474. body_md5: 'c68fd31c71a463c7ea820ccdf672c680',
  475. params: {
  476. from: 'gate <team@support.gate.de>',
  477. from_email: 'team@support.gate.de',
  478. from_display_name: 'gate',
  479. subject: 'Ihre Rechnung als PDF-Dokument',
  480. to: 'Martin Edenhofer <billing@znuny.inc>',
  481. body: "********************************************************************
  482. gate Service
  483. --------------------------------------------------------------------
  484. gate GmbH * Gladbacher Str. 74 * 40219 Düsseldorf
  485. ",
  486. },
  487. attachments: [
  488. {
  489. md5: '5d6a49a266987af128bb7254abcb2896',
  490. filename: 'message.html',
  491. },
  492. {
  493. md5: '552e21cd4cd9918678e3c1a0df491bc3',
  494. filename: 'invoice_gatede_B181347.txt',
  495. },
  496. ],
  497. },
  498. {
  499. data: IO.read('test/fixtures/mail27.box'),
  500. body_md5: 'd41d8cd98f00b204e9800998ecf8427e',
  501. params: {
  502. from: 'caoyaoewfzfw@21cn.com',
  503. from_email: 'caoyaoewfzfw@21cn.com',
  504. from_display_name: '',
  505. subject: "\r\n蠭龕中層管理者如何避免角色行为誤区",
  506. to: 'duan@seat.com.cn, info@znuny.com, jinzh@kingdream.com',
  507. body: '',
  508. },
  509. attachments: [
  510. {
  511. md5: '498b8ae7b26033af1a08f85644d6695c',
  512. filename: 'message.html',
  513. },
  514. ],
  515. },
  516. {
  517. data: IO.read('test/fixtures/mail28.box'),
  518. body_md5: '5872ddcdfdf6bfe40f36cd0408fca667',
  519. params: {
  520. from: 'kontakt@example.de',
  521. from_email: 'kontakt@example.de',
  522. from_display_name: '',
  523. subject: 'Bewerbung auf Ihr Stellenangebot',
  524. to: 'info@znuny.inc',
  525. body: 'no visible content',
  526. },
  527. attachments: [
  528. {
  529. md5: '6605d016bda980cdc65fb72d232e4df9',
  530. filename: 'Znuny GmbH .pdf',
  531. },
  532. {
  533. md5: '6729bc7cbe44fc967a9d953c4af114b7',
  534. filename: 'Lebenslauf.pdf',
  535. },
  536. ],
  537. },
  538. {
  539. data: IO.read('test/fixtures/mail29.box'),
  540. body_md5: 'bd34701dd5246b7651f67aeea6dd0fd3',
  541. params: {
  542. from: 'Example Sales <sales@example.com>',
  543. from_email: 'sales@example.com',
  544. from_display_name: 'Example Sales',
  545. subject: 'Example licensing information: No channel available',
  546. to: 'info@znuny.inc',
  547. body: "Dear Mr. Edenhofer,
  548. We want to keep you updated on TeamViewer licensing shortages on a regular basis.
  549. 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.
  550. Additional session channels can be added at any time. Please visit our [1] TeamViewer Online Shop for pricing information.
  551. Thank you - and again all the best with TeamViewer!
  552. Best regards,
  553. Your TeamViewer Team
  554. P.S.: You receive this e-mail because you are listed in our database as person who ordered a TeamViewer license. Please click [2] here to unsubscribe from further e-mails.
  555. -----------------------------
  556. [3] www.teamviewer.com
  557. TeamViewer GmbH * Jahnstr. 30 * 73037 Göppingen * Germany
  558. Tel. 07161 60692 50 * Fax 07161 60692 79
  559. Registration AG Ulm HRB 534075 * General Manager Holger Felgner
  560. [1] https://www.teamviewer.com/en/licensing/update.aspx?channel=D842CS9BF85-P1009645N-348785E76E
  561. [2] http://www.teamviewer.com/en/company/unsubscribe.aspx?id=1009645&ident=E37682EAC65E8CA6FF36074907D8BC14
  562. [3] http://www.teamviewer.com",
  563. },
  564. },
  565. {
  566. data: IO.read('test/fixtures/mail30.box'),
  567. body_md5: 'b4038e70d25854a023bce604c9f7a7ff',
  568. params: {
  569. from: 'Manfred Haert <Manfred.Haert@example.com>',
  570. from_email: 'Manfred.Haert@example.com',
  571. from_display_name: 'Manfred Haert',
  572. subject: 'Antragswesen in TesT abbilden',
  573. to: 'info@znuny.inc',
  574. body: "Sehr geehrte Damen und Herren,
  575. wir hatten bereits letztes Jahr einen TesT-Workshop mit Ihrem Herrn XXX durchgeführt und würden nun gerne erneut Ihre Dienste in Anspruch nehmen.
  576. Mittlerweile setzen wir TesT produktiv ein und würden nun gerne an einem Anwendungsfall (Change-Management) die Machbarkeit des Abbildens eines derzeit \"per Papier\" durchgeführten Antragswesens in TesT prüfen wollen.
  577. Wir bitten gerne um ein entsprechendes Angebot.
  578. Für Rückfragen stehe ich gerne zur Verfügung. Vielen Dank!
  579. --
  580. Freundliche Grüße
  581. i.A. Manfred Härt
  582. Test Somewhere GmbH
  583. Ferdinand-Straße 99
  584. 99073 Korlben
  585. Bitte beachten Sie die neuen Rufnummern!
  586. Telefon: 011261 00000-2460
  587. Fax: 011261 0000-7460
  588. [1] mailto:manfred.haertel@example.com
  589. [2] http://www.example.com
  590. JETZT AUCH BEI FACEBOOK !
  591. [3] https://www.facebook.com/test
  592. ___________________________________
  593. Test Somewhere GmbH
  594. Diese e-Mail ist ausschließlich für den beabsichtigten Empfänger bestimmt. Sollten Sie irrtümlich diese e-Mail erhalten haben, unterrichten Sie uns bitte umgehend unter [4] kontakt@example.com und vernichten Sie diese Mitteilung einschließlich der ggf. beigefügten Dateien.
  595. Weil wir die Echtheit oder Vollständigkeit der in dieser Nachricht enthaltenen Informationen nicht garantieren können, bitten wir um Verständnis, dass wir zu Ihrem und unserem Schutz die rechtliche Verbindlichkeit der vorstehenden Erklärungen ausschließen, soweit wir mit Ihnen keine anders lautenden Vereinbarungen getroffen haben.
  596. [1] mailto:manfred.haertel@example.com
  597. [2] http://www.example.com
  598. [3] https://www.facebook.com/test
  599. [4] mailto:kontakt@example.com",
  600. },
  601. },
  602. {
  603. data: IO.read('test/fixtures/mail31.box'),
  604. body_md5: '10484f3b096e85e7001da387c18871d5',
  605. params: {
  606. from: '"bertha mou" <zhengkang@ha.chinamobile.com>',
  607. from_email: 'zhengkang@ha.chinamobile.com',
  608. from_display_name: 'bertha mou',
  609. subject: '內應力產生与注塑工艺条件之间的关系;',
  610. to: 'info@znuny.inc',
  611. },
  612. },
  613. {
  614. data: IO.read('test/fixtures/mail32.box'),
  615. body_md5: '6bed82e0d079e521f506e4e5d3529107',
  616. params: {
  617. from: '"Dana.Qin" <Dana.Qin6e1@gmail.com>',
  618. from_email: 'Dana.Qin6e1@gmail.com',
  619. from_display_name: 'Dana.Qin',
  620. subject: '发现最美车间主任',
  621. to: 'info@znuny.inc',
  622. },
  623. },
  624. {
  625. data: IO.read('test/fixtures/mail34.box'),
  626. body_md5: 'b6e46176404ec81b3ab412fe71dff0f0',
  627. params: {
  628. from: 'Bay <memberbay+12345@members.somewhat>',
  629. from_email: 'memberbay+12345@members.somewhat',
  630. from_display_name: 'Bay',
  631. subject: 'strange email with empty text/plain',
  632. to: 'bay@example.com',
  633. body: 'some html text',
  634. },
  635. },
  636. {
  637. data: IO.read('test/fixtures/mail36.box'),
  638. body_md5: '428327fb533b387b3efca181ae0c25d0',
  639. params: {
  640. from: 'Martin Smith <m.Smith@example.com>',
  641. from_email: 'm.Smith@example.com',
  642. from_display_name: 'Martin Smith',
  643. subject: 'Fw: Zugangsdaten',
  644. to: 'Martin Edenhofer <me@example.com>',
  645. body: ' 
  646. -- 
  647. don\'t cry - work! (Rainald Goetz)
  648.  
  649.  
  650. Gesendet: Mittwoch, 03. Februar 2016 um 12:43 Uhr
  651. Von: "Martin Smith" <m.Smith@example.com>
  652. An: linuxhotel@zammad.com
  653. Betreff: Fw: Zugangsdaten
  654.  
  655. -- 
  656. don\'t cry - work! (Rainald Goetz)
  657.  
  658.  
  659. Gesendet: Freitag, 22. Januar 2016 um 11:52 Uhr
  660. Von: "Martin Edenhofer" <me@example.com>
  661. An: m.Smith@example.com
  662. Betreff: Zugangsdaten
  663. Um noch vertrauter zu werden, kannst Du mit einen externen E-Mail Account (z. B. [1] web.de) mal ein wenig selber “spielen”. :)
  664. [1] http://web.de',
  665. },
  666. },
  667. ]
  668. count = 0
  669. files.each { |file|
  670. count += 1
  671. #p "Count: #{count}"
  672. parser = Channel::EmailParser.new
  673. data = parser.parse( file[:data] )
  674. #puts '++' + data[:body].to_s + '++'
  675. # check body
  676. md5 = Digest::MD5.hexdigest( data[:body] )
  677. #puts "IS #{md5} / should #{file[:body_md5]}"
  678. assert_equal( file[:body_md5], md5 )
  679. # check params
  680. file[:params].each { |key, value|
  681. if key.to_s == 'body_md5'
  682. #puts 'md5'
  683. #puts '++' + data[:body].to_s + '++'
  684. #puts '++' + file[:params][key.to_sym].to_s + '++'
  685. assert_equal( Digest::MD5.hexdigest( file[:params][key.to_sym].to_s ), Digest::MD5.hexdigest( data[:body].to_s ) )
  686. else
  687. assert_equal( file[:params][key.to_sym], data[key.to_sym], "check #{key}" )
  688. end
  689. }
  690. # check attachments
  691. if file[:attachments]
  692. attachment_count_config = file[:attachments].length
  693. attachment_count_email = 0
  694. file[:attachments].each { |attachment|
  695. attachment_count_email += 1
  696. found = false
  697. data[:attachments].each { |attachment_parser|
  698. next if found
  699. file_md5 = Digest::MD5.hexdigest( attachment_parser[:data] )
  700. #puts 'Attachment:' + attachment_parser.inspect + '-' + file_md5
  701. if attachment[:md5] == file_md5
  702. found = true
  703. assert_equal( attachment[:filename], attachment_parser[:filename] )
  704. end
  705. }
  706. if !found
  707. assert( false, "Attachment not found! MD5: #{attachment[:md5]} - #{attachment[:filename].to_s}" )
  708. end
  709. }
  710. assert_equal( attachment_count_config, attachment_count_email )
  711. end
  712. }
  713. end
  714. end