mail2cb 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,63 @@
1
+ module Mail2cb
2
+ class MessageIdHandler
3
+
4
+ def initialize(email)
5
+ @email = email
6
+
7
+ @content = EmailContent.new(@email)
8
+ end
9
+
10
+ def message_id
11
+ from_headers || from_subject || from_body
12
+ end
13
+
14
+ def hash
15
+ if message_id
16
+ match = /([a-z]*?)\.([a-z0-9]*?)\.([a-z0-9]*?)@mail.caseblocks.com/.match(message_id)
17
+ if match
18
+ if match[1] == "conversation"
19
+ {"conversation_id" => match[2]}
20
+ elsif match[1] == "case"
21
+ {"case_id" => match[2]}
22
+ else
23
+ {match[1] => match[2]}
24
+ end
25
+ end
26
+ else
27
+ {}
28
+ end
29
+ end
30
+
31
+ def from_headers
32
+ references.reverse.detect{|id| find_in_content(id) }
33
+ end
34
+ def from_subject
35
+ find_in_content(@email.subject)
36
+ end
37
+ def from_body
38
+ find_in_content(@content.html) || find_in_content(@content.text)
39
+ end
40
+ def references
41
+ refs = @email.header["References"]
42
+ begin
43
+ if refs && refs.field.errors.empty?
44
+ return refs.field.element.message_ids
45
+ end
46
+ rescue
47
+ ap @email.header["References"]
48
+ end
49
+ []
50
+ end
51
+
52
+ private
53
+ def find_in_content(content)
54
+ match = /([a-z]*?)\.([a-z0-9]*?)\.([a-z0-9]*?)@mail.caseblocks.com/.match(content)
55
+ if match
56
+ match[0]
57
+ else
58
+ false
59
+ end
60
+ end
61
+
62
+ end
63
+ end
@@ -1,3 +1,3 @@
1
1
  module Mail2cb
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.8"
3
3
  end
data/lib/mail2cb.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require_relative 'mail2cb/version'
2
2
  require_relative 'mail2cb/helpers'
3
- require_relative 'mail2cb/email_body_parser'
3
+ require_relative 'mail2cb/email_body_cleanser'
4
+ require_relative 'mail2cb/email_content'
4
5
  require_relative 'mail2cb/email_watcher'
5
6
  require_relative 'mail2cb/email_handler'
6
7
  require_relative 'mail2cb/encryption'
8
+ require_relative 'mail2cb/message_id_handler'
7
9
  require 'sinatra/base'
8
10
  require 'json'
9
11
  require 'open3'
@@ -16,6 +18,7 @@ module Mail2cb
16
18
  @@watcher = EmailWatcher.new
17
19
 
18
20
  @@watcher.start
21
+ Thread.abort_on_exception = true
19
22
 
20
23
  my_app = Sinatra.new do
21
24
  set :logging, false
data/mail2cb.gemspec CHANGED
@@ -21,15 +21,21 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "awesome_print"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "timecop"
26
+ spec.add_development_dependency "mock-aws-s3"
27
+
28
+
24
29
 
25
30
  spec.add_dependency 'mysql2'
26
- spec.add_dependency 'sidekiq'
27
31
  spec.add_dependency 'mail'
28
- spec.add_dependency 'mail_daemon', "~> 0.0.6"
29
- spec.add_dependency 'charlock_holmes' # required for sidekiq delivery
32
+ spec.add_dependency 'mail_daemon', "~> 0.0.8"
30
33
  spec.add_dependency 'nokogiri'
31
34
  spec.add_dependency 'sinatra'
32
35
  spec.add_dependency 'sanitize'
33
-
36
+ spec.add_dependency 'faye'
37
+ spec.add_dependency 'redis'
38
+ spec.add_dependency 'aws-s3'
39
+ spec.add_dependency 'rest-client', '~> 1.8'
34
40
 
35
41
  end
