extract-msg 0.52.0__tar.gz → 0.53.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {extract_msg-0.52.0 → extract_msg-0.53.2}/CHANGELOG.md +982 -961
- {extract_msg-0.52.0 → extract_msg-0.53.2}/PKG-INFO +3 -3
- {extract_msg-0.52.0 → extract_msg-0.53.2}/README.rst +289 -289
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/__init__.py +71 -71
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/custom_att_handler/__init__.py +82 -82
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/custom_att_handler/outlook_image_dib.py +158 -158
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/custom_att_handler/outlook_image_meta.py +158 -158
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/signed_att.py +8 -2
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/constants/__init__.py +295 -295
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/enums.py +2070 -2070
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/exceptions.py +5 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/message_base.py +1417 -1382
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/msg.py +1186 -1186
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/task_request.py +1 -1
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/null_date.py +33 -33
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/ole_writer.py +1109 -1109
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/open_msg.py +210 -210
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/toc_entry.py +1 -1
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/utils.py +1293 -1278
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg.egg-info/PKG-INFO +3 -3
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg.egg-info/requires.txt +2 -2
- {extract_msg-0.52.0 → extract_msg-0.53.2}/requirements.txt +2 -2
- {extract_msg-0.52.0 → extract_msg-0.53.2}/LICENSE.txt +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/MANIFEST.in +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/__main__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/_rtf/__init__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/_rtf/create_doc.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/_rtf/inject_rtf.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/_rtf/token.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/_rtf/tokenize_rtf.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/__init__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/attachment.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/attachment_base.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/broken_att.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/custom_att.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/custom_att_handler/custom_handler.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/custom_att_handler/lnk_obj_att.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/emb_msg_att.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/unsupported_att.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/attachments/web_att.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/constants/ps.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/constants/re.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/constants/st.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/data/logging-config/logging-nt.json +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/data/logging-config/logging-posix.json +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/__init__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/__init__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/_mac_ce.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/_mac_cyrillic.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/_mac_greek.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/_mac_iceland.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/_mac_turkish.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/_win874_dec.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/_dt/_win950_dec.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/encoding/utils.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/__init__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/appointment.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/calendar.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/calendar_base.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/contact.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/journal.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/meeting_cancellation.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/meeting_exception.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/meeting_forward.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/meeting_related.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/meeting_request.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/meeting_response.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/message.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/message_signed.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/message_signed_base.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/post.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/sticky_note.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/msg_classes/task.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/properties/__init__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/properties/named.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/properties/prop.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/properties/properties_store.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/py.typed +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/recipient.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/__init__.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/_helpers.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/business_card.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/cfoas.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/contact_link_entry.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/dev_mode_a.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/dv_target_device.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/entry_id.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/misc_id.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/mon_stream.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/odt.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/ole_pres.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/ole_stream_struct.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/recurrence_pattern.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/report_tag.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/system_time.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/time_zone_definition.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/time_zone_struct.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg/structures/tz_rule.py +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg.egg-info/SOURCES.txt +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg.egg-info/dependency_links.txt +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg.egg-info/entry_points.txt +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/extract_msg.egg-info/top_level.txt +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/setup.cfg +0 -0
- {extract_msg-0.52.0 → extract_msg-0.53.2}/setup.py +0 -0
|
@@ -1,961 +1,982 @@
|
|
|
1
|
-
**v0.
|
|
2
|
-
* [[TeamMsgExtractor #
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
**v0.
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
**v0.
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
**v0.
|
|
32
|
-
* [[TeamMsgExtractor #
|
|
33
|
-
|
|
34
|
-
**v0.
|
|
35
|
-
* [[TeamMsgExtractor #
|
|
36
|
-
|
|
37
|
-
**v0.
|
|
38
|
-
* [[TeamMsgExtractor #
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
* Fixed
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
*
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
*
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
*
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
*
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* Added
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* Fixed
|
|
103
|
-
*
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
*
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
*
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* Changed
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
*
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
*
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
*
|
|
134
|
-
* Changed `
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
* Fixed
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
* Added
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* Changed `
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
|
|
179
|
-
*
|
|
180
|
-
* Changed
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* Added
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
* Changed
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* Changed
|
|
216
|
-
*
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
*
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
*
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
*
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
*
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
* Added
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
|
|
269
|
-
*
|
|
270
|
-
* Added
|
|
271
|
-
* Modified
|
|
272
|
-
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*
|
|
277
|
-
*
|
|
278
|
-
*
|
|
279
|
-
*
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
*
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
* Fixed an issue
|
|
286
|
-
*
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
*
|
|
290
|
-
* Added
|
|
291
|
-
* Added
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
*
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
*
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
* Added
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
* Fixed
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
*
|
|
337
|
-
*
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
*
|
|
341
|
-
*
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
-
*
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
*
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
* [[TeamMsgExtractor #
|
|
356
|
-
*
|
|
357
|
-
*
|
|
358
|
-
*
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
*
|
|
362
|
-
* Added
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
*
|
|
368
|
-
* Added new
|
|
369
|
-
* Added
|
|
370
|
-
*
|
|
371
|
-
|
|
372
|
-
**v0.
|
|
373
|
-
*
|
|
374
|
-
*
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
* Fixed
|
|
378
|
-
* Fixed
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
*
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
* Added
|
|
385
|
-
*
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
*
|
|
389
|
-
* Added function `
|
|
390
|
-
* Added
|
|
391
|
-
* Added
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
*
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
* Fixed
|
|
399
|
-
* Fixed
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
*
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
*
|
|
421
|
-
* Fixed
|
|
422
|
-
|
|
423
|
-
**v0.
|
|
424
|
-
* [[TeamMsgExtractor #
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
*
|
|
428
|
-
* Added new
|
|
429
|
-
|
|
430
|
-
**v0.36.
|
|
431
|
-
*
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
* Fixed `
|
|
435
|
-
* Added code to
|
|
436
|
-
*
|
|
437
|
-
* Fixed
|
|
438
|
-
*
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
*
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
*
|
|
455
|
-
*
|
|
456
|
-
*
|
|
457
|
-
*
|
|
458
|
-
*
|
|
459
|
-
*
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
*
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
* Fixed
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
*
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
*
|
|
481
|
-
*
|
|
482
|
-
*
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
*
|
|
487
|
-
*
|
|
488
|
-
*
|
|
489
|
-
*
|
|
490
|
-
*
|
|
491
|
-
*
|
|
492
|
-
*
|
|
493
|
-
*
|
|
494
|
-
*
|
|
495
|
-
*
|
|
496
|
-
*
|
|
497
|
-
*
|
|
498
|
-
*
|
|
499
|
-
*
|
|
500
|
-
*
|
|
501
|
-
*
|
|
502
|
-
*
|
|
503
|
-
*
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
*
|
|
507
|
-
*
|
|
508
|
-
* Fixed issue that
|
|
509
|
-
*
|
|
510
|
-
*
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
*
|
|
514
|
-
*
|
|
515
|
-
*
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
*
|
|
519
|
-
*
|
|
520
|
-
*
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
*
|
|
524
|
-
*
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
*
|
|
528
|
-
* Fixed
|
|
529
|
-
*
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
*
|
|
535
|
-
*
|
|
536
|
-
*
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
* Added
|
|
540
|
-
*
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
*
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
*
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
*
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
*
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
*
|
|
565
|
-
*
|
|
566
|
-
*
|
|
567
|
-
*
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
*
|
|
571
|
-
*
|
|
572
|
-
*
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
* [[TeamMsgExtractor #
|
|
582
|
-
* Fixed
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
*
|
|
586
|
-
*
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
*
|
|
594
|
-
|
|
595
|
-
**v0.30.
|
|
596
|
-
* [[TeamMsgExtractor #
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
*
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
*
|
|
607
|
-
*
|
|
608
|
-
|
|
609
|
-
**v0.30.
|
|
610
|
-
*
|
|
611
|
-
*
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
*
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
*
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
*
|
|
628
|
-
*
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
*
|
|
632
|
-
*
|
|
633
|
-
*
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
* Added
|
|
637
|
-
*
|
|
638
|
-
*
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
*
|
|
645
|
-
*
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
*
|
|
649
|
-
*
|
|
650
|
-
*
|
|
651
|
-
*
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
*
|
|
655
|
-
*
|
|
656
|
-
*
|
|
657
|
-
*
|
|
658
|
-
*
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
*
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
*
|
|
669
|
-
*
|
|
670
|
-
*
|
|
671
|
-
*
|
|
672
|
-
*
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
* [[TeamMsgExtractor #
|
|
676
|
-
*
|
|
677
|
-
*
|
|
678
|
-
*
|
|
679
|
-
*
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
*
|
|
683
|
-
*
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
*
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
*
|
|
690
|
-
*
|
|
691
|
-
*
|
|
692
|
-
*
|
|
693
|
-
*
|
|
694
|
-
*
|
|
695
|
-
*
|
|
696
|
-
*
|
|
697
|
-
*
|
|
698
|
-
*
|
|
699
|
-
*
|
|
700
|
-
*
|
|
701
|
-
*
|
|
702
|
-
*
|
|
703
|
-
*
|
|
704
|
-
*
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
*
|
|
727
|
-
*
|
|
728
|
-
*
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
*
|
|
732
|
-
*
|
|
733
|
-
*
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
*
|
|
737
|
-
*
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
*
|
|
741
|
-
*
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
*
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
*
|
|
749
|
-
* [[TeamMsgExtractor #
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
*
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
*
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
*
|
|
762
|
-
*
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
*
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
* [[TeamMsgExtractor #
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
*
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
*
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
* [[TeamMsgExtractor #
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
*
|
|
785
|
-
|
|
786
|
-
**v0.27.
|
|
787
|
-
* [[TeamMsgExtractor #
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
* [[TeamMsgExtractor #
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
*
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
* [[TeamMsgExtractor #
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
* [[TeamMsgExtractor #
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
*
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
*
|
|
822
|
-
|
|
823
|
-
**v0.27.
|
|
824
|
-
*
|
|
825
|
-
|
|
826
|
-
**v0.27.
|
|
827
|
-
*
|
|
828
|
-
*
|
|
829
|
-
*
|
|
830
|
-
*
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
*
|
|
834
|
-
|
|
835
|
-
**v0.
|
|
836
|
-
* Added
|
|
837
|
-
*
|
|
838
|
-
* Added
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
*
|
|
846
|
-
|
|
847
|
-
**v0.
|
|
848
|
-
*
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
*
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
*
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
*
|
|
858
|
-
*
|
|
859
|
-
* Added new
|
|
860
|
-
*
|
|
861
|
-
*
|
|
862
|
-
|
|
863
|
-
**v0.
|
|
864
|
-
*
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
* Fixed
|
|
870
|
-
|
|
871
|
-
**v0.
|
|
872
|
-
*
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
* Added new
|
|
877
|
-
* [[
|
|
878
|
-
* Added new function `
|
|
879
|
-
*
|
|
880
|
-
* Added
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
*
|
|
886
|
-
|
|
887
|
-
**v0.
|
|
888
|
-
*
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
*
|
|
900
|
-
*
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
*
|
|
905
|
-
*
|
|
906
|
-
*
|
|
907
|
-
|
|
908
|
-
**v0.
|
|
909
|
-
*
|
|
910
|
-
|
|
911
|
-
**v0.
|
|
912
|
-
*
|
|
913
|
-
*
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
*
|
|
925
|
-
*
|
|
926
|
-
*
|
|
927
|
-
*
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
* [[TheElementalOfDestruction #
|
|
934
|
-
*
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
*
|
|
940
|
-
*
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
*
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
*
|
|
949
|
-
*
|
|
950
|
-
*
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
*
|
|
954
|
-
*
|
|
955
|
-
*
|
|
956
|
-
*
|
|
957
|
-
*
|
|
958
|
-
*
|
|
959
|
-
*
|
|
960
|
-
*
|
|
961
|
-
*
|
|
1
|
+
**v0.53.2**
|
|
2
|
+
* [[TeamMsgExtractor #452](https://github.com/TeamMsgExtractor/msg-extractor/issues/452)] Adjusted code to allow html encoding to be cached to try to speed up `bs4` operations.
|
|
3
|
+
* [[TeamMsgExtractor #453](https://github.com/TeamMsgExtractor/msg-extractor/issues/453)] Fixed handler for too large filetimes so that some filetimes being too large doesn't break the handler.
|
|
4
|
+
* Fixed a bug that would cause an error in task objects due to a lack of `enumerate`.
|
|
5
|
+
* Fix `TOCEntry` not initializing `DVTargetDevice` correctly.
|
|
6
|
+
* Add temporary properties for `ContentID` to `SignedAttachment`. AFAIK these can't ever be set, but this prevents errors in some places.
|
|
7
|
+
|
|
8
|
+
**v0.53.1**
|
|
9
|
+
* Expanded allowable range for `red-black-tree-mod`.
|
|
10
|
+
* Fix issue with `MessageBase.asEmailMessage()` that prevented embedded MSG files from being attached.
|
|
11
|
+
* Expand allowable versions of `BeautifulSoup4`.
|
|
12
|
+
|
|
13
|
+
**v0.53.0**
|
|
14
|
+
* Added tests for many functions in `extract_msg.utils`.
|
|
15
|
+
* Fix an issue in `extract_msg.utils.msgPathToString()` that prevented backslashes from being replaced with forward slashes.
|
|
16
|
+
* Change the behavior of `extract_msg.utils.minutesToDurationStr()` to properly use plurals.
|
|
17
|
+
* Fixed issue in `extract_msg.utils.unwrapMsg()` that would prevent it from working on signed messages due to an API change.
|
|
18
|
+
* Added new exception `MimetypeFailureError`.
|
|
19
|
+
* Modified the logic of `MessageBase.asEmailMessage()` to use `AttachmentBase/SignedAttachment.name` instead of `getFilename()` which only exists on AttachmentBase.
|
|
20
|
+
* Modified the logic of `MessageBase.htmlBodyPrepared()` to properly put the mimetype in image tags to ensure rendering. Logic was also modified to use `encode` instead of `prettify` to reduce computation and output size.
|
|
21
|
+
|
|
22
|
+
**v0.52.0**
|
|
23
|
+
* [[TeamMsgExtractor #444](https://github.com/TeamMsgExtractor/msg-extractor/issues/444)] Fix typo in string that prevented HTML body from generating from the plain text body properly.
|
|
24
|
+
* Adjusted the behavior of `MSGFile.areStringsUnicode` to prioritize the property specified by the parent MSG files for MSG files that are embedded. Additionally, added a fallback to rely on whether or not there is a stream using the `001F` type to determine the property value if it is entirely missing.
|
|
25
|
+
* Adjusted `OleWriter.fromMsg()` and `MSGFile.export()` to add the argument `allowBadEmbed` which helps to correct a few different issues that may appear in embedded MSG files. These corrections allow the embedded file to still be extracted and to open properly in Outlook.
|
|
26
|
+
* In addition to the above, the errors that some of those corrections will suppress are now significantly more informative about what went wrong.
|
|
27
|
+
|
|
28
|
+
**v0.51.1**
|
|
29
|
+
* Add class type added in last version to known class types.
|
|
30
|
+
|
|
31
|
+
**v0.51.0**
|
|
32
|
+
* [[TeamMsgExtractor #401](https://github.com/TeamMsgExtractor/msg-extractor/issues/401)] Add basic support for MSG class type `IPM.SkypeTeams.Message`.
|
|
33
|
+
|
|
34
|
+
**v0.50.1**
|
|
35
|
+
* [[TeamMsgExtractor #434](https://github.com/TeamMsgExtractor/msg-extractor/issues/434)] Fix bug introduced in previous version.
|
|
36
|
+
|
|
37
|
+
**v0.50.0**
|
|
38
|
+
* [[TeamMsgExtractor #432](https://github.com/TeamMsgExtractor/msg-extractor/issues/432)] Adjust html header code to replace non-ascii characters with escaped versions. Also adjusted plain text to html conversion to ensure non-ascii character from the body are encoded to escaped values to be safe.
|
|
39
|
+
* Made some corrections to `NullDate`.
|
|
40
|
+
|
|
41
|
+
**v0.49.0**
|
|
42
|
+
* [[TeamMsgExtractor #427](https://github.com/TeamMsgExtractor/msg-extractor/issues/427)] Adjusted code for converting time stamps to create null dates for any time stamp beyond a certain point. The point was determined to be close to the existing null dates.
|
|
43
|
+
* [[TeamMsgExtractor #425](https://github.com/TeamMsgExtractor/msg-extractor/issues/425)] Added basic support for custom attachments that are Windows Metafiles.
|
|
44
|
+
* Changed tolerance of bitmap custom attachment handler to allow for attachments with only a CONTENT stream. This change was made after seeing an example of a file that only had a CONTENT stream and no other streams for the custom data. The code now also tries to create default values for things previously determined from those other streams.
|
|
45
|
+
* Fixed an issue in `tryGetMimetype` were the code didn't properly check if the data type was bytes (it only checked if it had a type).
|
|
46
|
+
* Corrected some exports.
|
|
47
|
+
* Added new `ErrorBehavior` value `CUSTOM_ATTACH_TOLERANT` to allow skipping checks for unused data that is normally validated.
|
|
48
|
+
|
|
49
|
+
**v0.48.7**
|
|
50
|
+
* [[TeamMsgExtractor #420](https://github.com/TeamMsgExtractor/msg-extractor/issues/420)] Fixed typo introduced in last version.
|
|
51
|
+
|
|
52
|
+
**v0.48.6**
|
|
53
|
+
* [[TeamMsgExtractor #417](https://github.com/TeamMsgExtractor/msg-extractor/issues/417)] Fixed issues with `openMsg` where some corrupted MSG files could end up throwing an uncaught exception and leaving the file handle open.
|
|
54
|
+
|
|
55
|
+
**v0.48.5**
|
|
56
|
+
* [[TeamMsgExtractor #414](https://github.com/TeamMsgExtractor/msg-extractor/issues/414)] Fixed typo in `message_signed_base.py`.
|
|
57
|
+
|
|
58
|
+
**v0.48.4**
|
|
59
|
+
* [[TeamMsgExtractor #411](https://github.com/TeamMsgExtractor/msg-extractor/issues/411)] Fix console script throwing error due to changed console args not defaulting.
|
|
60
|
+
|
|
61
|
+
**v0.48.3**
|
|
62
|
+
* [[TeamMsgExtractor #409](https://github.com/TeamMsgExtractor/msg-extractor/issues/409)] Added missing private method to `SignedAttachment`.
|
|
63
|
+
* Fixed some missing typing information.
|
|
64
|
+
|
|
65
|
+
**v0.48.2**
|
|
66
|
+
* Fixed bugs with `MessageBase.asEmailMessage()`. Numerous improvements to how it handles the data.
|
|
67
|
+
|
|
68
|
+
**v0.48.1**
|
|
69
|
+
* Added an option (`-s`, `--stdin`) to the command line to take an MSG file from stdin. This allows the user to pipe the MSG data from another program directly instead of having to write a middleman that uses the `extract-msg` library directly or having to write the file to the disk first.
|
|
70
|
+
* Changed main function to allow for manual argument list to be passed to it.
|
|
71
|
+
* Added attributes to `AttachmentBase` for creation and modification time. These can be accessed through `createdAt` or `creationTime` and `lastModificationTime` or `modifiedAt`.
|
|
72
|
+
* Changed `OleWriter` tests to output the name of the test file being done if an error occurs.
|
|
73
|
+
* Added tests for some command line stuff.
|
|
74
|
+
|
|
75
|
+
**v0.48.0**
|
|
76
|
+
* Adjusted error handling for named properties to handle critical streams being missing and to allow suppression of those errors.
|
|
77
|
+
* Adjusted error handling for named properties to allow silencing of errors caused by invalid references to the name stream. If `ErrorBehavior.NAMED_NAME_STREAM` is provided to the `MSGFile` instance, a warning will be logged and that entry will simply be dropped.
|
|
78
|
+
* Adjusted error handling for signed messages to better check for issues with the signed attachment. This should make errors from violating the standard much easier to understand. These errors can be ignored, but the attachment will *not* be parsed as a signed attachment.
|
|
79
|
+
* Minor docstring updates.
|
|
80
|
+
* Minor adjustments to `OleWriter` to prepare the code for being able to write version 4 files. Version 3 files are currently the only one's supported, but much of the code had hard-coded values that could be replaced with variables and small conditionals. This will have very little performance impact, and should not be noticeable.
|
|
81
|
+
* Improved comments on `OleWriter` to make private sections more understandable.
|
|
82
|
+
* Changed `MessageSignedBase._rawAttachments` to `MessageSignedBase.rawAttachments` to provide non-private access in a reliable way.
|
|
83
|
+
|
|
84
|
+
**v0.47.0**
|
|
85
|
+
* Changed the public API for `PropertiesStore` to improve the quality of its code. The properties type is now mandatory, and the intelligence field (and the related enum) has been removed.
|
|
86
|
+
* Additionally, the `toBytes` and `__bytes__` methods will both generate based on the contents of this class, allowing for new properties to be created and for existing properties to be modified or removed if the class is set to writable on creation.
|
|
87
|
+
* Added new method `Named.getPropNameByStreamID`. This method takes the ID of a stream (or property stream entry) and returns the property name (as a tuple of the property name/ID and the property set) that is stored there. Returns `None` if the stream is not used to store a named property. This name can be directly used (if it is not `None`) to get the `NamedPropertyBase` instance associated. This method is most useful for people looking at the raw data of a stream and trying to figure out what named property it refers to.
|
|
88
|
+
* Fixed mistake in struct definitions that caused a float to require 8 bytes to unpack.
|
|
89
|
+
* Added tests for `extract_msg.properties.props`.
|
|
90
|
+
* Added basic tests for `extract_msg.attachments`.
|
|
91
|
+
* Added validation tests for the `enums` and `constants` submodule.
|
|
92
|
+
* Removed unneeded structs.
|
|
93
|
+
* Fixed an issue where `PtypGuid` was being parsed by the wrong property type. Despite having a fixed size, it is still a variable length property.
|
|
94
|
+
* Fixed *all* of the setters not working. I didn't know they needed to use the same name as the getter, and I *swear* they were working at some point with the current setup. Some sources online suggested the original form should work, which is even stranger.
|
|
95
|
+
* Unified all line endings to LF instead of a mix of CRLF and LF.
|
|
96
|
+
* Changed enums `BCTextFormat` and `BCLabelFormat` to `IntFlag` enums. The values that exist are for the individual flags and not the groups of flags.
|
|
97
|
+
* Made `FieldInfo` writable, however it can no longer be directly converted to bytes since it requires additional information outside of itself to convert to bytes. It still retains a `toBytes` method, however it requires an argument for the additional data.
|
|
98
|
+
* Fixed `UnsupportedAttachment` inverting the `skipNotImplemented` keyword argument.
|
|
99
|
+
* Fixed `DMPaperSize` not being a subclass of `Enum`.
|
|
100
|
+
* Extended values for `DMPaperSize`.
|
|
101
|
+
* Removed unneeded structs.
|
|
102
|
+
* Fixed exports for `extract_msg.constants.st`.
|
|
103
|
+
* Updated various parts of the documentation to improve it and make it more consistent.
|
|
104
|
+
* Fixed `Recipient.existsTypedProperty` and `AttachmentBase.existsTypedProperty` having the wrong return type.
|
|
105
|
+
* Removed "TODO" markers on `OleStreamStruct` and finalized it to only handle the OLEStream for embedded objects.
|
|
106
|
+
* Fixed type annotations for `extract_msg.utils.fromTimeStamp`.
|
|
107
|
+
* Added new function `extract_msg.properties.prop.createNewProp`. This function allows a new property to be created with default data based on the name. The name MUST be an 8 character hex string, the first 4 characters being the value for the property ID and the second 4 being the value for the type.
|
|
108
|
+
* Fixed `VariableLengthProp.reservedFlags` returning the wrong type.
|
|
109
|
+
* Adjusted many of the property structs to make it easier to use them for packing.
|
|
110
|
+
* Renamed some of the property structs to be more informative.
|
|
111
|
+
* Fixed `ServerID` using the wrong struct (would have thrown an exception for not having enough data).
|
|
112
|
+
* Unified signing for integer properties. All integer properties are considered unsigned by default when read directly from the MSG file, however specific property accessors may convert to signed if the property is specifically intended to be so. This does not necessarily include properties that are *stored* as integers but have a value that is not an integer, like `PtypCurrency`.
|
|
113
|
+
* Changed `extract_msg.constants.NULL_DATE` to be a subclass of `datetime.datetime` instead of just a fixed value. Functions that return null dates may end up returning distinct versions of `NullDate` (the newly created subclass), however all instances of `NullDate` will register as being equal to each other. Existing equality comparisons to the `NULL_DATE` constant will all function as intended, however `is` checks may fail for some null dates.
|
|
114
|
+
* Changed currency type to return a `Decimal` instance for higher precision.
|
|
115
|
+
* Made `FixedLengthProp` and `VariableLengthProp` writable. Only the property `flags` from `PropBase` is writable. This also includes the ability to convert them to bytes based on their value.
|
|
116
|
+
* Fixed many issues in `VariableLengthProp` regarding it's calculation of sizes.
|
|
117
|
+
* Removed `hasLen` function.
|
|
118
|
+
* Changed style to remove space between variable name and colon that separates the type.
|
|
119
|
+
* Corrected `InvaildPropertyIdError` to `InvalidPropertyIdError`.
|
|
120
|
+
* Updated to `olefile` version 0.47.
|
|
121
|
+
* Updated `RTFDE` minimum version to 0.1.1.
|
|
122
|
+
* Changed dependency named for `compressed-rtf` to remove minor typo (it *should* forward to the correct place regardless, but just to be safe).
|
|
123
|
+
* Fixed issues with implementation of `OleWriter` when it comes to large sets of data. Most issues would fail silently and only be noticeable when trying to open the file. If your file is less than 2 GB, you would likely not have notices and issues at all. This includes adding a new exception that is throw from the `write` method, `TooManySectorsError`.
|
|
124
|
+
* Fixed some issues with `OleWriter` that could cause entries to end up partially added if the data was an issue.
|
|
125
|
+
|
|
126
|
+
**v0.46.2**
|
|
127
|
+
* Adjusted typing information on regular expressions. They were using a subscript that was added in Python 3.9 (apparently that is something the type checker doesn't check for), which made the module incompatible with Python 3.8. If you are using Python 3.9 or higher a version check will switch to the more specific typing.
|
|
128
|
+
|
|
129
|
+
**v0.46.1**
|
|
130
|
+
* [[TeamMsgExtractor #394](https://github.com/TeamMsgExtractor/msg-extractor/issues/394)] Fix typo in props that caused the wrong number of bytes to be given to a struct.
|
|
131
|
+
|
|
132
|
+
**v0.46.0**
|
|
133
|
+
* [[TeamMsgExtractor #95](https://github.com/TeamMsgExtractor/msg-extractor/issues/95)] Adjusted the `overrideEncoding` property of `MSGFile` to allow automatic encoding detection. Simply set the property to the string `"chardet"` and, assuming the `chardet` module is installed, it will analyze a number of the strings to try and form a consensus about the encoding. This will *ignore* the specified encoding *only if* if successfully detects. Otherwise it will log a warning and fall back to the default behavior.
|
|
134
|
+
* [[TeamMsgExtractor #387](https://github.com/TeamMsgExtractor/msg-extractor/issues/387)] Changed `extract_msg.utils.decodeRfc2047` to not throw decoding errors if the content given is not ASCII.
|
|
135
|
+
* [[TeamMsgExtractor #387](https://github.com/TeamMsgExtractor/msg-extractor/issues/387)] Changed header parsing policy to `email.policy.compat32` to prevent partial parsing of quoted header fields.
|
|
136
|
+
* [[TeamMsgExtractor #388](https://github.com/TeamMsgExtractor/msg-extractor/issues/388)] Updated documentation of `MSGFile.export` to specify that updated fields on an `MSGFile` instance (and it's subclasses) will *not* be reflected in the result of the function. Many of the functions do use the newest version of a cached_property, but this is not one of them.
|
|
137
|
+
* Removed methods deprecated in `v0.45.0`.
|
|
138
|
+
* Changed the base class of `EntryID` from no base class to `abc.ABC`.
|
|
139
|
+
* Added `position` property to `EntryID` to tell how many bytes were used to create the `EntryID`.
|
|
140
|
+
* Added a number of properties to `MSGFile` from \[MS-OXCMSG\].
|
|
141
|
+
* Moved some properties down to `MessageBase` from it's subclasses.
|
|
142
|
+
* Added support for Journal objects.
|
|
143
|
+
* Changed internal code of `PermanentEntryID` to correctly parse the data. Previously the distinguished name did not actually end at the null character, instead ending at the end of the bytes provided. If there was trailing data, it would be captured inadvertently.
|
|
144
|
+
* Finished definition for `StoreObjectEntryID`.
|
|
145
|
+
* Added new keyword arguments for MSG files: `dateFormat` and `datetimeFormat`. These allow the user to easily override the strings being used for format dates and dates that include a time component, respectively.
|
|
146
|
+
* In unifying all the formats into 2 options, you may notice that some will look a bit different starting from this version, as there was an unfortunately large amount of variation.
|
|
147
|
+
* Fixed code for `MessageBase.parsedDate` which could have incorrect values.
|
|
148
|
+
* Fixed issues with `MessageBase.date` and related things either being incorrectly documented or doing things that are not specified by the documentation. It was *supposed* to have been changed to use `datetime` objects, but it was still using strings.
|
|
149
|
+
* Removed unused function `extract_msg.utils.isEmptyString`.
|
|
150
|
+
* Removed unused function `extract_msg.utils.properHex`.
|
|
151
|
+
* Added a `getStream` helper function to `CustomAttachmentHandler`.
|
|
152
|
+
* Added a `getStreamAs` helper function to `CustomAttachmentHandler`.
|
|
153
|
+
* Added new custom attachment handler for journal-associated attachments.
|
|
154
|
+
* Changed `EntryID.autoCreate` to return `None` if given `None` or empty bytes.
|
|
155
|
+
* Changed `EntryID.autoCreate` to raise a `FeatureNotImplemented` exception if no valid entry ID class is found.
|
|
156
|
+
* Fix typing annotations for `CustomAttachmentHandler`.
|
|
157
|
+
* Removed unneeded `imapclient` dependency.
|
|
158
|
+
* Changed `getJson` to have values be null if they aren't found rather than an empty string.
|
|
159
|
+
* Implemented the `getJson` method correctly for a number of classes.
|
|
160
|
+
* Changed `Task.percentComplete` to always return a float.
|
|
161
|
+
* Changed the `NotImplementedError` for custom attachment handler not being found to `FeatureNotImplemented`. Additionally, changed the error message to specify the CLSID found on the attachment to better enable people to report issues.
|
|
162
|
+
* Changed code for `Recipient` and `MessageBase` that makes it rely on `MessageBase.recipientTypeClass` to determine the class to use for the `recipientType` property. Adjusted the typing of `Recipient` to have it reflect the type that will be used.
|
|
163
|
+
* Correctly changed the returned value for `ResponseStatus.fromIter` to actually return a List instead of a set.
|
|
164
|
+
* Filled out typing information for a significant portion of the module where variables or functions were missing it. This includes the entirety of the constants submodule.
|
|
165
|
+
* Corrected a number of minor issues.
|
|
166
|
+
* Extended values for `DVAspect` enum.
|
|
167
|
+
* Added new enums to go with parsing for `OLEPresentationStream`.
|
|
168
|
+
* Changed `NNTPNewsgroupFolderEntryID.newsgroupName` to bytes instead of string since it is ANSI.
|
|
169
|
+
* Fixed an issue that would cause headers to fail to parse properly if the header text starts with "Microsoft Mail Internet Headers Version 2.0" which is common on some MSG files. This is fixed by stripping that from the beginning before actually parsing the text. This is to circumvent CPython issue #85329, confirmed to still exist in *at least* some of the supported Python versions.
|
|
170
|
+
* Added `listDir` and `slistDir` as methods to `AttachmentBase`, `Recipient`, and `Named`. These *always* exclude the prefix, returning as if their directory is the root of the object. This allows the named to be directly used for accessing those files.
|
|
171
|
+
* Numerous spelling fixes in docstrings, comments, and exceptions.
|
|
172
|
+
* Reduced the amount of initialization performed by `MessageBase`. Much of this initialization was there from before a lot of stuff changed to `cached_property` and a number of internal variables were being used. Now all of the relevant variables will be initialized by the way they are accessed.
|
|
173
|
+
* Added new exception `DependencyError`.
|
|
174
|
+
* Changed the errors for missing optional dependencies from `ImportError` to `DependencyError`.
|
|
175
|
+
* Removed all instances of the `rawData` property in favor of the `toBytes` method. For now, many of these will simply return the raw data used, specifically those that are still unmodifiable. Any whose properties have the ability to be modified will have properly implemented versions. These classes also allow `None` to be passed as the value for their data, which will be the default if no arguments have been passed to the constructor. If no arguments or `None` is given as the data, it will create a new instance with default values. This is all in an effort to move towards the ability to create new MSG files and the `MSGWriter` class. All `toBytes` methods will either exclusively return `bytes` or will return `None` to specify that the structure isn't valid to convert to bytes. Structures that may be invalid will be annotated as `Optional[bytes]` for the return type.
|
|
176
|
+
* Additionally, these objects will also support the `__bytes__` method. If the object returned is *not* bytes, the method will throw a `TypeError`.
|
|
177
|
+
* Removed the individual `PropBase` flag properties and changed the main `flags` property to return an enum containing the flags.
|
|
178
|
+
* Changed various data structs to allow modification and creation of new instances for writing to an MSG file.
|
|
179
|
+
* Changed `TZRule` to use unsigned values where applicable.
|
|
180
|
+
* Changed `TZRule` to require the 14 null bytes (I commented it out completely on accident instead of swapping it to a plain read). It now logs a warning about the bytes not being null.
|
|
181
|
+
* Removed unneeded function `windowsUnicode`.
|
|
182
|
+
* Moved `FixedLengthProperty.parseType` to the private API. This was not intended for external use anyways, so leaving it as public API didn't make sense.
|
|
183
|
+
* Fixed check for type in `ContactAddressEntryID` being the wrong value.
|
|
184
|
+
* Modified `inputToBytes` to support objects with the `__bytes__` method. If the method exists *and works* then it will be used as a last resort.
|
|
185
|
+
* Modified `OleWriter` to accept objects with a `__bytes__` method for the data to use for an entry.
|
|
186
|
+
* Added `__bytes__` method to `MSGFile`. This is equivalent to calling `MSGFile.exportBytes`.
|
|
187
|
+
|
|
188
|
+
**v0.45.0**
|
|
189
|
+
* BREAKING: Changed parsing of string multiple properties to remove the trailing null byte. This *will* cause the output of parsing them to differ.
|
|
190
|
+
* Updated typing information for some functions and classes.
|
|
191
|
+
* Fixed a bug with `MessageSignedBase.attachments` that would cause it to return None instead of an empty list if the number of normal attachments was 0 was the error behavior was set to ignore violations of the standard.
|
|
192
|
+
* Updated `MessageSignedBase.attachments` to use `functools.cached_property` instead of `property`.
|
|
193
|
+
* Fixed spelling errors in some exception strings.
|
|
194
|
+
* Made `NamedPropertyBase` a subclass of `abc.ABC`.
|
|
195
|
+
* Cleaned up some of the code for named properties to remove unused variables and remove inefficient code.
|
|
196
|
+
* Changed `PropBase` to be a subclass of `abc.ABC`.
|
|
197
|
+
* Added detailed versioning info to the README.
|
|
198
|
+
* Deprecated many private functions, including methods on many of the classes. Of primary note are `_getStream` and `_getStringStream`, which have been moved to the public API as `getStream` and `getStringStream`. Any deprecated functions still exist and will forward to a public API function if they are not being removed. Additionally, all internal usage of them has been removed. This change is one of the big preparations that is needed for the `1.0.0` release.
|
|
199
|
+
* As mentioned, a number of these deprecated functions have been moved to the public API. It is recommended that you run tests with your code after enabling deprecation warnings to see what should be changed.
|
|
200
|
+
* Removed items deprecated in or before `0.42.0`.
|
|
201
|
+
* Changed the API for the private method `_genRecipient`. This is not intended for use outside of the module *except* for subclasses. The change removed the allowance of ints for the second argument, requiring that it be a valid enum type.
|
|
202
|
+
* Convert many enum types to `IntEnum`.
|
|
203
|
+
* Extended functionality of `PropertiesStore` to allow for integer property names and getting a property based on just the ID. You can also get a list of all properties that use a given ID.
|
|
204
|
+
* Added new function `PropertiesStore.getProperties` which gets a list of all properties matching the property ID. Return type is a list of `PropBase` instances.
|
|
205
|
+
* Added new function `PropertiesStore.getValue` which looks for the first matching `FixedLengthProp` and returns the value from it.
|
|
206
|
+
* Improved internal code related to getting a property with a potentially unknown type.
|
|
207
|
+
* Added a number of entirely new functions to the public API on `MSGFile`, `AttachmentBase`, `PropertiesStore`, and `Recipient` objects:
|
|
208
|
+
* `getMultipleBinary`: Gets a multiple binary property as a list of `bytes` objects.
|
|
209
|
+
* `getSingleOrMultipleBinary`: A combination of `getStream` and `getMultipleBinary` which prefers a single binary stream. Returns a single `bytes` object or a list of `bytes` objects.
|
|
210
|
+
* `getMultipleString`: Gets a multiple string property as a list of `str` objects.
|
|
211
|
+
* `getSingleOrMultipleString`: A combination of `getStringStream` and `getMultipleString` which prefers a single string stream. Returns a single bytes object or a list of bytes objects.
|
|
212
|
+
* `getPropertyVal`: Shortcut for `instance.props.getValue` that allows new behavior to be added by overriding it.
|
|
213
|
+
* `getNamedProp`: Shortcut for `instance.namedProperties.get((propertyName, guid), default)` that allows new behavior to be added by overriding it.
|
|
214
|
+
* Removed `Named._getStringStream` and `Named.sExists`. The named properties storage will *always* use regular streams and not string streams.
|
|
215
|
+
* Changed all `Named` methods to no longer have a prefix argument. The prefix should *always* be false sense the named property mapping will only exist in the top level directory.
|
|
216
|
+
* Adjusted `tryGetMimeType` to allows any attachments whose `data` property would return a `bytes` instance.
|
|
217
|
+
* Changed internal code to use public API functions wherever possible. This includes making many private API functions use calls to the public API for getting bits of data.
|
|
218
|
+
* Fixed potential issue with `AttachmentBase.clsid` which had the potential to cause some attachments to fail to generate a CLSID.
|
|
219
|
+
* Outright removed or changed a significant portion of the private API. I have rarely, if ever, seen references to these parts, so this should cause you no issues. Some of these have also been moved to the public API, either identically or with changes, and the mapping is as such:
|
|
220
|
+
* `_getNamedAs` -> `getNamedAs`: Changed to *always* require a conversion argument. If you were previously using it to plainly get a named property or to handle the properly being None or a real value, you should use the return value of `getNamedProp` instead.
|
|
221
|
+
* `_getPropertyAs` -> `getPropertyAs`: Same as above, use `getPropertyVal` instead for None or plain access.
|
|
222
|
+
* `_getStreamAs` -> `getStreamAs`, `getStringStreamAs`: Once again, see above. Use `getStream` and `getStringStream`, respectively.
|
|
223
|
+
|
|
224
|
+
**v0.44.0**
|
|
225
|
+
* Fixed a bug that caused `MessageBase.headerInit` to always return `False` after the 0.42.0 update.
|
|
226
|
+
* Changed `MessageBase.headerInit` to a property.
|
|
227
|
+
* Fixed `extract_msg.utils.__all__`.
|
|
228
|
+
* Minor reorganization within `extract_msg/utils.py`.
|
|
229
|
+
* Minor changes to docstrings.
|
|
230
|
+
* Minor README updates.
|
|
231
|
+
* Fix issue with folded header fields decoding incorrectly when given to `extract_msg.utils.decodeRfc2047`.
|
|
232
|
+
|
|
233
|
+
**v0.43.0**
|
|
234
|
+
* [[TeamMsgExtractor #56](https://github.com/TeamMsgExtractor/msg-extractor/issues/56)] [[TeamMsgExtractor #248](https://github.com/TeamMsgExtractor/msg-extractor/issues/248)] Added new function `MessageBase.asEmailMessage` which will convert the `MessageBase` instance, if possible, to an `email.message.EmailMessage` object. If an embedded MSG file on a `MessageBase` object is of a class that does not have this function, it will simply be attached to the instance as bytes.
|
|
235
|
+
* Changed imports in `message_base.py` to help with type checkers.
|
|
236
|
+
* Changed from using `email.parser.EmailParser` to `email.parser.HeaderParser` in `MessageBase.header`.
|
|
237
|
+
* Changed some of the internal code for `MessageBase.header`. This should improve usage of it, and should not have any noticeable negative changes. You man notice some of the values parse slightly differently, but this effect should be mostly suppressed.
|
|
238
|
+
|
|
239
|
+
**v0.42.2**
|
|
240
|
+
* Fix bug in `AttachmentBase.mimetype` that would cause it to throw an error when accessed. This bug was introduced in `v0.42.0`.
|
|
241
|
+
|
|
242
|
+
**v0.42.1**
|
|
243
|
+
* Fixed some constants being accessed with the wrong name (names were changed in reorganization).
|
|
244
|
+
* Removed unused regular expression.
|
|
245
|
+
|
|
246
|
+
**v0.42.0**
|
|
247
|
+
* [[TeamMsgExtractor #372](https://github.com/TeamMsgExtractor/msg-extractor/issues/372)] Changed the way that the save functions return a value. This makes the return value from all save functions much more informative, allowing a user to separate if a file or folder (or if more than one) was saved from the function. It also guarantees that all classes from this module will return the relevant path(s) if data is actually saved.
|
|
248
|
+
* [[TeamMsgExtractor #288](https://github.com/TeamMsgExtractor/msg-extractor/issues/288)] Added feature to allow attachment save functions to simply overwrite existing files of the same name. This can be done with the `overwriteExisting` keyword argument from code or the `--overwrite-existing` option from the command line.
|
|
249
|
+
* [[TeamMsgExtractor #40](https://github.com/TeamMsgExtractor/msg-extractor/issues/40)] Added new submodule `custom_attachments`. This submodule provides an extendable way to handle custom attachment types, attachment types whose structure and formatting are not defined in the Microsoft documentation for MSG files. This includes a handler to at least partially cover support for Outlook images.
|
|
250
|
+
* [[TeamMsgExtractor #373](https://github.com/TeamMsgExtractor/msg-extractor/issues/373)] Added the `encoding` submodule for encoding tasks, including proper support for Microsoft's implementation of CP950. This gets added to the codecs list as "windows-950".
|
|
251
|
+
* Added infrastructure to make it easy to add variable-byte (up to two bytes) encodings and single-byte encodings.
|
|
252
|
+
* Added the following encodings:
|
|
253
|
+
* windows-874
|
|
254
|
+
* x-mac-ce
|
|
255
|
+
* x-mac-cyrillic
|
|
256
|
+
* x-mac-greek
|
|
257
|
+
* x-mac-icelandic
|
|
258
|
+
* x-mac-turkish
|
|
259
|
+
* Fixed an issue in the save functions that left the possibility for the zip files to not end up closing if the save function created it and then had an exception.
|
|
260
|
+
* Added new property `AttachmentBase.clsid` which returns the listed CLSID value of the data stream/storage of the attachment.
|
|
261
|
+
* Changed internal behavior of `MSGFile.attachments`. This should not cause any noticeable changes to the output.
|
|
262
|
+
* Refactored code significantly to make it more organized.
|
|
263
|
+
* Changed the exports from the main module to only include an important subset of the module. For other items, you'll have to import the submodule that it falls under to access it. Submodules export all important pieces, so it will be easier to find.
|
|
264
|
+
* This includes having many modules be under entirely new paths. Some of these changes have been done with no deprecation, something I generally try to avoid. This is happening at the same time as the public API is significantly changing, which makes it more acceptable.
|
|
265
|
+
* Fixed `__main__` using the wrong enum for error behavior.
|
|
266
|
+
* Fixed `Named.get` being severely out of date (it's not used anywhere by the module which is why it wasn't noticed).
|
|
267
|
+
* Fixed `Named.__getitem__` being entirely case-sensitive.
|
|
268
|
+
* Switched much of the internal code (and the `treePath` property of all classes that have it) to using `weakref.ReferenceType` to avoid hard cyclic references.
|
|
269
|
+
* Fixed `Recipient._getTypedStream` never returning a value.
|
|
270
|
+
* Added additional type hints in various places.
|
|
271
|
+
* Modified tests.py to only run if it is run as a file instead of imported.
|
|
272
|
+
* Changed `knownMsgClass` to a private function since it is explicitly not being exported by any part of the module.
|
|
273
|
+
* Removed unused function `getFullClassName`.
|
|
274
|
+
* Fixes to the HTML body when saving as HTML will no longer require the `preparedHtml`/`--prepared-html` option.
|
|
275
|
+
* Removed unused exceptions.
|
|
276
|
+
* Entirely reorganized the way attachments are initialized, including the class that will be used in various circumstances. Embedded MSG files, custom attachments, and web attachments will all use dedicated classes that are subclasses of `AttachmentBase`.
|
|
277
|
+
* With this change, the way to specify a new `Attachment` class is to override the function used when creating attachments. This can be done by passing `attachmentInit = myFunction` as an option to `openMsg`. This function MUST return an instance of `AttachmentBase`.
|
|
278
|
+
* Added first implementation of web attachments. Saving is not currently possible, but basic relevant property access is now possible. Saving will not be stopped by this attachment if `skipNotImplemented = True` is passed to the save function.
|
|
279
|
+
* Changed the option to suppress `RTFDE` errors to fall under the `ErrorBehavior` enum. Usage of the original option will be allowable, but is being marked as deprecated. However, it is still a dedicated option from the command line.
|
|
280
|
+
* Also fixed the option not properly ignoring some `RTFDE` errors, specifically the ones that it is normal for the module to throw.
|
|
281
|
+
* Removed some constants that are not used by the module.
|
|
282
|
+
* Updated to support `RTFDE` version `0.1.0`. Users encountering random errors from that module should find that those errors have disappeared. If you get errors from it still, bring up the issue on their GitHub.
|
|
283
|
+
* Fixed bug that would cause weird behavior if you gave an empty string as the path for an MSG file.
|
|
284
|
+
* Added support for `IPM.StickyNote`.
|
|
285
|
+
* Fixed an issue that would cause MSG file to never close if an error happened during any of the `__init__` functions for MSG classes.
|
|
286
|
+
* Removed unneeded `chardet` dependency.
|
|
287
|
+
* Removed `Contact.__init__` as it didn't provide any unique behavior.
|
|
288
|
+
* Changed the documentation of `openMsg` to specify that it accepts all options recognized by `MSGFile` subclasses, allowing the doc string to not be modified every time one of them is changed.
|
|
289
|
+
* Changed the documentation of various `__init__` methods to do the same thing.
|
|
290
|
+
* Added `dataType` property to `AttachmentBase` and `SignedAttachment` for checking the class that the data will be, if accessible. Returns `None` if the data is inaccessible, including because accessing it would throw an exception.
|
|
291
|
+
* Added new enum `InsecureFeatures` and option `insecureFeatures`. This option will allow certain features with security implications to be used for files that you trust. Currently the only feature it supports is the usage of `PIL`/`Pillow` to open and modify images. All features like this will be opt-in to reduce possible vulnerabilities.
|
|
292
|
+
* Modified all custom exceptions the module uses to derive from a single base class for better organization.
|
|
293
|
+
* Added new exceptions to handle some of the situations previously handled by base Python exceptions.
|
|
294
|
+
* Changed internal handling of the `prefix` option for `MSGFile.__init__` (and therefore `openMsg`). If you are not setting this manually, you should notice little difference.
|
|
295
|
+
* Made enums less strict and converted all using `fromBits` to be `IntFlag` enums.
|
|
296
|
+
* Fixed `CalendarBase.keywords` being blatantly incorrect (it was so bad I don't know how it slipped through).
|
|
297
|
+
* Fixed `Contact.gender` being blatantly incorrect.
|
|
298
|
+
* Fixed sender not being properly decoded in some circumstances.
|
|
299
|
+
* Changed behavior of `MSGFile` to have `olefile` raise defects of type `DEFECT_INCORRECT` and above instead of just `DEFECT_FATAL`. Uncaught issues of `DEFECT_INCORRECT` can often cause the module to have parsing issues that may be misleading, this just ensures the issue is clarified. This behavior can be reverted back to the previous with `ErrorBehavior.OLE_DEFECT_INCORRECT`.
|
|
300
|
+
* Fixed potential issues that may have made is possible for certain attachments to ignore filename conflict resolution code.
|
|
301
|
+
|
|
302
|
+
**v0.41.5**
|
|
303
|
+
* Fixed an issue from version `0.41.3` where the header being present but missing the `From` field would cause an exception.
|
|
304
|
+
|
|
305
|
+
**v0.41.4**
|
|
306
|
+
* Fixed an issue in the last version that would break the decoding function if the contents were not encoded.
|
|
307
|
+
* Updated `tzlocal` and allow future updates for `compressed_rtf` and `ebcdic`.
|
|
308
|
+
|
|
309
|
+
**v0.41.3**
|
|
310
|
+
* [[TeamMsgExtractor #365](https://github.com/TeamMsgExtractor/msg-extractor/issues/365)] Fixed an issue that would cause certain values retrieved from the header to not be decoded properly. It does this when retrieving the values, so nothing about the header has been changed.
|
|
311
|
+
* Added new property `MessageBase.headerText` which is the text content of the header stream. Adjusted other things to use this instead of trying to retrieve the stream directly in multiple places.
|
|
312
|
+
* Added typing to `MessageBase.header`.
|
|
313
|
+
|
|
314
|
+
**v0.41.2**
|
|
315
|
+
* Updated annotations on `MessageBase.save`.
|
|
316
|
+
* Added new enum `BodyTypes`.
|
|
317
|
+
* Added property `MessageBase.detectedBodies` for detecting what bodies have been stored (not generated by the module) in the .msg file.
|
|
318
|
+
|
|
319
|
+
**v0.41.1**
|
|
320
|
+
* [[TeamMsgExtractor #362](https://github.com/TeamMsgExtractor/msg-extractor/issues/362)] Fixed an issue with the removal of the `--dev` option missing one of the checks (I swear I actually tested it).
|
|
321
|
+
|
|
322
|
+
**v0.41.0**
|
|
323
|
+
* [[TeamMsgExtractor #357](https://github.com/TeamMsgExtractor/msg-extractor/issues/357)] Fixed an issue where the properties stream being absent would raise an error message that was not clear.
|
|
324
|
+
* [[TeamMsgExtractor #357](https://github.com/TeamMsgExtractor/msg-extractor/issues/357)] Added a way to suppress `StandardViolationError` for poorly created files. This may cause issues you might not expect since this exception is meant to stop the processing for a reason.
|
|
325
|
+
* [[TeamMsgExtractor #223](https://github.com/TeamMsgExtractor/msg-extractor/issues/223)] Finally got around to dealing with signed attachments that are embedded MSG files. `SignedAttachment.data` now returns either `bytes` or `MSGFile`. `SignedAttachment` also now has a `asBytes` property that will return the bytes that created the signed attachment, regardless of if it is an MSG or not, making it unnecessary to call `MSGFile.exportBytes` to get the bytes of the embedded MSG file, which can add a small delay to your code. As `Attachment` is a much more complex class, it does *not* (at least yet) have this property. Also unlike `Attachment`, `SignedAttachment` *will not* throw an exception if the data is an MSG file but is not supported. Instead, it will simply be logged as a exception, but the code will continue. If the data is successfully read as an embedded MSG file, the `AttachmentType` will be `AttachmentType.SIGNED_EMBEDDED`.
|
|
326
|
+
* Deprecated `AttachErrorBehavior` in favor of the new `ErrorBehavior` enum which controls the error behavior for the various parts of the MSG file. Uses of the former will work until the next major version.
|
|
327
|
+
* Deprecated the `attachmentErrorBehavior` parameter of `MSGFile` in favor of `errorBehavior`. Uses of the previous will work until the next major version.
|
|
328
|
+
* Added `treePath` property to `SignedAttachment` to bring it more in line with `AttachmentBase`.
|
|
329
|
+
* Fixed bug in rare logging message caused by incorrect type name.
|
|
330
|
+
* Removed the `dev` and `dev_classes` submodules, as most of their features are possible using the base code. Additionally, the classes involved because significantly outdated over time.
|
|
331
|
+
* Removed the `--dev` argument from the command line.
|
|
332
|
+
* Changed the message for the standards violation error when an attachment has no specified attachment type and it could not be determined automatically. The error now specifies the path of the attachment that had an issue for easier debugging. Additionally, the log message for it simply not being present has also been changed to show this information.
|
|
333
|
+
* Added a dev level log that will output the entire properties mapping if the attachment type is not set. Dev level is 5.
|
|
334
|
+
* Fixed a critical error in `Properties` that caused the `__contains__` method to *always* be `False`. This occurred because it was missing a `return` statement. Fortunately, it looks like only one part of the module was affected due to other parts using a properly written function.
|
|
335
|
+
* Removed some debug prints that slipped through.
|
|
336
|
+
* Changed some parts to use `in` for checking that a property exists as opposed to `has_key`. The function was there to act more like Python 2.
|
|
337
|
+
* Deprecated `Properties.has_key`.
|
|
338
|
+
* Removed the `validation` submodule and all related references. It was pretty outdated and has minimal usage at this point in time. It may come back at some later point.
|
|
339
|
+
* Changed behavior of `MessageBase.save` so it doesn't save raw when an exception occurs. This behavior may have ended up creating unexpected output which is why it was removed. It was mainly there for debugging in the first place, but is no longer necessary.
|
|
340
|
+
* Added `__contains__` function to `Named` class.
|
|
341
|
+
* Fixed missing import in `message_base.py` that would only cause problems if something was wrong with the HTML.
|
|
342
|
+
* Fixed a bad error message appearing when trying to add or use an entry in `OleWriter` using an empty path.
|
|
343
|
+
* Changed the `InvalidFileFormatError` for a missing property stream to a `StandardViolationError`.
|
|
344
|
+
* Changed the exception messages for a few exceptions to fix typos and clarify.
|
|
345
|
+
* Fixed issues in `_rtf.tokenize_rtf` which would cause an exception to handle incorrectly and throw an unclear error.
|
|
346
|
+
* Fixed various small bugs caused by typos.
|
|
347
|
+
* Clean up unneeded imports.
|
|
348
|
+
* Improved existing `__all__` entries and added some where they should be.
|
|
349
|
+
* Removed default export of the `UnrecognizedMSGTypeError` exception in favor of exporting the exceptions module.
|
|
350
|
+
* Removed default export of `properHex`.
|
|
351
|
+
* Improved type checking in many places.
|
|
352
|
+
* Fixed issues in `RecurrencePattern`.
|
|
353
|
+
|
|
354
|
+
**v0.40.0**
|
|
355
|
+
* [[TeamMsgExtractor #338](https://github.com/TeamMsgExtractor/msg-extractor/issues/338)] Added new code to handle injection of text into the RTF body. For many cases, this will be much more effective as it relies on ensuring that it is in the main group and past the header before injection. It is *not* currently the first choice as it doesn't have proper respect for encapsulated HTML, however it will replace some of the old methods entirely. Solving this issue was done through the use of a few functions and the internal `_rtf` module. This module in it's entirety is considered to be implementation details, and I give no guarantee that it will remain in it's current state even across patch versions. As such, it is not recommended to use it outside of the module.
|
|
356
|
+
* Changed `MessageBase.rtfEncapInjectableHeader` and `MessageBase.rtfPlainInjectableHeader` from `str` to `bytes`. They always get encoded anyways, so I don't know why I had them returning as `str`.
|
|
357
|
+
* Updated minimum Python version to 3.8 as 3.6 has reached end of support and 3.7 will reach end of support within the year.
|
|
358
|
+
* Updated information in `README`.
|
|
359
|
+
|
|
360
|
+
**v0.39.2**
|
|
361
|
+
* Fixed issues with `AttachmentBase.name` that could cause it to generate wrong.
|
|
362
|
+
* Added convenience function `MSGFile.exportBytes` which returns the exported version from `MSGFile.export` as bytes instead of writing it to a file or file-like object.
|
|
363
|
+
|
|
364
|
+
**v0.39.1**
|
|
365
|
+
* [[TeamMsgExtractor #333](https://github.com/TeamMsgExtractor/msg-extractor/issues/333)] Fixed typo in a warning.
|
|
366
|
+
* [[TeamMsgExtractor #334](https://github.com/TeamMsgExtractor/msg-extractor/issues/334)] Removed `__del__` method from `MSGFile`. It was there for cleanup, but wasn't planned well enough to stop it from causing issues. It may be reintroduced in the future if I can manage to remove the issues.
|
|
367
|
+
* [[TeamMsgExtractor #335](https://github.com/TeamMsgExtractor/msg-extractor/issues/335)] Fixed some parts of `extract_msg.utils.getCommandArgs` having invalid logic after a previous (rather old) update that caused exceptions when using certain options.
|
|
368
|
+
* Added new property `treePath` to `AttachmentBase` and `MSGFile` (which adds it to nearly every class). This property is the path to the current instance, represented as a tuple of instances that would be used to get to the current instance.
|
|
369
|
+
* Added sphinx documentation.
|
|
370
|
+
* Fixed an issue in `OleWriter` that would produce corrupted OLE files if the DIFAT needed more than the header.
|
|
371
|
+
|
|
372
|
+
**v0.39.0**
|
|
373
|
+
* [[TeamMsgExtractor #318](https://github.com/TeamMsgExtractor/msg-extractor/issues/318)] Added code to handle a standards violation (from what I can tell, anyways) caused by the attachment not having an `AttachMethod` property. The code will log a warning, attempt to detect the method, and throw a `StandardViolationError` if it fails.
|
|
374
|
+
* [[TeamMsgExtractor #320](https://github.com/TeamMsgExtractor/msg-extractor/issues/320)] Changed the way string named properties are handled to allow for the string stream to have some errors and still be parsed. Warnings about these errors will be logged.
|
|
375
|
+
* [[TeamMsgExtractor #324](https://github.com/TeamMsgExtractor/msg-extractor/issues/324)] Fixed an issues with contact saving when a list property returns `None`.
|
|
376
|
+
* [[TeamMsgExtractor #326](https://github.com/TeamMsgExtractor/msg-extractor/issues/326)] Fixed a bug that could cause some files to error when exporting.
|
|
377
|
+
* Fixed an issue where creation and modification times were not being copied to the new OLE file created by `OleWriter`.
|
|
378
|
+
* Fixed up a few docstrings.
|
|
379
|
+
* Fixed a few issues in `MSGFile` regarding the `filename` keyword argument.
|
|
380
|
+
* Added new argument `rootPath` to `OleWriter.fromOleFile` for saving a specific directory from an OLE file instead of just copying the entire file. That directory will become the root of the new one.
|
|
381
|
+
* Adjusted code for `OleWriter` to generate certain values *only* at save time to make them more dynamic. This allows for existing streams to be properly edited (although has issues with allowing storages to be edited).
|
|
382
|
+
* Added new function `OleWriter.deleteEntry` to remove an entry that was already added. If the entry is a storage, all children will be removed too.
|
|
383
|
+
* Added new function `OleWriter.editEntry` to edit an entry that was already added.
|
|
384
|
+
* Added new function `OleWriter.addEntry` to add a new entry to the writer without an `OleFileIO` instance. Properties of the entry are instead set using the same keyword arguments as described in `OleWriter.editEntry`.
|
|
385
|
+
* Changed `_DirectoryEntry` to `DirectoryEntry` to make the more finalized version public. Access to the originals that the `OleWriter` class creates should never happen, instead copies should be returned to ensure the behavior is as expected.
|
|
386
|
+
* Added new function `OleWriter.getEntry` which returns a copy of the `DirectoryEntry` instance for that stream or storage in the writer. Use this function to see the current internal state of an entry.
|
|
387
|
+
* Added new function `OleWriter.renameEntry` which allows the user to rename a stream or storage (in place). This only changes it's direct name and not it's location in the new OLE file.
|
|
388
|
+
* Added new function `OleWriter.walk` which is similar to `os.walk` but for walking the structure of the new OLE file.
|
|
389
|
+
* Added new function `OleWriter.listItems` which is functionally equivalent to `olefile.OleFileIO.listdir` which returns a list of paths to every item. Optionally a user can get the paths just for streams, just for storages, or both. Requesting neither will simply return an empty list. Default is to just return streams.
|
|
390
|
+
* Added a small amount of path validation to `inputToMsgPath` which is used in a lot of places where user input for a path is accepted. It ensures illegal characters don't exist and that the path segments (each name for a storage or stream) are less than 32 characters. This will be most helpful for `OleWriter`.
|
|
391
|
+
* Added *many* internal helper functions to `OleWriter` to make extensions easier and consolidate common code. Many of these involve direct access to internal data which is why they are private.
|
|
392
|
+
|
|
393
|
+
**v0.38.4**
|
|
394
|
+
* Fix line in `OleWriter` that was causing exporting to fail.
|
|
395
|
+
* Fixed some issues with the `README`.
|
|
396
|
+
|
|
397
|
+
**v0.38.3**
|
|
398
|
+
* Fixed issues in HTML generation that caused line breaks to be omitted from large sections of the text.
|
|
399
|
+
* Fixed issues with requirements file.
|
|
400
|
+
|
|
401
|
+
**v0.38.2**
|
|
402
|
+
* Fixed new `NameError` accidentally introduced in the previous version.
|
|
403
|
+
|
|
404
|
+
**v0.38.1**
|
|
405
|
+
* Added a `__del__` method to `MSGFile` to ensure a bit of proper cleanup should all references to an `MSGFile` instance be removed before the file is closed. `OleFileIO` doesn't appear to have one, so it's up to us to ensure it is properly closed. Note that the `del` keyword does not guarantee the immediate deletion of the object, and you should take care to close the file yourself. If this is not possible, importing the `gc` module and using it's `collect` method will free the files if your code has no references to them.
|
|
406
|
+
* Fixed an import issue with signed messages.
|
|
407
|
+
|
|
408
|
+
**v0.38.0**
|
|
409
|
+
* [[TeamMsgExtractor #117](https://github.com/TeamMsgExtractor/msg-extractor/issues/117)] Added class `OleWriter` to allow the writing of OLE files, which allows for embedded MSG files to be extracted.
|
|
410
|
+
* Added function `MSGFile.export` which copies all streams and storages from an MSG file into a new file. This can "clone" an MSG file or be used for extracting an MSG file that is embedded inside of another.
|
|
411
|
+
* Added hidden function to `MSGFile` for getting the `OleDirectoryEntry` for a storage or stream. This is mainly for use by the `OleWriter` class.
|
|
412
|
+
* Added option `extractEmbedded` to `Attachment.save` (`--extract-embedded` on the command line) which causes embedded MSG files to be extracted instead of running their save methods.
|
|
413
|
+
* Fixed minor issues with `utils.inputToMsgPath` (renamed from `utils.inputToMsgPath`).
|
|
414
|
+
* Renamed `utils.msgpathToString` to `utils.msgPathToString`.
|
|
415
|
+
* Made some of the module requirements a little more strict to better version control. I'll be trying to make periodic checks for updates to the dependency packages and make sure that new versions are compatible before changing the allowed versions, while also trying to keep the requirements a bit flexible.
|
|
416
|
+
|
|
417
|
+
**v0.37.1**
|
|
418
|
+
* Added option to save function (including `MSGFile.saveAttachments`) to skip any attachments marked as hidden. This can also be done from the command line with `--skip-hidden`.
|
|
419
|
+
* Fixed an issue that could cause an `MSGFile` to be included in the attachment names instead of just strings.
|
|
420
|
+
* Fixed up several comments.
|
|
421
|
+
* Fixed bug that would cause spaces at the end of the subject or filename to break the module.
|
|
422
|
+
|
|
423
|
+
**v0.37.0**
|
|
424
|
+
* [[TeamMsgExtractor #303](https://github.com/TeamMsgExtractor/msg-extractor/issues/303)] Renamed internal variable that wasn't changed when the other instances or it were renamed.
|
|
425
|
+
* [[TeamMsgExtractor #302](https://github.com/TeamMsgExtractor/msg-extractor/issues/302)] Fixed properties missing (a fatal MSG error) raising an unclear exception. It now uses `InvalidFileFormatError`.
|
|
426
|
+
* Updated `README` to contain documentation on command line option added in previous version.
|
|
427
|
+
* Removed `MSGFile.mainProperties` after deprecating it in v0.36.0.
|
|
428
|
+
* Added new `Properties` `Intelligence` type: `ERROR`. This type is used when a properties instance is created but has something wrong with it that is not necessarily fatal. Currently the only thing that will cause it is the properties stream being 0 bytes.
|
|
429
|
+
|
|
430
|
+
**v0.36.5**
|
|
431
|
+
* Documented and exposed to the command line the ability to save the headers to it's own file when saving the msg file. Thanks to martin-mueller-cemas on GitHub for fixing this (and telling me I can switch the branch a pull request points to). I don't know when I added the code to allow the user to do it, but somehow it was never documented and never exposed to the command line.
|
|
432
|
+
|
|
433
|
+
**v0.36.4**
|
|
434
|
+
* [[TeamMsgExtractor #291](https://github.com/TeamMsgExtractor/msg-extractor/issues/291)] Fixed typo in `MSGFile.saveRaw` that may have existed for a significant amount of time. It was using the wrong function (same name, but with different capitalization) but was hidden until `MSGFile` stopped being derived from `OleFileIO`.
|
|
435
|
+
* Added logging code to `MessageBase.getSavePdfBody` to log the list that is going to be used to run `wkhtmltopdf`. This is mainly for debugging purposes, to allow users to potentially see why their arguments may be failing.
|
|
436
|
+
* Updating funding information on GitHub and the `README` with more ways to support the module's development.
|
|
437
|
+
* Fixed one of the exceptions in `MessageBase.getSavePdfBody` not using an fstring which caused it to omit information.
|
|
438
|
+
* Changed the way `wkhtmltopdf` is called to patch a possible security vulnerability. This also seems to have fixed [[TeamMsgExtractor #291](https://github.com/TeamMsgExtractor/msg-extractor/issues/291)].
|
|
439
|
+
|
|
440
|
+
**v0.36.3**
|
|
441
|
+
* Added an option to skip the body if it could not be found, rather than throwing an error. This will cause no file to be made for it in the event no valid body exists. For the save functions, this option is `skipBodyNotFound` and from the command line the option is `--skip-body-not-found`.
|
|
442
|
+
* Fixed a bug that caused contacts to save the business phone with two colons instead of 1.
|
|
443
|
+
|
|
444
|
+
**v0.36.2**
|
|
445
|
+
* [[TeamMsgExtractor #286](https://github.com/TeamMsgExtractor/msg-extractor/issues/286)] Fix missing import.
|
|
446
|
+
|
|
447
|
+
**v0.36.1**
|
|
448
|
+
* [[TeamMsgExtractor #283](https://github.com/TeamMsgExtractor/msg-extractor/issues/283)] Added file for typing recognition.
|
|
449
|
+
* Added new option to allow messages with `NotImplementedError` attachments to at least save everything not related to them. From the command line this would be `--skip-not-implemented` or `--skip-ni`. From the save function, this would be the `skipNotImplemented` option.
|
|
450
|
+
|
|
451
|
+
**v0.36.0**
|
|
452
|
+
* Improved type hints to tell when a function may not return anything.
|
|
453
|
+
* Added support for the `reportTag` property to `MessageBase`. I noticed this was one of the properties for `IPM.Outlook.Recall` so I decided to implement it. I'll work on ensuring all of `[MS-OXOMSG]` and `[MS-OXCMSG]` are implemented at a later date, including splitting off `REPORT` into it's own class, because it is it's own class.
|
|
454
|
+
* Fixed a few minor issues in some properties. Mostly some `bool` returning properties should have been returning False when they were not found instead of None. Ones that may return None are specifically typed as optional in the source code. Unfortunately using the `help` command doesn't seem to show the return type for properties for me at least on Python 3.9 and below.
|
|
455
|
+
* Fixed `Attachment.save` returning a `pathlib.Path` object instead of a `str` after the conversion to `pathlib`.
|
|
456
|
+
* Added code to allow `pathlib` objects in `utils.openMsgBulk`. It uses `glob.glob` which *cannot* take a `pathlib` object.
|
|
457
|
+
* Removed `PermanentEntryID` from `EntryID.autoCreate`. It shares a provider ID with `AddressBookEntryID`, and as such would never generate from it anyways. If you specifically need a `PermanentEntryID` you will have to instantiate it manually. Additionally, the entry has been removed from `enums.EntryIDType`.
|
|
458
|
+
* Fixed the GUIDs for some of the EntryID structures being returned as bytes instead of a standard GUID string. This is considered a breaking change and is the reason for the full version increase.
|
|
459
|
+
* Improved consistency of properties (the Python kind, not the MSG kind) so that properties for the raw data used to create an instance will all use the same name. Not all classes have this, but the ones that do will now all use `rawData` as the property name.
|
|
460
|
+
* Fixed the properties header being read in a way that actually swapped the values in it.
|
|
461
|
+
* Modified `MSGFile` to use the same name for Properties instances as all other classes. `MSGFile.mainProperties` will currently raise a `DeprecationWarning` instead of outright failing to help ease the transition. Use `MSGFile.props` instead.
|
|
462
|
+
|
|
463
|
+
**v0.35.3**
|
|
464
|
+
* [[TeamMsgExtractor #280](https://github.com/TeamMsgExtractor/msg-extractor/issues/280)] Fix typing issue in `message_base.py`.
|
|
465
|
+
|
|
466
|
+
**v0.35.2**
|
|
467
|
+
* Made a change to the argument handling for `--no-folders`. Since it requires `--attachmentsOnly` to work, I simply made it error when it's not given to avoid confusion.
|
|
468
|
+
* Updated README.
|
|
469
|
+
* Added `-v` to be used instead of `--verbose`. This allows you to do `-vvv` for verbosity level 3.
|
|
470
|
+
|
|
471
|
+
**v0.35.1**
|
|
472
|
+
* Fixed a few property conflicts that I missed in the last release (forgot to run the helper script before releasing).
|
|
473
|
+
|
|
474
|
+
**v0.35.0**
|
|
475
|
+
* [[TeamMsgExtractor #206](https://github.com/TeamMsgExtractor/msg-extractor/issues/206)] Implemented full support for Post objects, including the ability to save them.
|
|
476
|
+
* [[TeamMsgExtractor #212](https://github.com/TeamMsgExtractor/msg-extractor/issues/212)] Implemented full support for Task objects, including the ability to save them. This also includes TaskRequest objects.
|
|
477
|
+
* [[TeamMsgExtractor #110](https://github.com/TeamMsgExtractor/msg-extractor/issues/110)] Implemented full support for Contact objects, including the ability to save them.
|
|
478
|
+
* [[TeamMsgExtractor #143](https://github.com/TeamMsgExtractor/msg-extractor/issues/143)] Rewrote the system used for `Appointment` objects to include all of the objects specified in [MS-OXOCAL]. Name changed to `AppointmentMeeting`. Completed support for Appointment objects, including the ability to save them.
|
|
479
|
+
* [[TeamMsgExtractor #243](https://github.com/TeamMsgExtractor/msg-extractor/issues/256)] Added optional dependency `mimetype-magic` (installable using the `mime` extra) which helps to identify attachments that do not give a mime-type.
|
|
480
|
+
* [[TeamMsgExtractor #274](https://github.com/TeamMsgExtractor/msg-extractor/issues/274)] Apparently the properties stream can have random garbage at the end of it (outlook generate the file that showed this) so code was added to ensure it wouldn't break everything.
|
|
481
|
+
* [[TeamMsgExtractor #274](https://github.com/TeamMsgExtractor/msg-extractor/issues/274)] Made sure that the save function would report if it failed to find or generate a valid body. Specifically, if you were just trying to use the plain text body but it didn't exist (the stream didn't exist, not that the stream was empty) it would silently pass, which was bad behavior. Additionally, `allowFallback` will change the message to specify that current options were not usable for getting a valid body.
|
|
482
|
+
* [[TeamMsgExtractor #207](https://github.com/TeamMsgExtractor/msg-extractor/issues/207)] Changed behavior for max date. Apparently it looks like it is supposed to be August 31, 4500 at 11:59 PM. However, in case this needs to change, we have created a constant called `extract_msg.constants.NULL_DATE` to represent this that you can use in your code to not have to worry about changing your code if we check it.
|
|
483
|
+
* Moved a few more minor constants to `enums`.
|
|
484
|
+
* Added support for many internal data structures, specifically Entry ID structures.
|
|
485
|
+
* Refactored classes from `extract_msg.data` to submodule `extract_msg.structures`.
|
|
486
|
+
* Added `python_requires` to setup.py as I noticed that it was missing.
|
|
487
|
+
* Due to new saving requirements, adjusted the way header injection worked all around. Functions are now built-in to `MessageBase`. `getSaveXBody` functions have also been moved down to be defined in `MessageBase`. If the extension class needs to specify custom behaviors for creating the save bodies, these functions will need to be overridden.
|
|
488
|
+
* For saving, `MessageBase` (being the lowest one to currently contain bodies) has a few new properties. These properties represent the injection strings that will be injected into the bodies for the header, with an additional property to specify what properties map to what part of the format string. See `MessageBase.headerFormatProperties` for more information and an example of how to implement this in your own class.
|
|
489
|
+
* Injection strings in constants have been removed in favor of dynamic generation, which only creates what is needed. No you will no longer see an empty Bcc field in your messages when you save them.
|
|
490
|
+
* Plain text bodies now also use this injection, making it easy to change the header in all bodies by overwriting a single property that tells the program what data to put where.
|
|
491
|
+
* Fixed issue in encapsulated RTF header that caused the "To" field to not be present. I had to write them by hand, so it was bound to happen. They are now dynamically generated by each instance, so these fields should always appear.
|
|
492
|
+
* All save code has been moved down from `Message` into `MessageBase` for convenience. `Message` exists now for specific checking and for future specializations. This also means that anything that is a `MessageBase` now has the entire framework for saving built-in, with easy way to change details.
|
|
493
|
+
* Fixed bad property in `Contact`.
|
|
494
|
+
* Created save function for `Contact`. Saving, though it exists, is rather minimal and is limited to plain text and HTML.
|
|
495
|
+
* Significantly extended the `Contact` class's properties.
|
|
496
|
+
* Adjusted the naming of a few `Contact` properties to better match the microsoft names.
|
|
497
|
+
* `firstName` -> `givenName`.
|
|
498
|
+
* `lastName` -> `surname`.
|
|
499
|
+
* `businessPhone` -> `businessTelephoneNumber`
|
|
500
|
+
* Etc.
|
|
501
|
+
* Changed existing fax properties to give a dictionary of the properties they actually contain rather than just the number. This makes them behave like the newly added email properties.
|
|
502
|
+
* Fixed issues with `Task` properties being incorrect.
|
|
503
|
+
* Added implementation for PtypErrorCode.
|
|
504
|
+
* Changed behavior of `Properties.date` to *only* return the submit time. This is to ensure messages that were never sent do not have a sent date.
|
|
505
|
+
* Changed behavior of `MessageBase.date` to only return a send date if the message has been sent. For messages with no flags, it assumes `True`.
|
|
506
|
+
* Generally brought saving behavior closer to the way outlook handles it.
|
|
507
|
+
* Made `SignedAttachment` and `BaseAttachment` more similar by adding properties to each that are shared. `BaseAttachment` now have a `name` property and `SignedAttachment` now have `longFilename` and `shortFilename`.
|
|
508
|
+
* Fixed issue in HTML saving that would cause some characters to be dropped when rendering them due to how the header injection worked.
|
|
509
|
+
* Removed `__init__` methods from MSG classes that don't change it. This ensures notes are easily passed down.
|
|
510
|
+
* Correction to last comment, *one* max date was supposed to be at that date, but another max date is at a different date of the same year.
|
|
511
|
+
* Changed the way that `PtypTime` is handled, making it a single function in `utils`.
|
|
512
|
+
* Upgraded dependencies to newer versions (some really need to be newer, like `tzlocal`, for best results). Included dependencies are `beautifulsoup4` and `tzlocal`.
|
|
513
|
+
* Fixed an issue where zip file naming conflicts *always* failed in zip files for attachments. Both the embedded msg and the plain attachments would fail.
|
|
514
|
+
* *Actually* fixed the issue that would break the main loop.
|
|
515
|
+
* MSGFile no longer inherits directly from `OleFileIO`. While I would prefer to do that, the `__init__` method for it is rather expensive, and allowing embedded msg files to directly share each other's instances of `OleFileIO` would improve speed immensely.
|
|
516
|
+
* Fixed attachments not being preemptively loaded when `delayAttachments` was `False`.
|
|
517
|
+
* `utils.openMsg` now delays attachments while loading the file to get the class type. This means all time for attachments is cut in half as they are only ever loaded once. It also means that files that won't open due to attachments will error a little later, but this shouldn't be a problem.
|
|
518
|
+
* Changed named properties `Guid` back to constants. This has to do with the next entry.
|
|
519
|
+
* Fixed a major issue in named properties. Apparently the ID is not enough and you *must* have the GUID as well, as multiple properties can share the exact same ID.
|
|
520
|
+
* Added option `--no-folders` to the command line allowing you to save all attachments from a set of MSG files into a single folder.
|
|
521
|
+
* Added option `--skip-embedded` to the command line to skip saving embedded MSG files.
|
|
522
|
+
* Added option `skipEmbedded` to `Attachment.save` (and all other related save methods that call it) to skip saving an embedded MSG file.
|
|
523
|
+
* Changed `__main__` so that it opens the zip file there instead of relying on everything it calls to do it again and again.
|
|
524
|
+
* Changed the behavior of `--verbose` to allow it to be stacked for more verbosity. Specifying it once turns on warnings, twice for info, and three times for debug. Not specifying it only turns on error logging.
|
|
525
|
+
|
|
526
|
+
**v0.34.3**
|
|
527
|
+
* Fixed issue that may have caused other olefile types to raise the wrong type of error when passed to `openMsg`.
|
|
528
|
+
* Fixed issues with changelog format.
|
|
529
|
+
* Fixed issue that caused progress to sometimes break the main loop when a file had Unicode characters if the console it was writing to didn't support them.
|
|
530
|
+
* Added option to `MessageBase` (and subsequently `openMsg`) that allows you to override the code being used for deencapsulation. See `MessageBase.__init__` for details on how to create an override function.
|
|
531
|
+
* Added additional msg class types that I found to the list of known class types.
|
|
532
|
+
|
|
533
|
+
**v0.34.2**
|
|
534
|
+
* [[TeamMsgExtractor #267](https://github.com/TeamMsgExtractor/msg-extractor/issues/267)] Fixed issue that caused signed messages that were .eml files to have their data field *not* be a bytes instance. This field will now *always* be bytes. If a problem making it bytes occurs, an exception will be raised to give you brief details.
|
|
535
|
+
* Added function `utils.unwrapMultipart` that takes a multipart message and acquires a plain text body, an HTML body, and a list of attachments from it. These attachments are returned as `dict`s that can easily be converted to `SignedAttachment`s. It replaces the logic `mailbits` was being used for, and as such `mailbits` is no longer required. The module may be reintroduced in the future.
|
|
536
|
+
* Added new property `emailMessage` to `SignedAttachment`, which returns the email `Message` instance used to get data for the attachment.
|
|
537
|
+
|
|
538
|
+
**v0.34.1**
|
|
539
|
+
* Added convenience function `utils.openMsgBulk` (imported to `extract_msg` namespace) for opening message paths with wildcards. Allows you to open several messages with one function, returning a list of the opened messages.
|
|
540
|
+
* Added convenience function `utils.unwrapMsg` which recurses through an `MSGFile` and it's attachments, creating a series of linear structures stored in a dictionary. Useful for analyzing, saving, etc. all messages and attachments down through the structure without having to recurse yourself.
|
|
541
|
+
* Fixed an issue that would cause signed attachments to not properly generate.
|
|
542
|
+
|
|
543
|
+
**v0.34.0**
|
|
544
|
+
* [[TeamMsgExtractor #102](https://github.com/TeamMsgExtractor/msg-extractor/issues/102)] Added the option to directly save body to pdf. This requires that you either have `wkhtmltopdf` on your path or that you provide a path directly to it in order to work. Simply pass `pdf = True` to save to turn it on. More details in the doc for the save function. You can also do this from the command line using the `--pdf` option, incompatible with other body types.
|
|
545
|
+
* Added `--glob` option for allowing you to provide an msg path that will evaluate wildcards.
|
|
546
|
+
* Removed per-file output names as they weren't actually functional and currently add too much complexity. If anyone knows a way to handle it directly with `argparse` let me know.
|
|
547
|
+
* Added `chardet` as a requirement to help work around an error in `RTFDE`.
|
|
548
|
+
* Looking into some of the unsupported encodings revealed at least one to be supported, but was missed due to the name not being registered as an alias.
|
|
549
|
+
* Fixed a bug that prevented an HTML body from the plain text body when it couldn't be generated any other way. This happened when the RTF body existed and the plain text body existed, but the RTF body was not encapsulated HTML.
|
|
550
|
+
* Due to several of the issues with RTFDE preventing saving due to exceptions, the option `ignoreRtfDeErrors` has been added to the `MessageBase` class and `openMsg`. It can also be enabled from the command line with `--ignore-rtfde`. This option will make it so all exceptions will be silenced from the module.
|
|
551
|
+
|
|
552
|
+
**v0.33.0**
|
|
553
|
+
* [[TeamMsgExtractor #212](https://github.com/TeamMsgExtractor/msg-extractor/issues/212)] Added support for Task objects.
|
|
554
|
+
* Added additional parameter `overrideClass` to all `_ensureSetX` type functions. This parameter is a class to initialize using the data, if provided. The data will be provided as the first argument to the `__init__` function of the class *if* the data is not `None`. If the data is done, the value set and returned from `_ensureSetX` will be `None`. This can be overridden using the second added parameter, which defaults to this behavior. Simply set `preserveNone` to `False` to force the data to be passed to the class. Keep in mind that this means the class will receive `None` as it's first parameter.
|
|
555
|
+
* Updated `Named` class to make it more like the dictionary it is build on top of. Specifically, added `keys`, `values`, and `items` as functions.
|
|
556
|
+
* Fixed issue in `Named` where old code wasn't deleted, causing some named properties to be completely omitted.
|
|
557
|
+
* Improved efficiency of `Named` by making it so `get` no longer copied the entire dictionary repeatedly while looking for the property.
|
|
558
|
+
* Fixed typo in `Attachment` that caused embedded msg files to still regenerate the `Named` instance even though they should have been using the parent's.
|
|
559
|
+
* Updated fields in `MSGFile` to use enums.
|
|
560
|
+
* Added additional properties to `MSGFile`.
|
|
561
|
+
* Significant cleanup.
|
|
562
|
+
|
|
563
|
+
**v0.32.0**
|
|
564
|
+
* [[TeamMsgExtractor #217](https://github.com/TeamMsgExtractor/msg-extractor/issues/217)] Redesigned named properties to be much more efficient. All in all, load times for MSG files are significantly improved all around.
|
|
565
|
+
* Named properties load dynamically.
|
|
566
|
+
* Named properties use a single shared instance for embedded msg files to contain all of the entries, and tiny individual instances for actually accessing based on what is accessing.
|
|
567
|
+
* `Named` has been updated so it's methods are more standardized.
|
|
568
|
+
* `Named` is no longer usable to directly access property values. Instead,
|
|
569
|
+
access to them is done through `NamedProperties`.
|
|
570
|
+
* `_registerNamedProperty` has been removed due to no longer being part of the named properties framework.
|
|
571
|
+
* Actually removed the exception I meant to remove in 0.31.0.
|
|
572
|
+
* Changed `Attachment.type` to an enum instead of a string. This makes it easier to see all of the possible values.
|
|
573
|
+
* Added option to allow attachment saving to be skipped when calling `Message.save`.
|
|
574
|
+
* Added `type` property to all attachment types. `AttachmentBase` uses `AttachmentType.UNKNOWN`, `BrokenAttachment` uses `AttachmentType.BROKEN`, and `UnsupportedAttachment` uses `AttachmentType.UNSUPPORTED`.
|
|
575
|
+
|
|
576
|
+
**v0.31.1**
|
|
577
|
+
* Updated signed attachment mimetype property from `mime` to `mimetype` to match with the regular attachment property.
|
|
578
|
+
|
|
579
|
+
**v0.31.0**
|
|
580
|
+
* [[TeamMsgExtractor #223](https://github.com/TeamMsgExtractor/msg-extractor/issues/223)] First implementation of support for signed messages.
|
|
581
|
+
* [[TeamMsgExtractor #256](https://github.com/TeamMsgExtractor/msg-extractor/issues/256)] Extended the properties of the attachment class to allow for access to more data.
|
|
582
|
+
* Fixed some issues with the contact class (some of the code was left unfinished).
|
|
583
|
+
* Converted many arguments for msg files to keyword arguments (`**kwargs`). This is a breaking change if your code provides anything except the path to the msg file. This will, however, make it easier to add arguments without the function signature being polluted with numerous arguments.
|
|
584
|
+
* Updated exception blocks to ensure they would only catch exceptions that are instances of Exception or a child of Exception. A few were missing this check and so might have caught unwanted exceptions.
|
|
585
|
+
* Shifted some minor parts down towards the `AttachmentBase` class where possible to allow more usability with broken and unsupported attachments. Nothing about these properties required the attachment to be fully processed, which is why they were moved down. From the perspective of using the `Attachment` class nothing has changed. The following properties have been moved: `attachmentEncoding`, `additionalInformation`, `cid`/`contentId`, `longFilename`, `renderingPosition`, and `shortFilename`.
|
|
586
|
+
* Added link to readme for supporting development.
|
|
587
|
+
* Finally found the behavior to use for missing encoding. As such, `MissingEncodingError` is being removed from the module entirely, as it is no longer a thing.
|
|
588
|
+
* Moved many constant sets to enums. This makes things a lot more organized.
|
|
589
|
+
|
|
590
|
+
**v0.30.14**
|
|
591
|
+
* Fixed major bug in `MSGFile.listDir` that would cause it to give the wrong data due to caching. I forgot to have it cache a different result for each set of options, so it would always give the same result regardless of options after the first access.
|
|
592
|
+
* Minor updates to `setup.py`.
|
|
593
|
+
* Fixed URLs in `README`.
|
|
594
|
+
|
|
595
|
+
**v0.30.13**
|
|
596
|
+
* [[TeamMsgExtractor #257](https://github.com/TeamMsgExtractor/msg-extractor/issues/257)] Fixed missing documentation for `customPath` keyword argument to `Attachment.save`.
|
|
597
|
+
|
|
598
|
+
**v0.30.12**
|
|
599
|
+
* [[TeamMsgExtractor #253](https://github.com/TeamMsgExtractor/msg-extractor/issues/253)] Fixed various docstring issues.
|
|
600
|
+
|
|
601
|
+
**v0.30.11**
|
|
602
|
+
* [[TeamMsgExtractor #249](https://github.com/TeamMsgExtractor/msg-extractor/issues/249)] Fixed an error with opening the body causing the file to throw an uncaught exception in the `__init__` function of `MessageBase`. The error may still come up later, but you will still have general access to the instance.
|
|
603
|
+
* Fixed an issue with part of the command line documentation.
|
|
604
|
+
|
|
605
|
+
**v0.30.10**
|
|
606
|
+
* [[TeamMsgExtractor #249](https://github.com/TeamMsgExtractor/msg-extractor/issues/249)] Fixed exception catching not properly accessing the exception (forgot to go through one of the submodules to access exception).
|
|
607
|
+
* Updated docstring for `MessageBase.deencapsulatedRtf`.
|
|
608
|
+
|
|
609
|
+
**v0.30.9**
|
|
610
|
+
* Fixed the behavior of `Properties.get` so it actually behaves like a `dict` (that was the intent of it, but I did it the wrong way for some reason).
|
|
611
|
+
* Fixed a type that caused an exception when no HTML body could be found nor generated.
|
|
612
|
+
|
|
613
|
+
**v0.30.8**
|
|
614
|
+
* Update `imapclient` requirement to `>=2.1.0` instead of `==2.1.0`. Currently there are no changes that would prevent current future versions from working.
|
|
615
|
+
|
|
616
|
+
**v0.30.7**
|
|
617
|
+
* [[TeamMsgExtractor #239](https://github.com/TeamMsgExtractor/msg-extractor/issues/239)] Fixed msg.py not having `import pathlib`.
|
|
618
|
+
* After going through the details of the example MSG files provided with the module, specifically unicode.msg, I now am glad I decided to put in some fail-safes in the HTML body processing. One of them does not have an `<html>`, `<head>`, nor `<body>` tag, and so would have had an error. This will actually prevent the header from injecting properly as well, so a bit of validation before was made necessary to ensure the HTML saving would still work.
|
|
619
|
+
* Added new exception `BadHtmlError`.
|
|
620
|
+
* Added new function `utils.validateHtml`.
|
|
621
|
+
* Updated README credits.
|
|
622
|
+
* Changed header logic to generate manually if the header data has been stripped (filled with null bytes) and not just if the stream does not exist.
|
|
623
|
+
|
|
624
|
+
**v0.30.6**
|
|
625
|
+
* Small adjustments to internal code to make it a bit better.
|
|
626
|
+
* Added `Message.getSaveBody`, `Message.getSaveHtmlBody`, and `Message.getSaveRtfBody`. These three functions generate their respective bodies that will be used when saving the file, allowing you to retrieve the final products without having to write them to the disk first. All arguments that are passed to `Message.save` that would influence the respective bodies are passed to their respective functions.
|
|
627
|
+
* I thought I added the documentation for `attachmentsOnly` to `Message.save` but apparently it was missing. Not sure what happened there but I made sure it was added this time.
|
|
628
|
+
* Added new option to `Message.save` called `charset`. This is used in the preparation of the HTML body when using `preparedHtml`. This is also usable with `--charset CHARSET` from the command line.
|
|
629
|
+
|
|
630
|
+
**v0.30.5**
|
|
631
|
+
* [[TeamMsgExtractor #225](https://github.com/TeamMsgExtractor/msg-extractor/issues/225)] Added the ability to generate the HTML body from the RTF body if it is encapsulated HTML. If there is no RTF body, then it will do a very basic generation from the plain text body. This process is automatically performed if the HTML body is missing.
|
|
632
|
+
* Added the ability for the plain text body to sometimes generate from the RTF body if the plain text body does not exist.
|
|
633
|
+
* Added documentation to `Message.save` for the `attachmentsOnly` option.
|
|
634
|
+
|
|
635
|
+
**v0.30.4**
|
|
636
|
+
* [[TeamMsgExtractor #233](https://github.com/TeamMsgExtractor/msg-extractor/issues/233)] Added option to `Message.save` to only save the attachments (`attachmentsOnly`). This can also be used from the command line with the option `--attachments-only`.
|
|
637
|
+
* Corrected error string for incompatible options in `Message.save`.
|
|
638
|
+
* Fixed if blocks being nested weirdly in `Message.save` instead of being chained with `elif`. Probably an artifact left from adding support for HTML and RTF.
|
|
639
|
+
|
|
640
|
+
**v0.30.3**
|
|
641
|
+
* [[TeamMsgExtractor #232](https://github.com/TeamMsgExtractor/msg-extractor/issues/232)] Updated list of known MSG class types so the module would correctly give `UnsupportedMSGTypeError` instead of `UnrecognizedMSGTypeError`.
|
|
642
|
+
|
|
643
|
+
**v0.30.2**
|
|
644
|
+
* Fixed typo in `utils.knownMsgClass`.
|
|
645
|
+
* Updated contributing guidelines and pull request template. Pull requests were updated to match the new structure of the module while the guidelines were updated for clarity.
|
|
646
|
+
|
|
647
|
+
**v0.30.1**
|
|
648
|
+
* [[TeamMsgExtractor #102](https://github.com/TeamMsgExtractor/msg-extractor/issues/102)] Added property `MessageBase.htmlBodyPrepared` which provides the HTML body that has been prepared for actual use or conversion to PDF. All attachments that can be injected into the body directly will be injected.
|
|
649
|
+
* Corrected a mistake in the documentation of `Message.save`.
|
|
650
|
+
* Fixed issue where the command line parser was not checking for raw in conjunction with other saving options.
|
|
651
|
+
* Changed `utils.setupLogging` to use `pathlib`.
|
|
652
|
+
* Improved reliability of the logic in `utils.setupLogging`.
|
|
653
|
+
* Removed function `utils.getContFileDir`.
|
|
654
|
+
* Cleaned up plain `Exception` being raised at the end of `utils.injectRtfHeader` if the injection failed. This now raises `RuntimeError`, an error that should be reported so the injection system can be improved.
|
|
655
|
+
* Added parsing for PtypServerId to `utils.parseType`.
|
|
656
|
+
* Added `FolderID`, `MessageID`, and `ServerID` to `data`.
|
|
657
|
+
* Added zip output to the command line.
|
|
658
|
+
* Added support for PtypMultipleFloatingTime to `utils.parseType`.
|
|
659
|
+
* Improved documentation of many functions with the exceptions they may raise.
|
|
660
|
+
* Changed the way zip files are handled so that files written to them actually have a modification date now.
|
|
661
|
+
|
|
662
|
+
**v0.30.0**
|
|
663
|
+
* Removed all support for Python 2. This caused a lot of things to be moved around and changed from indirect references to direct references, so it's possible something fell through the cracks. I'm doing my best to test it, but let me know if you have an issue.
|
|
664
|
+
* Changed classes to now prefer `super()` over direct superclass initialization.
|
|
665
|
+
* Removed explicit object subclassing (it's implicit in Python 3 so we don't need it anymore).
|
|
666
|
+
* Converted most `.format`s into f strings.
|
|
667
|
+
* Improved consistency of docstrings. It's not perfect, but it should at least be better.
|
|
668
|
+
* Started the addition of type hints to functions and methods.
|
|
669
|
+
* Updated `utils.bytesToGuid` to make it faster and more efficient.
|
|
670
|
+
* Renamed `utils.msgEpoch` to `utils.filetimeToUtc` to be more descriptive.
|
|
671
|
+
* Updated internal variable names to be more consistent.
|
|
672
|
+
* Improvements to the way `__main__` works. This does not affect the output it will generate, only the efficiency and readability.
|
|
673
|
+
|
|
674
|
+
**v0.29.3**
|
|
675
|
+
* [[TeamMsgExtractor #226](https://github.com/TeamMsgExtractor/msg-extractor/issues/198)] Fix typo in command parsing that prevented the usage of `allowFallback`.
|
|
676
|
+
* Fixed main still manually navigating to a new directory with `os.chdir` instead of using `customPath`.
|
|
677
|
+
* Fixed issue in main where the `--html` option was being using for both html *and* rtf. This meant if you wanted rtf it would not have used it, and if you wanted html it would have thrown an error.
|
|
678
|
+
* Fixed `--out-name` having no effect.
|
|
679
|
+
* Fixed `--out` having no effect.
|
|
680
|
+
|
|
681
|
+
**v0.29.2**
|
|
682
|
+
* Fixed issue where the RTF injection was accidentally doing HTML escapes for non-encapsulated streams and *not* doing escapes for encapsulated streams.
|
|
683
|
+
* Fixed name error in `Message.save` causing bad logic. For context, the internal variable `zip` was renamed to `_zip` to avoid a name conflict with the built-in function. Some instances of it were missed.
|
|
684
|
+
|
|
685
|
+
**v0.29.1**
|
|
686
|
+
* [[TeamMsgExtractor #198](https://github.com/TeamMsgExtractor/msg-extractor/issues/198)] Added a feature to save the header in it's own file (prefers the full raw header if it can find it, otherwise puts in a generated one) that was actually supposed to be in v0.29.0 but I forgot, lol.
|
|
687
|
+
|
|
688
|
+
**v0.29.0**
|
|
689
|
+
* [[TeamMsgExtractor #207](https://github.com/TeamMsgExtractor/msg-extractor/issues/207)] Made it so that unspecified dates are handled properly. For clarification, an unspecified date is a custom value in MSG files for dates that means that the date is unspecified. It is distinctly different from a property not existing, which will still return None. For unspecified dates, `datetime.datetime.max` is returned. While perhaps not the best solution, it will have to do for now.
|
|
690
|
+
* Fixed an issue where `utils.parseType` was returning a string for the date when it makes more sense to return an actual datetime instance.
|
|
691
|
+
* [[TeamMsgExtractor #165](https://github.com/TeamMsgExtractor/msg-extractor/issues/165)] [[TeamMsgExtractor #191](https://github.com/TeamMsgExtractor/msg-extractor/issues/191)] Completely redesigned all existing save functions. You can now properly save to custom locations under custom file names. This change may break existing code for several reasons. First, all arguments have been changed to keyword arguments. Second, a few keyword arguments have been renamed to better fit the naming conventions.
|
|
692
|
+
* [[TeamMsgExtractor #200](https://github.com/TeamMsgExtractor/msg-extractor/issues/200)] Changed imports to use relative imports instead of hard imports where applicable.
|
|
693
|
+
* Updated the save functions to no longer rely on the current working directory to save things. The module now does what it can to use hard pathing so that if you spontaneously change working directory it will not cause problems. This should also allow for saving to be threaded, if I am correct.
|
|
694
|
+
* [[TeamMsgExtractor #197](https://github.com/TeamMsgExtractor/msg-extractor/issues/197)] Added new property `Message.defaultFolderName`. This property returns the default name to be used for a Message if none of the options change the name.
|
|
695
|
+
* [[TeamMsgExtractor #201](https://github.com/TeamMsgExtractor/msg-extractor/issues/201)] Fixed an issue where if the class type was all caps it would not be recognized. According to the documentation the comparisons should have been case insensitive, but I must have misread it at some point.
|
|
696
|
+
* [[TeamMsgExtractor #202](https://github.com/TeamMsgExtractor/msg-extractor/issues/202)] Module will now handle path lengths in a semi-intelligent way to determine how best to save the MSG files. Default path length max is 255.
|
|
697
|
+
* [[TeamMsgExtractor #203](https://github.com/TeamMsgExtractor/msg-extractor/issues/203)] Fixed an issue where having multiple "." characters in your file name would cause the directories to be incorrectly named when using the `useFileName` (now `useMsgFilename`) argument in the save function.
|
|
698
|
+
* [[TeamMsgExtractor #204](https://github.com/TeamMsgExtractor/msg-extractor/issues/204)] Fixed an issue where the failsafe name used by attachments wasn't being encoded before hand causing encoding errors.
|
|
699
|
+
* MSG files with a type of simply `IPM` will now be returned as `MSGFile` by `openMsg`, as this specifies that no format has been specified.
|
|
700
|
+
* [[TeamMsgExtractor #214](https://github.com/TeamMsgExtractor/msg-extractor/issues/214)] Attachments that error because the MSG class type wasn't recognized or isn't supported will now correctly be `UnsupportedAttachment` instead of `BrokenAttachment`.
|
|
701
|
+
* Improved internal code in many functions to make them faster and more efficient.
|
|
702
|
+
* `openMsg` will now tell you if a class type is simply unsupported rather than unrecognized. If it is found in the list, the function will raise `UnsupportedMSGTypeError`.
|
|
703
|
+
* Added caching to `MSGFile.listDir`. I found that if you have larger files this single function might be taking up over half of the processing time because of how many times it is used in the module.
|
|
704
|
+
* Fully implemented raw saving.
|
|
705
|
+
* Extended the `Contact` class to have more properties.
|
|
706
|
+
* Added new function `MSGFile._ensureSetTyped` which acts like the other ensure set functions but doesn't require you to know the type. Prefer to use other ensure set function when you know exactly what type it will be.
|
|
707
|
+
* Changed `Message.saveRaw` to `MSGFile.saveRaw`.
|
|
708
|
+
* Changed `MSGFile.saveRaw` to take a path and save the contents to a zip file.
|
|
709
|
+
* Corrected the help doc to reflect the current repository (was still on mattgwwalker).
|
|
710
|
+
* Fixed a bug that would cause an exception on trying to access the RTF body on a file that didn't have one. This is now correctly returning `None`.
|
|
711
|
+
* The `raw` keyword of `Message.save` now actually works.
|
|
712
|
+
* Added property `Attachment.randomFilename` which allows you to get the randomly generated name for attachments that don't have a usable one otherwise.
|
|
713
|
+
* Added function `Attachment.regenerateRandomName` for creating a new random name if necessary.
|
|
714
|
+
* Added function `Attachment.getFilename`. This function is used to get the name an attachment will be saved with given the specified arguments. Arguments are identical to `Attachment.save`.
|
|
715
|
+
* Changed pull requests to reflect new style.
|
|
716
|
+
* Added additional properties for defined MSG file fields.
|
|
717
|
+
* Added zip file support for the `Attachment.save` and `Message.save`. Simply pass a path for the `zip` keyword argument and it will create a new `ZipFile` instance and save all of it's data inside there. Alternatively, you can pass an instance of a class that is either a `ZipFile` or `ZipFile`-like and it will simply use that. When this argument is defined, the `customPath` argument refers to the path inside the zip file.
|
|
718
|
+
* Added the `html` and `rtf` keywords to `Message.save`. These will attempt to save the body in the html or rtf format, respectively. If the program cannot save in those formats, it will raise an exception unless the `allowFallback` keyword argument is `True`.
|
|
719
|
+
* Changed `utils.hasLen` to use `hasattr` instead of the try-except method it was using.
|
|
720
|
+
* Added new option `recipientSeparator` to `MessageBase` allowing you to specify a custom recipient separator (default is ";" to match Microsoft Outlook).
|
|
721
|
+
* Changed the `openMsg` function in `Attachment` to not be strict. This allows you to actually open the MSG file even if we don't recognize the type of embedded MSG that is being used.
|
|
722
|
+
* Attempted to normalize encoding names throughout the module so that a certain encoding will only show up using one name and not multiple.
|
|
723
|
+
* Finally figured out what CRC32 algorithm is used in named properties after directly asking in a Microsoft forum (see the thread [here](https://docs.microsoft.com/en-us/answers/questions/574894/ms-oxmsg-specifies-the-use-of-crc-32-checksums-wit.html)). Fortunately the is already defined in the `compressed-rtf` module so we can take advantage of that.
|
|
724
|
+
* Reworked `MessageBase._genRecipient` to improve it (because what on earth was that code it was using before?). Variables in the function are now more descriptive. Added comments in several places.
|
|
725
|
+
* Many renames to better fit naming convention:
|
|
726
|
+
* `dev.setup_dev_logger` to `dev.setupDevLogger`.
|
|
727
|
+
* `MSGFile.fix_path` to `MSGFile.fixPath`.
|
|
728
|
+
* `MessageBase.save_attachments` to `MessageBase.saveAttachments`.
|
|
729
|
+
* `*.Exists` to `exists`.
|
|
730
|
+
* `*.ExistsTypedProperty` to `*.existsTypedProperty`.
|
|
731
|
+
* `prop.create_prop` to `prop.createProp`.
|
|
732
|
+
* `Properties.attachment_count` to `Properties.attachmentCount`.
|
|
733
|
+
* `Properties.next_attachment_id` to `Properties.nextAttachmentId`.
|
|
734
|
+
* `Properties.next_recipient_id` to `Properties.nextRecipientId`.
|
|
735
|
+
* `Properties.recipient_count` to `Properties.recipientCount`.
|
|
736
|
+
* `utils.get_command_args` to `utils.getCommandArgs`.
|
|
737
|
+
* `utils.get_full_class_name` to `utils.getFullClassName`.
|
|
738
|
+
* `utils.get_input` to `utils.getInput`.
|
|
739
|
+
* `utils.has_len` to `utils.hasLen`.
|
|
740
|
+
* `utils.setup_logging` to `utils.setupLogging`.
|
|
741
|
+
* `constants.int_to_data_type` to `constants.intToDataType`.
|
|
742
|
+
* `constants.int_to_intelligence` to `constants.intToIntelligence`.
|
|
743
|
+
* `constants.int_to_recipient_type` to `constants.intToRecipientType`.
|
|
744
|
+
* Misc internal function variables.
|
|
745
|
+
|
|
746
|
+
**v0.28.7**
|
|
747
|
+
* Added hex versions of the `MULTIPLE_X_BYTES` constants.
|
|
748
|
+
* Added `1048` to `constants.MULTIPLE_16_BYTES`
|
|
749
|
+
* [[TeamMsgExtractor #173](https://github.com/TeamMsgExtractor/msg-extractor/issues/173)] rewrote the parsing of the length in `VariableLengthProp.__init__` to use constants rather than values coded directly into the function. This should fix this issue.
|
|
750
|
+
|
|
751
|
+
**v0.28.6**
|
|
752
|
+
* [[TeamMsgExtractor #191](https://github.com/TeamMsgExtractor/msg-extractor/issues/191)] This feature was never properly implemented, so it's not officially supported. However, this specific issue should be fixed. This is a temporary patch until I can get around to rewriting the way the module saves files in general.
|
|
753
|
+
* Added `venv` to the `.gitignore` list.
|
|
754
|
+
* Added information to the readme.
|
|
755
|
+
|
|
756
|
+
**v0.28.5**
|
|
757
|
+
* [[TeamMsgExtractor #189](https://github.com/TeamMsgExtractor/msg-extractor/issues/189)] Forgot to import `prepareFilename` in `attachment.py`.
|
|
758
|
+
* Fixed bad link in the changelog.
|
|
759
|
+
|
|
760
|
+
**v0.28.4**
|
|
761
|
+
* [[TeamMsgExtractor #184](https://github.com/TeamMsgExtractor/msg-extractor/issues/184)] Added code to `Message` to ensure subjects with null characters get stripped of them.
|
|
762
|
+
* Moved code for stripping subjects of bad characters to `prepareFilename` in `utils`.
|
|
763
|
+
|
|
764
|
+
**v0.28.3**
|
|
765
|
+
* Fixed minor typo in an exception description.
|
|
766
|
+
* Updated the README this time. Forgot to do it for at least 1 update.
|
|
767
|
+
|
|
768
|
+
**v0.28.2**
|
|
769
|
+
* Started preparing more of the code for when HTML and RTF saving are fully implemented. Please note that they do not work at all right now. Commented out the code for this because it wasn't meant to be uncommented.
|
|
770
|
+
* [[TeamMsgExtractor #184](https://github.com/TeamMsgExtractor/msg-extractor/issues/184)] Added code to ensure file names don't have null characters when saving an attachment.
|
|
771
|
+
* Minor improvement to the section of the save code that checks if you have provided incompatible options.
|
|
772
|
+
* [[TeamMsgExtractor #185](https://github.com/TeamMsgExtractor/msg-extractor/issues/185)] Added the `IncompatibleOptionsError`. It was supposed to be added a few updates ago, but was accidentally left out.
|
|
773
|
+
* Modified `Message.save` to return the current `Message` instance to allow for chained commands. This allows you to do something like `extract_msg.openMsg("path/to/message.msg").save().close()` where you could not before.
|
|
774
|
+
|
|
775
|
+
**v0.28.1**
|
|
776
|
+
* [[TeamMsgExtractor #181](https://github.com/TeamMsgExtractor/msg-extractor/issues/181)] Fixed issue in `Attachment` that arose when moving some of the code to a base class.
|
|
777
|
+
* Fixed small error in `utils.parse_type` that caused it to incorrectly compare expected and actual length. Fortunately, this had no actual effect aside from a warning.
|
|
778
|
+
* Added the `ebcdic` module to the requirements to add more supported encodings.
|
|
779
|
+
|
|
780
|
+
**v0.28.0**
|
|
781
|
+
* [[TeamMsgExtractor #87](https://github.com/TeamMsgExtractor/msg-extractor/issues/87)] Added a new system to handle `NotImplementedError` and other exceptions. All msg classes now have an option called `attachmentErrorBehavior` that tells the class what to do if it has an error. The value should be one of three constants: `ATTACHMENT_ERROR_THROW`, `ATTACHMENT_ERROR_NOT_IMPLEMENTED`, or `ATTACHMENT_ERROR_BROKEN`. `ATTACHMENT_ERROR_THROW` tells the class to not catch and exceptions and just let the user handle them. `ATTACHMENT_ERROR_NOT_IMPLEMENTED` tells the class to catch `NotImplementedError` exceptions and put an instance of `UnsupportedAttachment` in place of a regular attachment. `ATTACHMENT_ERROR_BROKEN` tells the class to catch *all* exceptions and either replace the attachment with `UnsupportedAttachment` if it is a `NotImplementedError` or `BrokenAttachment` for all other exceptions. With both of those options, caught exceptions will be logged.
|
|
782
|
+
* In making the previous point work, much code from `Attachment` has been moved to a new class called `AttachmentBase`. Both `BrokenAttachment` and `UnsupportedAttachment` are subclasses of `AttachmentBase` meaning data can be extracted from their streams in the same way as a functioning attachment.
|
|
783
|
+
* [[TeamMsgExtractor #162](https://github.com/TeamMsgExtractor/msg-extractor/issues/162)] Pretty sure I actually got it this time. The execution flag should be applied by pip now.
|
|
784
|
+
* Fixed typos in some exceptions.
|
|
785
|
+
|
|
786
|
+
**v0.27.16**
|
|
787
|
+
* [[TeamMsgExtractor #177](https://github.com/TeamMsgExtractor/msg-extractor/issues/177)] Fixed incorrect struct being used. It should be the correct one now, but further testing will be required to confirm this.
|
|
788
|
+
* Fixed log error message in `extract_msg.prop` to actually format a value into the message.
|
|
789
|
+
|
|
790
|
+
**v0.27.15**
|
|
791
|
+
* [[TeamMsgExtractor #177](https://github.com/TeamMsgExtractor/msg-extractor/issues/177)] Fixed missing import.
|
|
792
|
+
|
|
793
|
+
**v0.27.14**
|
|
794
|
+
* [[TeamMsgExtractor #173](https://github.com/TeamMsgExtractor/msg-extractor/issues/173)] Fixed typo that I made in the last version that broke things. I didn't have the resources to test this one myself, unfortunately.
|
|
795
|
+
* Fixed a typo in an exception message.
|
|
796
|
+
|
|
797
|
+
**v0.27.13**
|
|
798
|
+
* [[TeamMsgExtractor #173](https://github.com/TeamMsgExtractor/msg-extractor/issues/173)] Moved some data used in checks into constants so that I can make sure they get changed every where that they are used. Hopefully I can close this issue.
|
|
799
|
+
|
|
800
|
+
**v0.27.12**
|
|
801
|
+
* [[TeamMsgExtractor #173](https://github.com/TeamMsgExtractor/msg-extractor/issues/173)] Made an assumption about where an exception was thrown from and was wrong. While that location would have throw an exception, the function that called that code was the one to actually throw the exception in question. This issue *should* be fixed...
|
|
802
|
+
* [[TeamMsgExtractor #162](https://github.com/TeamMsgExtractor/msg-extractor/issues/162)] Made another attempt to fix the execution flag on the wrapper script.
|
|
803
|
+
|
|
804
|
+
**v0.27.11**
|
|
805
|
+
* [[TeamMsgExtractor #173](https://github.com/TeamMsgExtractor/msg-extractor/issues/173)] Tentatively implemented type 0x1014 (PtypMultipleInteger64). Apparently I forgot to do it earlier.
|
|
806
|
+
|
|
807
|
+
**v0.27.10**
|
|
808
|
+
* [[TeamMsgExtractor #162](https://github.com/TeamMsgExtractor/msg-extractor/issues/162)] Fixed line endings in the wrapper script to be UNIX line endings rather than Windows line endings. Attempted to add the execution flag to the runnable script.
|
|
809
|
+
|
|
810
|
+
**v0.27.9**
|
|
811
|
+
* [[TeamMsgExtractor #161](https://github.com/TeamMsgExtractor/msg-extractor/issues/161)] Added commands to the command line that will allow the user to specify that they want the message data to be output to `stdout` rather than to a file.
|
|
812
|
+
* [[TeamMsgExtractor #162](https://github.com/TeamMsgExtractor/msg-extractor/issues/162)] Added a wrapper for extract_msg that will be installed.
|
|
813
|
+
* Fixed some of the encoding names to allow them to actually be used in Python. The names they previously held were not aliases that currently exist.
|
|
814
|
+
* Added more documentation to `constants.CODE_PAGES` to give more information about what it is. As it is a list of the possible encodings an msg file can use, I also specified which ones were supported by Python 3.
|
|
815
|
+
* Moved the main code into a function so it is now callable from outside of the file.
|
|
816
|
+
|
|
817
|
+
**v0.27.8**
|
|
818
|
+
* [[TeamMsgExtractor #158](https://github.com/TeamMsgExtractor/msg-extractor/issues/158)] Fixed a spelling error in a function name that was causing it to not be seen. The function was called `ceilDiv` but was accidentally called as `cielDiv`.
|
|
819
|
+
|
|
820
|
+
**v0.27.7**
|
|
821
|
+
* Fixed an issue in the new bitwise adjustment functions. One of the variable names was incorrect.
|
|
822
|
+
|
|
823
|
+
**v0.27.6**
|
|
824
|
+
* Fixed a few lines in `data.py`.
|
|
825
|
+
|
|
826
|
+
**v0.27.5**
|
|
827
|
+
* Fixed an error in `utils.divide` that would cause it to drop the extra data if there was not enough to create a full division. For example, if you had a string that was 10 characters, and divided by 3, you would only receive a total of 9 characters back.
|
|
828
|
+
* Added some useful functions that will be used in the future.
|
|
829
|
+
* [[TeamMsgExtractor #155](https://github.com/TeamMsgExtractor/msg-extractor/issues/155)] Updated to use new version of `tzlocal`.
|
|
830
|
+
* Updated changelog to fit new repository.
|
|
831
|
+
|
|
832
|
+
**v0.27.4**
|
|
833
|
+
* [[TeamMsgExtractor #152](https://github.com/TeamMsgExtractor/msg-extractor/issues/152)] Fixed an issue where the name of an exception was put as the wrong thing.
|
|
834
|
+
|
|
835
|
+
**v0.27.3**
|
|
836
|
+
* [[TeamMsgExtractor #105](https://github.com/TeamMsgExtractor/msg-extractor/issues/105)] Added code to fix an internal msg issue that had recipient lists being split up in the header after a certain amount of characters. This was now a bug on our part, but an issue with the generation of the msg file itself.
|
|
837
|
+
* Exposed the `MessageBase` class directly from `extract_msg`. I forgot to do this when I created it.
|
|
838
|
+
* Added `MessageBase.bcc`. I think it used to exist but got erased somehow on accident. Either way, it exists now.
|
|
839
|
+
|
|
840
|
+
**v0.27.2**
|
|
841
|
+
* After much debate, I have finally decided to allow an option to override the string encoding in message files. This Was something I reserved solely for `dev_classes.Message` because it felt like it didn't fit with how msg files were supposed to work. I also didn't want messages from people about them running into errors after they overrode the encoding. You can now do this by providing the `overrideEncoding` option on any `MSGFile` class as well as the `openMsg` function.
|
|
842
|
+
* [[TeamMsgExtractor #103](https://github.com/TeamMsgExtractor/msg-extractor/issues/103)] Implemented correct detection of encodings. If you have any more issues with "'X' codec can't decode bytes" it is likely because the encoding specified inside the msg file is wrong.
|
|
843
|
+
|
|
844
|
+
**v0.27.1**
|
|
845
|
+
* [[TeamMsgExtractor #147](https://github.com/TeamMsgExtractor/msg-extractor/issues/147)] Fixed an issue in `Message.save` caused by it attempting to directly access a private variable that was moved to the base class `MessageBase`.
|
|
846
|
+
|
|
847
|
+
**v0.27.0**
|
|
848
|
+
* [[TeamMsgExtractor #143](https://github.com/TeamMsgExtractor/msg-extractor/issues/143)] Added new class `Appointment` that can handle outlook appointments or meetings.
|
|
849
|
+
* [[TeamMsgExtractor #143](https://github.com/TeamMsgExtractor/msg-extractor/issues/143)] Added new class `MessageBase` for classes that end up being mostly like the `Message` class. Currently subclassed by `Message` and `Appointment`. This should not have a direct effect on any code that uses this module.
|
|
850
|
+
* Added support for `PtypFloatingTime` in `utils.parseType`.
|
|
851
|
+
* Added proper support for `PtypTime` in `FixedLengthProp.parseType`
|
|
852
|
+
* Added pretty print functions to the `Properties` class and the `Named` class.
|
|
853
|
+
* Added new function `MSGFile._ensureSetProperty` that acts like `MSGFile._ensureSet` except that it works with properties from the `Properties` instance.
|
|
854
|
+
* Added equivalent of the previously mentioned function to the `Attachment` class and the `Recipient` class.
|
|
855
|
+
|
|
856
|
+
**v0.26.4**
|
|
857
|
+
* Added new function `MSGFile._ensureSetNamed` which acts like `MSGFile._ensureSet` except that it works with named properties.
|
|
858
|
+
* Added a version of the previous function to the `Attachment` and `Recipient` classes.
|
|
859
|
+
* Added new file `data.py` that contains various data structures that are used for specific properties.
|
|
860
|
+
* Expanded the functionality of the `Recipient` class by adding more properties.
|
|
861
|
+
* Added new functions `Named.getNamed` and `Named.getNamedValue` which retrieves a named property or the value of a named property, respectively, based on its name.
|
|
862
|
+
|
|
863
|
+
**v0.26.3**
|
|
864
|
+
* Added new function `MSGFile.save` that causes it and subclasses to raise a `NotImplementedError` if they do not override it.
|
|
865
|
+
* Fixed some issues in the changelog.
|
|
866
|
+
* Added some additional constants for future use.
|
|
867
|
+
|
|
868
|
+
**v0.26.2**
|
|
869
|
+
* Fixed error in `Message._registerNamedProperty` where I put the exception `KeyError` instead of `AttributeError`.
|
|
870
|
+
|
|
871
|
+
**v0.26.1**
|
|
872
|
+
* Fixed an issue in `openMsg` that would leave the basic `MSGFile` instance open with the function returned, even if the function was returning a specific msg instance.
|
|
873
|
+
|
|
874
|
+
**v0.26.0**
|
|
875
|
+
* [[TheElementalOfDestruction #3](https://github.com/TheElementalOfDestruction/msg-extractor/issues/3)] Implementation of Named properties has finally been added. This allows us to access certain data that was not available to us before through regular methods.
|
|
876
|
+
* Added new function `MSGFile.slistDir` that acts like `MSGFile.listDir`, except that it returns a list of strings rather than a list of lists.
|
|
877
|
+
* [[TheElementalOfDestruction #6](https://github.com/TheElementalOfDestruction/msg-extractor/issues/6)] Added new function `MSGFile._getTypedStream` which, based on a path formatted in the same way as you would give to `MSGFile._getStringStream`, will return the data in the specified stream without the user needing to know the type before hand. However, if you DO know the type before hand, you can provide this function with one of the values in `constants.FIXED_LENGTH_PROPS_STRING` or `constants.VARIABLE_LENGTH_PROPS_STRING`.
|
|
878
|
+
* [[TheElementalOfDestruction #6](https://github.com/TheElementalOfDestruction/msg-extractor/issues/6)] Added new function `MSGFile._getTypedProperty` which, based on a 4 digit hexadecimal string, will return the property in the properties file that matches that string without the type needing to be specified. However, if you DO know the type before hand, you can provide this function with one of the values in `constants.FIXED_LENGTH_PROPS_STRING` or `constants.VARIABLE_LENGTH_PROPS_STRING`.
|
|
879
|
+
* [[TheElementalOfDestruction #6](https://github.com/TheElementalOfDestruction/msg-extractor/issues/6)] Added new function `MSGFile._getTypedData` which is a combination of the two previously stated functions.
|
|
880
|
+
* Added new function `MSGFile.ExistsTypedProperty` which determines if a property with the specified id exists in the specified location. If you are looking for a property that may be in the properties file of an attachment or a recipient, please use the corresponding function from that class.
|
|
881
|
+
* Added an equivalent of the previous 4 functions for the `Recipient` and `Attachment` classes.
|
|
882
|
+
* [[TheElementalOfDestruction #2](https://github.com/TheElementalOfDestruction/msg-extractor/issues/2)] Finished partial implementation of `utils.parseType` which was necessary for the proper implementation of named properties. This function is not fully implemented because there are some types we do not fully understand.
|
|
883
|
+
|
|
884
|
+
**v0.25.3**
|
|
885
|
+
* [[TeamMsgExtractor #138](https://github.com/TeamMsgExtractor/msg-extractor/issues/138)] Fixed missing import in `extract_msg/utils.py`.
|
|
886
|
+
|
|
887
|
+
**v0.25.2**
|
|
888
|
+
* [[TeamMsgExtractor #134](https://github.com/TeamMsgExtractor/msg-extractor/issues/134)] Fixed a typo that caused `Message.headerDict` to raise an exception.
|
|
889
|
+
* Upgraded code for `Message.headerDict` to avoid accidentally raising a key error if the header is ever missing the "Received" property.
|
|
890
|
+
* Fixed an error in the changelog that caused some issue links to link to the wrong place.
|
|
891
|
+
|
|
892
|
+
**v0.25.1**
|
|
893
|
+
* [[TeamMsgExtractor #132](https://github.com/TeamMsgExtractor/msg-extractor/issues/132)] Fixed an issue caused by unfinished code being left in the \_\_main\_\_ file.
|
|
894
|
+
* Cleaned up the imports to only be what is needed.
|
|
895
|
+
|
|
896
|
+
**v0.25.0**
|
|
897
|
+
* Added new class `MSGFile`. The `Message` class now inherits from this. This class is the base for all MSG files, not just `Message`s. It somewhat recently came to our attention that MSG files are used for a variety of things, including the storage of contacts, leading us to the next part of the changelog.
|
|
898
|
+
* [[TeamMsgExtractor #110](https://github.com/TeamMsgExtractor/msg-extractor/issues/110)] Added new class `Contact` for extracting the data from MSG files storing contacts.
|
|
899
|
+
* Added new function `openMsg` to the module to be used to open MSG files in which it is not certain what type of MSG is being opened.
|
|
900
|
+
* Modified the `Attachment` class to use the `openMsg` function to open embedded MSG files.
|
|
901
|
+
* Added option `delayAttachments` to the `Message` class that will stop it from initializing attachments until the user is ready. This allows users to open `Message`s that have unimplemented attachment types without having to worry about the exception stopping them. This is also an option in the new `openMsg` function.
|
|
902
|
+
|
|
903
|
+
**v0.24.4**
|
|
904
|
+
* Added new property `Message.isRead` to show whether the email has been marked as read.
|
|
905
|
+
* Renamed `Message.header_dict` to `Message.headerDict` to better match naming conventions.
|
|
906
|
+
* Renamed `Message.message_id` to `Message.messageId` to better match naming conventions.
|
|
907
|
+
|
|
908
|
+
**v0.24.3**
|
|
909
|
+
* Added new close function to the `Message` class to ensure that all embedded `Message` instances get closed as well. Not having this was causing issues with trying to modify the msg file after the user thought that it had been closed.
|
|
910
|
+
|
|
911
|
+
**v0.24.2**
|
|
912
|
+
* Fixed bug that somehow escaped detection that caused certain properties to not work.
|
|
913
|
+
* Fixed bug with embedded msg files introduced in v0.24.0
|
|
914
|
+
|
|
915
|
+
**v0.24.0**
|
|
916
|
+
* [[TeamMsgExtractor #107](https://github.com/TeamMsgExtractor/msg-extractor/issues/107)] Rewrote the `Messsage.save` function to fix many errors arising from it and to extend its functionality.
|
|
917
|
+
* Added new function `isEmptyString` to check if a string passed to it is `None` or is empty.
|
|
918
|
+
|
|
919
|
+
**v0.23.4**
|
|
920
|
+
* [[TeamMsgExtractor #112](https://github.com/TeamMsgExtractor/msg-extractor/issues/112)] Changed method used to get the message from an exception to make it compatible with Python 2 and 3.
|
|
921
|
+
* [[TheElementalOfDestruction #23](https://github.com/TheElementalOfDestruction/msg-extractor/issues/23)] General cleanup and all around improvements of the code.
|
|
922
|
+
|
|
923
|
+
**v0.23.3**
|
|
924
|
+
* Fixed issues in readme.
|
|
925
|
+
* [[TheElementalOfDestruction #22](https://github.com/TheElementalOfDestruction/msg-extractor/issues/22)] Updated `dev_classes.Message` to better match the current `Message` class.
|
|
926
|
+
* Fixed bad links in changelog.
|
|
927
|
+
* [[TeamMsgExtractor #95](https://github.com/TeamMsgExtractor/msg-extractor/issues/95)] Added fallback encoding as well as manual encoding change to `dev_classes.Message`.
|
|
928
|
+
|
|
929
|
+
**v0.23.1**
|
|
930
|
+
* Fixed issue with embedded msg files caused by the changes in v0.23.0.
|
|
931
|
+
|
|
932
|
+
**v0.23.0**
|
|
933
|
+
* [[TeamMsgExtractor #75](https://github.com/TeamMsgExtractor/msg-extractor/issues/75)] & [[TheElementalOfDestruction #19](https://github.com/TheElementalOfDestruction/msg-extractor/issues/19)] Completely rewrote the function `Message._getStringStream`. This was done for two reasons. The first was to make it actually work with msg files that have their strings encoded in a non-Unicode encoding. The second reason was to make it so that it better reflected msg specification which says that ALL strings in a file will be either Unicode or non-Unicode, but not both. Because of the second part, the `prefer` option has been removed.
|
|
934
|
+
* As part of fixing the two issues in the previous change, we have added two new properties:
|
|
935
|
+
1. a boolean `Message.areStringsUnicode` which tells if the strings are Unicode encoded.
|
|
936
|
+
2. A string `Message.stringEncoding` which tells what the encoding is. This is used by the `Message._getStringStream` to determine how to decode the data into a string.
|
|
937
|
+
|
|
938
|
+
**v0.22.1**
|
|
939
|
+
* [[TeamMsgExtractor #69](https://github.com/TeamMsgExtractor/msg-extractor/issues/69)] Fixed date format not being up to standard.
|
|
940
|
+
* Fixed a minor spelling error in the code.
|
|
941
|
+
|
|
942
|
+
**v0.22.0**
|
|
943
|
+
* [[TheElementalOfDestruction #18](https://github.com/TheElementalOfDestruction/msg-extractor/issues/18)] Added `--validate` option.
|
|
944
|
+
* [[TheElementalOfDestruction #16](https://github.com/TheElementalOfDestruction/msg-extractor/issues/16)] Moved all dev code into its own scripts. Use `--dev` to use from the command line.
|
|
945
|
+
* [[TeamMsgExtractor #67](https://github.com/TeamMsgExtractor/msg-extractor/issues/67)] Added compatibility module to enforce Unicode `os` functions.
|
|
946
|
+
* Added new function to `Message` class: `Message.sExists`. This function checks if a string stream exists. It's input should be formatted identically to that of `Message._getStringStream`.
|
|
947
|
+
* Added new function to `Message` class: `Message.fix_path`. This function will add the proper prefix to the path (if the `prefix` parameter is true) and adjust the path to be a string rather than a list or tuple.
|
|
948
|
+
* Added new function to `utils.py`: `get_full_class_name`. This function returns a string containing the module name and the class name of any instance of any class. It is returned in the format of `{module}.{class}`.
|
|
949
|
+
* Added a sort of alias of `Message._getStream`, `Message._getStringStream`, `Message.Exists`, and `Message.sExists` to `Attachment` and `Recipient`. These functions run inside the associated attachment directory or recipient directory, respectively.
|
|
950
|
+
* Added a fix to an issue introduced in an earlier version caused by accidentally deleting a letter in the code.
|
|
951
|
+
|
|
952
|
+
**v0.21.0**
|
|
953
|
+
* [[TheElementalOfDestruction #12](https://github.com/TheElementalOfDestruction/msg-extractor/issues/12)] Changed debug code to use logging module.
|
|
954
|
+
* [[TheElementalOfDestruction #17](https://github.com/TheElementalOfDestruction/msg-extractor/issues/17)] Fixed Attachment class using wrong properties file location in embedded msg files.
|
|
955
|
+
* [[TheElementalOfDestruction #11](https://github.com/TheElementalOfDestruction/msg-extractor/issues/11)] Improved handling of command line arguments using argparse module.
|
|
956
|
+
* [[TheElementalOfDestruction #16](https://github.com/TheElementalOfDestruction/msg-extractor/issues/16)] Started work on moving developer code into its own script.
|
|
957
|
+
* [[TeamMsgExtractor #63](https://github.com/TeamMsgExtractor/msg-extractor/issues/63)] Fixed JSON saving not applying to embedded msg files.
|
|
958
|
+
* [[TeamMsgExtractor #55](https://github.com/TeamMsgExtractor/msg-extractor/issues/55)] Added fix for recipient sometimes missing email address.
|
|
959
|
+
* [[TeamMsgExtractor #65](https://github.com/TeamMsgExtractor/msg-extractor/issues/65)] Added fix for special characters in recipient names.
|
|
960
|
+
* Module now raises a custom exception (instead of just `IOError`) if the input is not a valid OLE file.
|
|
961
|
+
* Added `header_dict` property to the `Message` class.
|
|
962
|
+
* General minor bug fixes.
|
|
963
|
+
* Fixed a section in the `Recipient` class that I have no idea why I did it that way. If errors start randomly occurring with it, this fix is why.
|
|
964
|
+
|
|
965
|
+
**v0.20.8**
|
|
966
|
+
* Fixed a tab issue and parameter type in `message.py`.
|
|
967
|
+
|
|
968
|
+
**v0.20.7**
|
|
969
|
+
* Separated classes into their own files to make things more manageable.
|
|
970
|
+
* Placed `__doc__` back inside of `__init__.py`.
|
|
971
|
+
* Rewrote the `Prop` class to be two different classes that extend from a base class.
|
|
972
|
+
* Made decent progress on completing the `parse_type` function of the `FixedLengthProp` class (formerly a function of the `Prop` class).
|
|
973
|
+
* Improved exception handling code throughout most of the module.
|
|
974
|
+
* Updated the `.gitignore`.
|
|
975
|
+
* Updated README.
|
|
976
|
+
* Added `# DEBUG` comments before debugging lines to make them easier to find in the future.
|
|
977
|
+
* Added function `create_prop` in `prop.py` which should be used for creating what used to be an instance of the `Prop` class.
|
|
978
|
+
* Added more constants to reflect some of the changes made.
|
|
979
|
+
* Fixed a major bug that was causing the header to generate after things like "to" and "cc" which would force those fields to not use the header.
|
|
980
|
+
* Fixed the debug variable.
|
|
981
|
+
* Fixed many small bugs in many of the classes.
|
|
982
|
+
* [[TheElementalOfDestruction #13](https://github.com/TheElementalOfDestruction/msg-extractor/issues/13)] Various loose ends to enhance the workflow in the repo.
|