eml2html 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -0
- data/CHANGELOG.md +8 -1
- data/lib/eml2html/converter.rb +4 -3
- data/lib/eml2html/version.rb +1 -1
- data/spec/fixtures/other_format.eml +136 -0
- data/spec/lib/eml2html/converter_spec.rb +26 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8deb00380665f3d8c46300ec62bc2492404aedf97b3e6dfd7c8ab4bc0b4be168
|
4
|
+
data.tar.gz: cfa02ddcc50fe9a6d9013dad45f0109737138c54805a123c805da5bc655236c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5707c58bb4fc1703b5336a35d609fa13f2c710e571dc9a344bd4e88584c876d825c9cb2b22f390947ec1e3ec0cf11889f7d6f9212ce6847b9e4b30139f7fa27
|
7
|
+
data.tar.gz: be97c59aa162bda1134867a2d4a03619ac7287188b89ada54247c57863b3ebc0e2087d6f02b6d1a6a6d675b8b97ae2e8f13ad31613a2ee0005a422ba0f1904e8
|
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,14 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
-
## [0.0.
|
5
|
+
## [0.0.5] - 2019-09-09
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
|
9
|
+
- `NoMethodError (undefined method 'includes' for Array)` (#3)
|
10
|
+
- Email part filename may also be located in `Content-Disposition` header (#3)
|
11
|
+
|
12
|
+
## [0.0.4] - 2019-09-05
|
6
13
|
|
7
14
|
### Added
|
8
15
|
|
data/lib/eml2html/converter.rb
CHANGED
@@ -62,7 +62,7 @@ module Eml2Html
|
|
62
62
|
rtn_attachments = @attachments
|
63
63
|
else
|
64
64
|
@attachments.each do |a|
|
65
|
-
unless @cids_in_body.
|
65
|
+
unless @cids_in_body.include?(a.cid)
|
66
66
|
rtn_attachments.push(a)
|
67
67
|
end
|
68
68
|
end
|
@@ -103,16 +103,17 @@ module Eml2Html
|
|
103
103
|
@attachments = @message.parts.flat_map do |part|
|
104
104
|
if part.multipart?
|
105
105
|
part.parts.map do |part|
|
106
|
-
name = part['Content-Type'].filename
|
106
|
+
name = part['Content-Type'].filename || part['Content-Disposition']&.filename
|
107
107
|
next unless name
|
108
108
|
Attachment.new(part.cid, name, part.body.to_s)
|
109
109
|
end
|
110
110
|
else
|
111
|
-
name = part['Content-Type'].filename
|
111
|
+
name = part['Content-Type'].filename || part['Content-Disposition']&.filename
|
112
112
|
next unless name
|
113
113
|
Attachment.new(part.cid, name, part.body.to_s)
|
114
114
|
end
|
115
115
|
end.compact
|
116
|
+
html_body #populate the @cids_in_body array
|
116
117
|
end
|
117
118
|
|
118
119
|
def replace_images_src(html)
|
data/lib/eml2html/version.rb
CHANGED
@@ -0,0 +1,136 @@
|
|
1
|
+
Received: from BY5PR12MB3748.namprd12.prod.outlook.com
|
2
|
+
Received: from BY5PR12MB3906.namprd12.prod.outlook.com (10.255.137.154) by
|
3
|
+
Received: from BY5PR12MB3906.namprd12.prod.outlook.com
|
4
|
+
Authentication-Results: example.com; dkim=none (message not signed)
|
5
|
+
Content-Transfer-Encoding: binary
|
6
|
+
From: "Person, bob" <person@example.com>
|
7
|
+
To: "Inquiries" <Inquiries@example.com>
|
8
|
+
Subject: FW: Communication Email
|
9
|
+
Thread-Topic: Communication Email
|
10
|
+
Thread-Index: AQHVXbPliIbE/GguY02AgunwjIShoqcQuF/ggAAFxdCAAVJoQA==
|
11
|
+
Date: Thu, 29 Aug 2019 12:33:54 +0000
|
12
|
+
Message-ID: <BY5PR12MB3906E1A8DE8DD910A75116B1C5A20@BY5PR12MB3906.namprd12.prod.outlook.com>
|
13
|
+
References: <BWZBZTTBZ$UYZATTYYVWYAV@mail-out.via.act-on.net>
|
14
|
+
In-Reply-To: <BN8PR12MB3044B7C87C86BE7617C36D96AFA30@BN8PR12MB3044.namprd12.prod.outlook.com>
|
15
|
+
Accept-Language: en-US
|
16
|
+
Content-Language: en-US
|
17
|
+
X-MS-Has-Attach: yes
|
18
|
+
X-MS-Exchange-Organization-SCL: -1
|
19
|
+
X-MS-TNEF-Correlator: <BY5PR12MB3906E1A8DE8DD910A75116B1C5A20@BY5PR12MB3906.namprd12.prod.outlook.com>
|
20
|
+
msip_labels: MSIP_Label_807724ff-9999-494f-b257-05dacc46ac87_Enabled=True;
|
21
|
+
x-dg-ref: PG1ldGE+PGF0IG5tPSJib2R5Lmh0bWwiIHA9ImM6XHVzZXJzXGVnbG9zdGVyXGFwcGRhdGFccm9hbWluZ1wwOWQ4NDliNi0zMmQzLTRhNDAtODVlZS02Yjg0YmEyOWUzNWJcbXNnc1xtc2ctM2UyYjcwMjktY2E1OS0xMWU5LWE5OWMtNGMzNDg4NjI3ZGQ4XGFtZS10ZXN0XDNlMmI3MDJiLWNhNTktMTFlOS1hOTljLTRjMzQ4ODYyN2RkOGJvZHkuaHRtbCIgc3o9IjExNDkxNSIgdD0iMTMyMTE1NTU2MjY2MDIyNjg1IiBoPSJPK2FVdEdmMHdwc25BaHkyc3FNQXpaYnhIekE9IiBpZD0iIiBibD0iMCIgYm89IjEiLz48L21ldGE+
|
22
|
+
x-dg-rorf: MIME-Version: 1.0
|
23
|
+
X-MS-Exchange-Organization-MessageDirectionality: Originating
|
24
|
+
X-MS-Exchange-Organization-AuthSource: BY5PR12MB3906.namprd12.prod.outlook.com
|
25
|
+
X-MS-Exchange-Organization-AuthAs: Internal
|
26
|
+
X-MS-Exchange-Organization-AuthMechanism: 04
|
27
|
+
X-Originating-IP: [12.165.188.170]
|
28
|
+
X-MS-Exchange-Organization-Network-Message-Id: 677ee198-3d14-4733-32cb-08d72c7d27eb
|
29
|
+
X-MS-PublicTrafficType: Email
|
30
|
+
Return-Path: person@example.com
|
31
|
+
X-MS-Exchange-Organization-ExpirationStartTime: 29 Aug 2019 12:33:55.0017
|
32
|
+
X-MS-Exchange-Organization-ExpirationStartTimeReason: OriginalSubmit
|
33
|
+
X-MS-Exchange-Organization-ExpirationInterval: 1:00:00:00.0000000
|
34
|
+
X-MS-Exchange-Organization-ExpirationIntervalReason: OriginalSubmit
|
35
|
+
X-MS-Office365-Filtering-Correlation-Id: 677ee198-3d14-4733-32cb-08d72c7d27eb
|
36
|
+
X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(49563074)(7193020);SRVR:BY5PR12MB3748;
|
37
|
+
X-MS-TrafficTypeDiagnostic: BY5PR12MB3748:
|
38
|
+
X-MS-Exchange-PUrlCount: 28
|
39
|
+
X-MS-Exchange-AtpMessageProperties: SA
|
40
|
+
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
|
41
|
+
X-Forefront-Antispam-Report: SFV:SKI;SFS:;DIR:INB;SFP:;SCL:-1;SRVR:BY5PR12MB3748;H:BY5PR12MB3906.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;
|
42
|
+
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Aug 2019 12:33:54.6815
|
43
|
+
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
|
44
|
+
X-MS-Exchange-CrossTenant-Id: e58c8e81-abd8-48a8-929d-eb67611b83bd
|
45
|
+
X-MS-Exchange-CrossTenant-Network-Message-Id: 677ee198-3d14-4733-32cb-08d72c7d27eb
|
46
|
+
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
|
47
|
+
X-MS-Exchange-CrossTenant-UserPrincipalName: SguAapAOGHTt59uwiUjwC2FRdzoIGYiV9hEU48YnXB/0e0dlwoiaAd2ZkOvinCVT4C8eyXvxjAnjtwDVSYsAEbhTJVgghwBElAToCF6CFbs=
|
48
|
+
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB3748
|
49
|
+
X-MS-Exchange-Transport-EndToEndLatency: 00:00:01.7950727
|
50
|
+
X-MS-Exchange-Processed-By-BccFoldering: 15.20.2220.007
|
51
|
+
X-Microsoft-Antispam-Mailbox-Delivery: ucf:0;jmr:0;ex:0;auth:0;dest:I;ENG:(750127)(520011016)(706158)(944506383)(944626516);
|
52
|
+
X-Microsoft-Antispam-Message-Info: dMafteyPCFwdgcVA6/2kIoWOdGA0GWlE0XpkctcPBrQp70CrfXhiDPbOQdooy40qrKB6yZ6ID1K5D6LuSrBfZwGhsq2fdI5oTITT6uddR6Mjndi7P/ZfOwaXZKn4Bfdrt4SRkTRS47bLGjd+owyRM3ITXcI9yQTeO8C6lg/Sk+hewUHDiqmmViuExxqeCkS3uSyxX7ICk/kS6i6dwPlJ+x6MphB+uoGULuNJiHNBjtauqZwbqDO8G7d45AdF8Ifb5mSx1RELsUjS7FNghtvMnavZ3P9HklgLBioE2tnOkRQjc9Nz+C2KVBr8yWWmGrIXBWqAzGhBHJvXNnEcRdAXTEzo9gSOnamyaq5LvDXyhX5pVzSmlXVErKnYtVLP4fcGyhqQqIYDUCrXfHfd/HNdcgAm/ibT+nf7GHiGADBHD8AbZZLygjwy9RsJp7ubZfCW
|
53
|
+
Priority: 0
|
54
|
+
Content-Type: multipart/related; boundary="----_=_NextPart_001_18226df8.5d67c655"
|
55
|
+
|
56
|
+
This is a multi-part message in MIME format.
|
57
|
+
|
58
|
+
------_=_NextPart_001_18226df8.5d67c655
|
59
|
+
Content-Type: multipart/alternative; boundary="----_=_NextPart_002_3f882116d9e0.5d67c655"
|
60
|
+
|
61
|
+
|
62
|
+
------_=_NextPart_002_3f882116d9e0.5d67c655
|
63
|
+
Content-Type: text/plain
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
From: Communication <communications@example.com <mailto:communications@example.com> >
|
68
|
+
Sent: Wednesday, August 28, 2019 11:19 AM
|
69
|
+
To: Person, Bill <Bill@example.com <mailto:Bill@example.com> >
|
70
|
+
Subject: Communication Email
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
Twitter!
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
------_=_NextPart_002_3f882116d9e0.5d67c655
|
81
|
+
Content-Type: text/html
|
82
|
+
|
83
|
+
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=Generator content="Microsoft Word 15 (filtered medium)"></head><body bgcolor=white lang=EN-US link=blue vlink=purple><p>Twitter!</p><img border=0 width=32 height=32 style='width:.3333in;height:.3333in' id="Picture_x0020_8" src="cid:image009.png@01D55D9B.4CED6CC0" alt=Twitter></body></html>
|
84
|
+
|
85
|
+
------_=_NextPart_002_3f882116d9e0.5d67c655--
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
------_=_NextPart_001_18226df8.5d67c655
|
90
|
+
Content-Type: image/png
|
91
|
+
Content-Disposition: attachment; filename="image009.png"
|
92
|
+
Content-Transfer-Encoding: base64
|
93
|
+
Content-ID: image009.png@01D55D9B.4CED6CC0
|
94
|
+
|
95
|
+
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0
|
96
|
+
d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9i
|
97
|
+
ZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2Vo
|
98
|
+
aUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6
|
99
|
+
bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5
|
100
|
+
LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpS
|
101
|
+
REYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJk
|
102
|
+
Zi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIg
|
103
|
+
eG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8i
|
104
|
+
IHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5
|
105
|
+
cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5j
|
106
|
+
b20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRp
|
107
|
+
ZDpjMTZjZDE4ZC1kYWQzLTQxNDQtYjI3YS00ODA0ZjM4YWFmYWYiIHhtcE1N
|
108
|
+
OkRvY3VtZW50SUQ9InhtcC5kaWQ6MUJGQjVFNDFDOUNCMTFFNDhFMEI5NTNE
|
109
|
+
Qzk3MDhBNDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUJGQjVFNDBD
|
110
|
+
OUNCMTFFNDhFMEI5NTNEQzk3MDhBNDAiIHhtcDpDcmVhdG9yVG9vbD0iQWRv
|
111
|
+
YmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVy
|
112
|
+
aXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphYTkwYTFjZi05
|
113
|
+
YWM1LTQ2MWMtYTA0YS0xMTdlZjY5MzZmOGYiIHN0UmVmOmRvY3VtZW50SUQ9
|
114
|
+
InhtcC5kaWQ6YzE2Y2QxOGQtZGFkMy00MTQ0LWIyN2EtNDgwNGYzOGFhZmFm
|
115
|
+
Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRh
|
116
|
+
PiA8P3hwYWNrZXQgZW5kPSJyIj8+Z//T6gAAAsRJREFUeNq8V01oE1EQnjy2
|
117
|
+
1jYGkdofS21IMQeh1UvroT2kWBGkECEURPBSCMRrbvXQgwjirb2KQi8FEcVD
|
118
|
+
oPQgqRVsKXQPIhWFSGIRUiMVG0MsphKcWWbjmu7PS5PsB98h2dn55s17O2/G
|
119
|
+
0/osA5IIIseQw8hBZADZzc9ySHK0hVSRa8iUjFNFwmYcGUGGkX4Lm35miH9v
|
120
|
+
IxPIF8hVO+cemwwMIKPIaWQPHA1fkQvIx8h0LRmYQMaRk1AfKPA7yAvIOWSy
|
121
|
+
2kCYvESpftAAcSMm2WfYKQBa+SwftEZjmH1PWAUwwGlvhrgxiDhrHQog2uC0
|
122
|
+
221HtDqAcT7tbmGaNSsBROr41I76dUT0AIJmp/O/EnhMgNPzxMhp2Az1wMpo
|
123
|
+
F8TOtGn/z/R77V4jzaDC5dVvZxk/54M+bwuEN3dNxZNXeqGr/V9JGe1th/sH
|
124
|
+
ZXj0/geEfAq8Lvwxc0uaY0L21F/1n9BWV50NCs4obsT1gM9KvPJVCL5YbPGz
|
125
|
+
VK6sbONaHyxePAVTHa2OQZ9/mXUyGVT4VrPFcm4fLmV/aQF4WwRMBU9qXLR5
|
126
|
+
J71XkklsQBiuVEvcOOvVxGtB4aAsY9YtZKyefilCUc5hBR/3fkvZCW4mbEEH
|
127
|
+
KfYmB+u4DTKgYOc+FWRMc4I7GUd04OmX3YblzwVIlaQylhHcRjni4c4+zL/9
|
128
|
+
7rgVmXwJ7n7Iy+7UluAeTgozmNbIStYyCBK/vfFNdvUEVeEGctuqGlLhoWJD
|
129
|
+
GOlsg6HO46ae6HzE1N1axElzTXD3mrCyIod0oPRiZFw9rfh5Kg+3Xu3A5fWa
|
130
|
+
Vg6smdKbUroan7h4I1KzepM6Zr0OrHL36hYW9HbdWIiodV5yQXyJtQ61ZGlu
|
131
|
+
ndUmiquskbbqiqlvv9ekIFT2nXQaTOh0Fhs0mBjTbjqYWE1GSS7R75o9mnkk
|
132
|
+
pmOZ4dSsyNQ9nLoynv8VYADvOdpO4SLVRAAAAABJRU5ErkJggg==
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
------_=_NextPart_001_18226df8.5d67c655--
|
@@ -10,6 +10,7 @@ RSpec.describe Eml2Html::Converter do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
let(:subject) { Eml2Html::Converter.new fixture_path('test.eml') }
|
13
|
+
let(:other_subject) { Eml2Html::Converter.new fixture_path('other_format.eml') }
|
13
14
|
|
14
15
|
context "save_txt" do
|
15
16
|
it "creates file" do
|
@@ -32,4 +33,29 @@ RSpec.describe Eml2Html::Converter do
|
|
32
33
|
expect(File).to exist('test.zip')
|
33
34
|
end
|
34
35
|
end
|
36
|
+
|
37
|
+
context "other_eml_file" do
|
38
|
+
it "doesn't crash" do
|
39
|
+
body = other_subject.html_body
|
40
|
+
expect(body).to_not be(nil)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "loads gets attachment independently" do
|
44
|
+
a = other_subject.attachment('image009.png')
|
45
|
+
expect(a).to_not be(nil)
|
46
|
+
expect(a.length).to be > 0
|
47
|
+
end
|
48
|
+
|
49
|
+
context "attachments" do
|
50
|
+
it "loads_an_array_of_other_attachments" do
|
51
|
+
attachments = other_subject.attachments(true)
|
52
|
+
expect(attachments.length).to be(1)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "doesn't load attachments that are pics in the body" do
|
56
|
+
attachments = other_subject.attachments
|
57
|
+
expect(attachments.length).to be(0)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
35
61
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eml2html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bartłomiej Bułat
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -118,6 +118,7 @@ extra_rdoc_files: []
|
|
118
118
|
files:
|
119
119
|
- ".gitignore"
|
120
120
|
- ".rspec"
|
121
|
+
- ".travis.yml"
|
121
122
|
- CHANGELOG.md
|
122
123
|
- Gemfile
|
123
124
|
- Guardfile
|
@@ -132,6 +133,7 @@ files:
|
|
132
133
|
- lib/eml2html/version.rb
|
133
134
|
- spec/file_helper.rb
|
134
135
|
- spec/fixtures/image.png
|
136
|
+
- spec/fixtures/other_format.eml
|
135
137
|
- spec/fixtures/test.eml
|
136
138
|
- spec/lib/eml2html/converter_spec.rb
|
137
139
|
- spec/spec_helper.rb
|