@@ -0,0 +1,5 @@
1
+ From: Stewart McKee <stewart@emergeadapt.com>
2
+ To: Stewart McKee <stewart@caseblocks.com>
3
+ Subject: Re: Test Conversation
4
+
5
+ This is a bare bones email
data/samples/reply.txt ADDED
@@ -0,0 +1,226 @@
1
+ Delivered-To: stewart@activeinformationdesign.com
2
+ Received: by 10.112.147.106 with SMTP id tj10csp538989lbb;
3
+ Thu, 14 Apr 2016 04:09:36 -0700 (PDT)
4
+ X-Received: by 10.28.154.4 with SMTP id c4mr16610816wme.88.1460632176711;
5
+ Thu, 14 Apr 2016 04:09:36 -0700 (PDT)
6
+ Return-Path: <stewart@emergeadapt.com>
7
+ Received: from mail-wm0-x235.google.com (mail-wm0-x235.google.com. [2a00:1450:400c:c09::235])
8
+ by mx.google.com with ESMTPS id y77si34280990wmc.98.2016.04.14.04.09.36
9
+ for <stewart@activeinformationdesign.com>
10
+ (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
11
+ Thu, 14 Apr 2016 04:09:36 -0700 (PDT)
12
+ Received-SPF: neutral (google.com: 2a00:1450:400c:c09::235 is neither permitted nor denied by domain of stewart@emergeadapt.com) client-ip=2a00:1450:400c:c09::235;
13
+ Authentication-Results: mx.google.com;
14
+ dkim=pass header.i=@emergeadapt-com.20150623.gappssmtp.com;
15
+ spf=neutral (google.com: 2a00:1450:400c:c09::235 is neither permitted nor denied by domain of stewart@emergeadapt.com) smtp.mailfrom=stewart@emergeadapt.com
16
+ Received: by mail-wm0-x235.google.com with SMTP id u206so120243608wme.1
17
+ for <stewart@activeinformationdesign.com>; Thu, 14 Apr 2016 04:09:36 -0700 (PDT)
18
+ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
19
+ d=emergeadapt-com.20150623.gappssmtp.com; s=20150623;
20
+ h=date:from:to:message-id:in-reply-to:references:subject:mime-version;
21
+ bh=pEIuGA/L/KBb8JXNV05lDAXhrHJJO1bDikKNmqibKv8=;
22
+ b=TUR4KQf1kPHO1yudZMQLjY1LNRuN5dwO7JUdGsKNUGsfJGKWKBqa4yCyQpSwPt4TPJ
23
+ WiMN9vn7WI4NiiMqwXtsJ0LedGa3JTMdo45TGceR5VR44QPKFODVZQjAvvoNtRYyvu5b
24
+ 2S60uigKsQ47QEVam7sAf3b+EN3njXQMS9kz+i4mNj/OSJFDVdcJ6kLo8GB6RoCFZRBk
25
+ gw0UNyDyZN4jrPhClvYTi8G6riCxiDHUXi1dcK4FyoivZyoRum3VyTjgM3W/O4DMPjZq
26
+ /NUUY+TM9OjhJKGguf4/v3s41vAwHfsxtk2mRbotQqkB5i1qWTSwPYM/kS9dE7CU1BnC
27
+ IyfQ==
28
+ X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
29
+ d=1e100.net; s=20130820;
30
+ h=x-gm-message-state:date:from:to:message-id:in-reply-to:references
31
+ :subject:mime-version;
32
+ bh=pEIuGA/L/KBb8JXNV05lDAXhrHJJO1bDikKNmqibKv8=;
33
+ b=mGLXs9ZE38pLNw0s6KStos+p5JmriL2hJ+kZyWgM1suosxF0H/Rp6Y6dpFLDR/31EX
34
+ huPAEebeSnT4FvoNN+g3HLMcu6toXRqSMvxr6RNHkFFTULPw8VnoJMacVxQtlbtmf9yL
35
+ kFg4GjnKiF4tFKy/FB876ZPBock1ECCYmCKEkSz/PpbtSWrBr9D2fjeAnSF3TuBuoDMy
36
+ NG5XGN6wTxg476UCQgfsnbMtwmPomrideYR/a76rFnC0oNVw3hsTq4THxpNx9BAS8lA1
37
+ JeFi/wAAq+DgvCvxA5te3VcRJAUzVcaT+yQP685xHiHwRTeXrS8jx/Yqm8l6l8rfH7cb
38
+ ZsfQ==
39
+ X-Gm-Message-State: AOPr4FVwWTraJ6O4DIWopwj/7+yVELMwvM4q3pDk8Rzjv/ZjJGyMIKp8wBqB7NbACeaNgw==
40
+ X-Received: by 10.194.23.65 with SMTP id k1mr9421523wjf.31.1460632176232;
41
+ Thu, 14 Apr 2016 04:09:36 -0700 (PDT)
42
+ Return-Path: <stewart@emergeadapt.com>
43
+ Received: from Jordans-MacBook-Pro.local (host81-130-148-178.in-addr.btopenworld.com. [81.130.148.178])
44
+ by smtp.gmail.com with ESMTPSA id x2sm43379531wjr.33.2016.04.14.04.09.35
45
+ for <stewart@activeinformationdesign.com>
46
+ (version=TLSv1/SSLv3 cipher=OTHER);
47
+ Thu, 14 Apr 2016 04:09:35 -0700 (PDT)
48
+ Date: Thu, 14 Apr 2016 12:09:33 +0100
49
+ From: Stewart McKee <stewart@emergeadapt.com>
50
+ To: Stewart McKee <stewart@activeinformationdesign.com>
51
+ Message-ID: <etPan.570f7a6d.7b5aa127.137@emergeadapt.com>
52
+ In-Reply-To: <conversation.570f77bc81e9a825e2000001.570f7a1381e9a82659000001@mail.caseblocks.com>
53
+ References: <conversation.570f77bc81e9a825e2000001.570f7a1381e9a82659000001@mail.caseblocks.com>
54
+ Subject: Re: Test Conversation
55
+ X-Mailer: Airmail Beta (353)
56
+ MIME-Version: 1.0
57
+ Content-Type: multipart/alternative; boundary="570f7a6d_418e9138_137"
58
+
59
+ --570f7a6d_418e9138_137
60
+ Content-Type: text/plain; charset="utf-8"
61
+ Content-Transfer-Encoding: quoted-printable
62
+ Content-Disposition: inline
63
+
64
+
65
+
66
+
67
+
68
+ www.emergeadapt.com
69
+
70
+ Office: +44 141 632 8395
71
+ =C2=A0
72
+ =C2=A9 EmergeAdapt 2016
73
+ All Rights Reserved.
74
+ Registered in Scotland SC413041
75
+
76
+ On 14 April 2016 at 12:08:09, default=40emergeadapt.com (default=40emerge=
77
+ adapt.com) wrote:
78
+
79
+ Re: Test Conversation
80
+ =46rom: Stewart
81
+
82
+ Bulk Uplift: Bulk Uplift 36-002
83
+
84
+ =20
85
+
86
+ Test Reply 3
87
+
88
+ This message was sent at 14 Apr 11:08 GMT
89
+
90
+ Recipients Stewart
91
+
92
+ Click here to view the conversation history and the Bulk Uplift in detail=
93
+ .
94
+
95
+
96
+ --570f7a6d_418e9138_137
97
+ Content-Type: multipart/related; boundary="570f7a6d_5792cea9_137"
98
+
99
+ --570f7a6d_5792cea9_137
100
+ Content-Type: text/html; charset="utf-8"
101
+ Content-Transfer-Encoding: quoted-printable
102
+ Content-Disposition: inline
103
+
104
+ <html><head></head><body><h1>Sample html content</h1></body></html>
105
+ --570f7a6d_5792cea9_137
106
+ Content-Type: image/png
107
+ Content-Transfer-Encoding: base64
108
+ Content-ID: <E8B60400-F80F-4594-AA4C-D6932E7320DB>
109
+ Content-Disposition: inline; filename="D69E1746-1CEE-47FE-B7E2-8C64E6EC2C63.png"
110
+
111
+ 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
222
+ cymsCM6CD/8XkPVUi4gUoCMAAAAASUVORK5CYII=
223
+
224
+ --570f7a6d_5792cea9_137--
225
+
226
+ --570f7a6d_418e9138_137--