Fixed error handling
[dmarc.git] / read_report.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 40,
6 "metadata": {
7 "collapsed": false
8 },
9 "outputs": [],
10 "source": [
11 "import configparser\n",
12 "import imaplib\n",
13 "# import ssl\n",
14 "# import base64\n",
15 "# import email.parser\n",
16 "import email\n",
17 "import io\n",
18 "import zipfile\n",
19 "import xml.etree.ElementTree"
20 ]
21 },
22 {
23 "cell_type": "code",
24 "execution_count": 41,
25 "metadata": {
26 "collapsed": false
27 },
28 "outputs": [
29 {
30 "data": {
31 "text/plain": [
32 "['dmarc.ini']"
33 ]
34 },
35 "execution_count": 41,
36 "metadata": {},
37 "output_type": "execute_result"
38 }
39 ],
40 "source": [
41 "config = configparser.ConfigParser()\n",
42 "config.read('dmarc.ini')"
43 ]
44 },
45 {
46 "cell_type": "code",
47 "execution_count": 42,
48 "metadata": {
49 "collapsed": false
50 },
51 "outputs": [
52 {
53 "data": {
54 "text/plain": [
55 "[]"
56 ]
57 },
58 "execution_count": 42,
59 "metadata": {},
60 "output_type": "execute_result"
61 }
62 ],
63 "source": [
64 "[k for k in config['DEFAULT']]"
65 ]
66 },
67 {
68 "cell_type": "code",
69 "execution_count": 43,
70 "metadata": {
71 "collapsed": false
72 },
73 "outputs": [
74 {
75 "data": {
76 "text/plain": [
77 "['imap', 'database']"
78 ]
79 },
80 "execution_count": 43,
81 "metadata": {},
82 "output_type": "execute_result"
83 }
84 ],
85 "source": [
86 "config.sections()"
87 ]
88 },
89 {
90 "cell_type": "code",
91 "execution_count": 44,
92 "metadata": {
93 "collapsed": false
94 },
95 "outputs": [
96 {
97 "data": {
98 "text/plain": [
99 "'imap.njae.me.uk'"
100 ]
101 },
102 "execution_count": 44,
103 "metadata": {},
104 "output_type": "execute_result"
105 }
106 ],
107 "source": [
108 "config['imap']['server']"
109 ]
110 },
111 {
112 "cell_type": "code",
113 "execution_count": 45,
114 "metadata": {
115 "collapsed": false
116 },
117 "outputs": [],
118 "source": [
119 "mailbox = imaplib.IMAP4(host=config['imap']['server'], \n",
120 " port=config['imap']['port'])"
121 ]
122 },
123 {
124 "cell_type": "code",
125 "execution_count": 46,
126 "metadata": {
127 "collapsed": false
128 },
129 "outputs": [
130 {
131 "data": {
132 "text/plain": [
133 "('OK', [None])"
134 ]
135 },
136 "execution_count": 46,
137 "metadata": {},
138 "output_type": "execute_result"
139 }
140 ],
141 "source": [
142 "mailbox.starttls()"
143 ]
144 },
145 {
146 "cell_type": "code",
147 "execution_count": 47,
148 "metadata": {
149 "collapsed": false
150 },
151 "outputs": [
152 {
153 "data": {
154 "text/plain": [
155 "('OK', [b'Logged in'])"
156 ]
157 },
158 "execution_count": 47,
159 "metadata": {},
160 "output_type": "execute_result"
161 }
162 ],
163 "source": [
164 "mailbox.login(config['imap']['username'], config['imap']['password'])"
165 ]
166 },
167 {
168 "cell_type": "code",
169 "execution_count": 48,
170 "metadata": {
171 "collapsed": false
172 },
173 "outputs": [
174 {
175 "data": {
176 "text/plain": [
177 "('OK', [b'174'])"
178 ]
179 },
180 "execution_count": 48,
181 "metadata": {},
182 "output_type": "execute_result"
183 }
184 ],
185 "source": [
186 "mailbox.select('INBOX', readonly=True)"
187 ]
188 },
189 {
190 "cell_type": "code",
191 "execution_count": 49,
192 "metadata": {
193 "collapsed": false
194 },
195 "outputs": [
196 {
197 "data": {
198 "text/plain": [
199 "('OK',\n",
200 " [b'1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174'])"
201 ]
202 },
203 "execution_count": 49,
204 "metadata": {},
205 "output_type": "execute_result"
206 }
207 ],
208 "source": [
209 "mailbox.search(None, \"ALL\")"
210 ]
211 },
212 {
213 "cell_type": "code",
214 "execution_count": 50,
215 "metadata": {
216 "collapsed": false
217 },
218 "outputs": [
219 {
220 "data": {
221 "text/plain": [
222 "('OK', [b'164 165 166 167 168 169 170 171 172 173 174'])"
223 ]
224 },
225 "execution_count": 50,
226 "metadata": {},
227 "output_type": "execute_result"
228 }
229 ],
230 "source": [
231 "resp, nums = mailbox.search(None, \"SINCE 23-Mar-2016\")\n",
232 "resp, nums"
233 ]
234 },
235 {
236 "cell_type": "code",
237 "execution_count": 51,
238 "metadata": {
239 "collapsed": false
240 },
241 "outputs": [
242 {
243 "data": {
244 "text/plain": [
245 "[b'164',\n",
246 " b'165',\n",
247 " b'166',\n",
248 " b'167',\n",
249 " b'168',\n",
250 " b'169',\n",
251 " b'170',\n",
252 " b'171',\n",
253 " b'172',\n",
254 " b'173',\n",
255 " b'174']"
256 ]
257 },
258 "execution_count": 51,
259 "metadata": {},
260 "output_type": "execute_result"
261 }
262 ],
263 "source": [
264 "nums[0].split()"
265 ]
266 },
267 {
268 "cell_type": "code",
269 "execution_count": 52,
270 "metadata": {
271 "collapsed": false
272 },
273 "outputs": [
274 {
275 "data": {
276 "text/plain": [
277 "('OK',\n",
278 " [(b'174 (RFC822 {4399}',\n",
279 " b'Return-Path: <noreply-dmarc-support@google.com>\\r\\nDelivered-To: dmarc@njae.me.uk\\r\\nReceived: from localhost (localhost [127.0.0.1])\\r\\n\\tby mail.njae.me.uk (Postfix) with ESMTP id 38B4132B\\r\\n\\tfor <dmarc@njae.me.uk>; Tue, 29 Mar 2016 10:19:13 +0100 (BST)\\r\\nX-Virus-Scanned: Debian amavisd-new at njae.me.uk\\r\\nAuthentication-Results: ogedei.njae.me.uk (amavisd-new);\\r\\n\\tdkim=pass (2048-bit key) header.d=google.com\\r\\nReceived: from mail.njae.me.uk ([127.0.0.1])\\r\\n\\tby localhost (ogedei.njae.me.uk [127.0.0.1]) (amavisd-new, port 10024)\\r\\n\\twith ESMTP id SnLdON04KYCo for <dmarc@njae.me.uk>;\\r\\n\\tTue, 29 Mar 2016 10:19:10 +0100 (BST)\\r\\nReceived-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.85.213.73; helo=mail-vk0-f73.google.com; envelope-from=noreply-dmarc-support@google.com; receiver=dmarc@njae.me.uk \\r\\nAuthentication-Results: mail.njae.me.uk; dmarc=pass header.from=google.com\\r\\nAuthentication-Results: mail.njae.me.uk; dkim=pass\\r\\n\\treason=\"2048-bit key; unprotected key\"\\r\\n\\theader.d=google.com header.i=@google.com header.b=iAXipzAt;\\r\\n\\tdkim-adsp=pass; dkim-atps=neutral\\r\\nReceived: from mail-vk0-f73.google.com (mail-vk0-f73.google.com [209.85.213.73])\\r\\n\\tby mail.njae.me.uk (Postfix) with ESMTPS id 179E41E5\\r\\n\\tfor <dmarc@njae.me.uk>; Tue, 29 Mar 2016 10:19:09 +0100 (BST)\\r\\nReceived: by mail-vk0-f73.google.com with SMTP id z68so702703vkg.0\\r\\n for <dmarc@njae.me.uk>; Tue, 29 Mar 2016 02:19:09 -0700 (PDT)\\r\\nDKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\\r\\n d=google.com; s=20120113;\\r\\n h=mime-version:message-id:date:subject:from:to:content-disposition\\r\\n :content-transfer-encoding;\\r\\n bh=LH2uamJGGOiwcPQ0Y/w6LUkyxCGuLyHT3APu5+Zs63I=;\\r\\n b=iAXipzAtsCytlhTKIQ8CQy7SgB9q5HZ71k1QE93vubKwtldTgCdIZc3KiZLhJA0TLw\\r\\n 5YEVf+rfppwog3YJhffpeZgb+O8oaCxAga47sMGxSq3He0bP8TpHtVo+EaJyRaFVbOei\\r\\n X2f4/WuC1gF5eDg/JYhJgIkq0owFlhl10CgLnFRZCEWIFNuuPKLmhWrIceqZY5Cay90X\\r\\n CCmEBsFYY+cvfnbtzhJeSLG8w9vHbyCZVs8cY5XFOfaRmcWmKH/Yq/fpcAZ9BaMYme2U\\r\\n YW1lSKKFlFf5aJtaO2YGQMPyEZqLRsDjFo+wldyTMwaptG5hyYMH1MRTrRuCbUpsIV8t\\r\\n mHag==\\r\\nX-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\\r\\n d=1e100.net; s=20130820;\\r\\n h=x-gm-message-state:mime-version:message-id:date:subject:from:to\\r\\n :content-disposition:content-transfer-encoding;\\r\\n bh=LH2uamJGGOiwcPQ0Y/w6LUkyxCGuLyHT3APu5+Zs63I=;\\r\\n b=V5D9qH2AnRN1Yl9Q/ZaOCk7+NDT8Uk2kJRGxFu8goO+F1oJfRVe5zyp9Ig2DTAwUaj\\r\\n 8odegu+0RiGm3hrRYlbcTw3Mdsa3D2Gf2GWxAfEWTsheH2D/8cv6W8XqsFUhNl4w7j/f\\r\\n 9m4dQ6bBCqX2sBoD/vu+3dvtiL1u7qe4QiBFYlZy/75hbPJzaPkaGbXJyFl9jJLBmmR8\\r\\n DTMIwevCzUgHpoh0ITYL7lAW640jKV9ouNcXSo+pfsarztbhC8bBG+5Lh9SigI1EqgFB\\r\\n cUgZ+Oxuzkq93CcYHWTYYr1tsO7Y55w/+5DsAhiqjgPCkFIGrbLLguUM2+9V6yYex1v2\\r\\n JgXw==\\r\\nX-Gm-Message-State: AD7BkJLvHE6gfQN3L4TDuBK40mhasmyPR5+mR27t8PtP3Ym5H6IsuU0eB5uXi4w8dar7jVodeLR/5A==\\r\\nMIME-Version: 1.0\\r\\nX-Received: by 10.129.87.74 with SMTP id l71mr605278ywb.38.1459243148486; Tue,\\r\\n 29 Mar 2016 02:19:08 -0700 (PDT)\\r\\nMessage-ID: <15410706527896810898@google.com>\\r\\nDate: Tue, 29 Mar 2016 09:19:08 +0000\\r\\nSubject: Report domain: njae.me.uk Submitter: google.com Report-ID: 15410706527896810898\\r\\nFrom: noreply-dmarc-support@google.com\\r\\nTo: dmarc@njae.me.uk\\r\\nContent-Type: application/zip; \\r\\n\\tname=\"google.com!njae.me.uk!1459123200!1459209599.zip\"\\r\\nContent-Disposition: attachment; \\r\\n\\tfilename=\"google.com!njae.me.uk!1459123200!1459209599.zip\"\\r\\nContent-Transfer-Encoding: base64\\r\\n\\r\\nUEsDBAoAAAAIAAlJfUgBY8K+2QEAAHoEAAAvAAAAZ29vZ2xlLmNvbSFuamFlLm1lLnVrITE0NTkx\\r\\nMjMyMDAhMTQ1OTIwOTU5OS54bWytVE2TnCAQve+vsOY+ou7oaoplc8ovSM4WA61DRoEC3I9/Hxzw\\r\\nY2dTlUtO4uvu1/1eo/jlfRySVzBWKPl8yNPskIBkigvZPx9+/fxxrA/JC3nAHQA/U3YlD0mCDWhl\\r\\nXDuCo5w6OmMeVaZvJR2B9Er1A6RMjRitYMiBkYqBSOUZho8jH6lhRzvpme77vizkxZp3Z2jLlHSU\\r\\nuVbITpGLc9p+QyiWplspoohK+wYGFaeqKuvMc32tD8RRhuAkL0959pRVZfFUN1WdZ3VTY7TFQ77X\\r\\nCq2hso9qPHSGXkiSn8omLx6LzHcLyBIHyW/RImvKpvGzyIUMfWZbu+1NxVoNgn20ejoPwl5gHUR5\\r\\neySRvymkI6TT1bMFKMQpv4qRGIzCIYJWdzdsfgZI+01IwEjHd7sAdkE0cySfZc2H25h/G8k7yZRZ\\r\\npjPqbdVv1WQYtEKTIi/SqknLMq0K32DFl0ymJunII0bhsMCxHbzSYfKG8SUwuyCsVlY4f3Pj2Htk\\r\\nlzd7oKm1PmG1I+rtYmD1ZCfxrqff0CIMCw7SiU7472YtuwDlYNrOqPHTZvZ4JPpSjunkLq0BOw1u\\r\\nY7yb9h9bj1d6poii4suqa8+Hd4r/B/d2qdC9ljk5XA+Mtt/IH1BLAQIKAAoAAAAIAAlJfUgBY8K+\\r\\n2QEAAHoEAAAvAAAAAAAAAAAAAAAAAAAAAABnb29nbGUuY29tIW5qYWUubWUudWshMTQ1OTEyMzIw\\r\\nMCExNDU5MjA5NTk5LnhtbFBLBQYAAAAAAQABAF0AAAAmAgAAAAA=\\r\\n'),\n",
280 " b')'])"
281 ]
282 },
283 "execution_count": 52,
284 "metadata": {},
285 "output_type": "execute_result"
286 }
287 ],
288 "source": [
289 "all_resp = mailbox.fetch(nums[0].split()[-1], '(RFC822)')\n",
290 "all_resp"
291 ]
292 },
293 {
294 "cell_type": "code",
295 "execution_count": 53,
296 "metadata": {
297 "collapsed": false
298 },
299 "outputs": [
300 {
301 "name": "stdout",
302 "output_type": "stream",
303 "text": [
304 "Return-Path: <noreply-dmarc-support@google.com>\r\n",
305 "Delivered-To: dmarc@njae.me.uk\r\n",
306 "Received: from localhost (localhost [127.0.0.1])\r\n",
307 "\tby mail.njae.me.uk (Postfix) with ESMTP id 38B4132B\r\n",
308 "\tfor <dmarc@njae.me.uk>; Tue, 29 Mar 2016 10:19:13 +0100 (BST)\r\n",
309 "X-Virus-Scanned: Debian amavisd-new at njae.me.uk\r\n",
310 "Authentication-Results: ogedei.njae.me.uk (amavisd-new);\r\n",
311 "\tdkim=pass (2048-bit key) header.d=google.com\r\n",
312 "Received: from mail.njae.me.uk ([127.0.0.1])\r\n",
313 "\tby localhost (ogedei.njae.me.uk [127.0.0.1]) (amavisd-new, port 10024)\r\n",
314 "\twith ESMTP id SnLdON04KYCo for <dmarc@njae.me.uk>;\r\n",
315 "\tTue, 29 Mar 2016 10:19:10 +0100 (BST)\r\n",
316 "Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.85.213.73; helo=mail-vk0-f73.google.com; envelope-from=noreply-dmarc-support@google.com; receiver=dmarc@njae.me.uk \r\n",
317 "Authentication-Results: mail.njae.me.uk; dmarc=pass header.from=google.com\r\n",
318 "Authentication-Results: mail.njae.me.uk; dkim=pass\r\n",
319 "\treason=\"2048-bit key; unprotected key\"\r\n",
320 "\theader.d=google.com header.i=@google.com header.b=iAXipzAt;\r\n",
321 "\tdkim-adsp=pass; dkim-atps=neutral\r\n",
322 "Received: from mail-vk0-f73.google.com (mail-vk0-f73.google.com [209.85.213.73])\r\n",
323 "\tby mail.njae.me.uk (Postfix) with ESMTPS id 179E41E5\r\n",
324 "\tfor <dmarc@njae.me.uk>; Tue, 29 Mar 2016 10:19:09 +0100 (BST)\r\n",
325 "Received: by mail-vk0-f73.google.com with SMTP id z68so702703vkg.0\r\n",
326 " for <dmarc@njae.me.uk>; Tue, 29 Mar 2016 02:19:09 -0700 (PDT)\r\n",
327 "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\r\n",
328 " d=google.com; s=20120113;\r\n",
329 " h=mime-version:message-id:date:subject:from:to:content-disposition\r\n",
330 " :content-transfer-encoding;\r\n",
331 " bh=LH2uamJGGOiwcPQ0Y/w6LUkyxCGuLyHT3APu5+Zs63I=;\r\n",
332 " b=iAXipzAtsCytlhTKIQ8CQy7SgB9q5HZ71k1QE93vubKwtldTgCdIZc3KiZLhJA0TLw\r\n",
333 " 5YEVf+rfppwog3YJhffpeZgb+O8oaCxAga47sMGxSq3He0bP8TpHtVo+EaJyRaFVbOei\r\n",
334 " X2f4/WuC1gF5eDg/JYhJgIkq0owFlhl10CgLnFRZCEWIFNuuPKLmhWrIceqZY5Cay90X\r\n",
335 " CCmEBsFYY+cvfnbtzhJeSLG8w9vHbyCZVs8cY5XFOfaRmcWmKH/Yq/fpcAZ9BaMYme2U\r\n",
336 " YW1lSKKFlFf5aJtaO2YGQMPyEZqLRsDjFo+wldyTMwaptG5hyYMH1MRTrRuCbUpsIV8t\r\n",
337 " mHag==\r\n",
338 "X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\r\n",
339 " d=1e100.net; s=20130820;\r\n",
340 " h=x-gm-message-state:mime-version:message-id:date:subject:from:to\r\n",
341 " :content-disposition:content-transfer-encoding;\r\n",
342 " bh=LH2uamJGGOiwcPQ0Y/w6LUkyxCGuLyHT3APu5+Zs63I=;\r\n",
343 " b=V5D9qH2AnRN1Yl9Q/ZaOCk7+NDT8Uk2kJRGxFu8goO+F1oJfRVe5zyp9Ig2DTAwUaj\r\n",
344 " 8odegu+0RiGm3hrRYlbcTw3Mdsa3D2Gf2GWxAfEWTsheH2D/8cv6W8XqsFUhNl4w7j/f\r\n",
345 " 9m4dQ6bBCqX2sBoD/vu+3dvtiL1u7qe4QiBFYlZy/75hbPJzaPkaGbXJyFl9jJLBmmR8\r\n",
346 " DTMIwevCzUgHpoh0ITYL7lAW640jKV9ouNcXSo+pfsarztbhC8bBG+5Lh9SigI1EqgFB\r\n",
347 " cUgZ+Oxuzkq93CcYHWTYYr1tsO7Y55w/+5DsAhiqjgPCkFIGrbLLguUM2+9V6yYex1v2\r\n",
348 " JgXw==\r\n",
349 "X-Gm-Message-State: AD7BkJLvHE6gfQN3L4TDuBK40mhasmyPR5+mR27t8PtP3Ym5H6IsuU0eB5uXi4w8dar7jVodeLR/5A==\r\n",
350 "MIME-Version: 1.0\r\n",
351 "X-Received: by 10.129.87.74 with SMTP id l71mr605278ywb.38.1459243148486; Tue,\r\n",
352 " 29 Mar 2016 02:19:08 -0700 (PDT)\r\n",
353 "Message-ID: <15410706527896810898@google.com>\r\n",
354 "Date: Tue, 29 Mar 2016 09:19:08 +0000\r\n",
355 "Subject: Report domain: njae.me.uk Submitter: google.com Report-ID: 15410706527896810898\r\n",
356 "From: noreply-dmarc-support@google.com\r\n",
357 "To: dmarc@njae.me.uk\r\n",
358 "Content-Type: application/zip; \r\n",
359 "\tname=\"google.com!njae.me.uk!1459123200!1459209599.zip\"\r\n",
360 "Content-Disposition: attachment; \r\n",
361 "\tfilename=\"google.com!njae.me.uk!1459123200!1459209599.zip\"\r\n",
362 "Content-Transfer-Encoding: base64\r\n",
363 "\r\n",
364 "UEsDBAoAAAAIAAlJfUgBY8K+2QEAAHoEAAAvAAAAZ29vZ2xlLmNvbSFuamFlLm1lLnVrITE0NTkx\r\n",
365 "MjMyMDAhMTQ1OTIwOTU5OS54bWytVE2TnCAQve+vsOY+ou7oaoplc8ovSM4WA61DRoEC3I9/Hxzw\r\n",
366 "Y2dTlUtO4uvu1/1eo/jlfRySVzBWKPl8yNPskIBkigvZPx9+/fxxrA/JC3nAHQA/U3YlD0mCDWhl\r\n",
367 "XDuCo5w6OmMeVaZvJR2B9Er1A6RMjRitYMiBkYqBSOUZho8jH6lhRzvpme77vizkxZp3Z2jLlHSU\r\n",
368 "uVbITpGLc9p+QyiWplspoohK+wYGFaeqKuvMc32tD8RRhuAkL0959pRVZfFUN1WdZ3VTY7TFQ77X\r\n",
369 "Cq2hso9qPHSGXkiSn8omLx6LzHcLyBIHyW/RImvKpvGzyIUMfWZbu+1NxVoNgn20ejoPwl5gHUR5\r\n",
370 "eySRvymkI6TT1bMFKMQpv4qRGIzCIYJWdzdsfgZI+01IwEjHd7sAdkE0cySfZc2H25h/G8k7yZRZ\r\n",
371 "pjPqbdVv1WQYtEKTIi/SqknLMq0K32DFl0ymJunII0bhsMCxHbzSYfKG8SUwuyCsVlY4f3Pj2Htk\r\n",
372 "lzd7oKm1PmG1I+rtYmD1ZCfxrqff0CIMCw7SiU7472YtuwDlYNrOqPHTZvZ4JPpSjunkLq0BOw1u\r\n",
373 "Y7yb9h9bj1d6poii4suqa8+Hd4r/B/d2qdC9ljk5XA+Mtt/IH1BLAQIKAAoAAAAIAAlJfUgBY8K+\r\n",
374 "2QEAAHoEAAAvAAAAAAAAAAAAAAAAAAAAAABnb29nbGUuY29tIW5qYWUubWUudWshMTQ1OTEyMzIw\r\n",
375 "MCExNDU5MjA5NTk5LnhtbFBLBQYAAAAAAQABAF0AAAAmAgAAAAA=\r\n",
376 "\n"
377 ]
378 }
379 ],
380 "source": [
381 "print(all_resp[1][0][1].decode('utf-8'))"
382 ]
383 },
384 {
385 "cell_type": "code",
386 "execution_count": 54,
387 "metadata": {
388 "collapsed": false
389 },
390 "outputs": [
391 {
392 "data": {
393 "text/plain": [
394 "('OK',\n",
395 " [(b'174 (BODY[1] {912}',\n",
396 " b'UEsDBAoAAAAIAAlJfUgBY8K+2QEAAHoEAAAvAAAAZ29vZ2xlLmNvbSFuamFlLm1lLnVrITE0NTkx\\r\\nMjMyMDAhMTQ1OTIwOTU5OS54bWytVE2TnCAQve+vsOY+ou7oaoplc8ovSM4WA61DRoEC3I9/Hxzw\\r\\nY2dTlUtO4uvu1/1eo/jlfRySVzBWKPl8yNPskIBkigvZPx9+/fxxrA/JC3nAHQA/U3YlD0mCDWhl\\r\\nXDuCo5w6OmMeVaZvJR2B9Er1A6RMjRitYMiBkYqBSOUZho8jH6lhRzvpme77vizkxZp3Z2jLlHSU\\r\\nuVbITpGLc9p+QyiWplspoohK+wYGFaeqKuvMc32tD8RRhuAkL0959pRVZfFUN1WdZ3VTY7TFQ77X\\r\\nCq2hso9qPHSGXkiSn8omLx6LzHcLyBIHyW/RImvKpvGzyIUMfWZbu+1NxVoNgn20ejoPwl5gHUR5\\r\\neySRvymkI6TT1bMFKMQpv4qRGIzCIYJWdzdsfgZI+01IwEjHd7sAdkE0cySfZc2H25h/G8k7yZRZ\\r\\npjPqbdVv1WQYtEKTIi/SqknLMq0K32DFl0ymJunII0bhsMCxHbzSYfKG8SUwuyCsVlY4f3Pj2Htk\\r\\nlzd7oKm1PmG1I+rtYmD1ZCfxrqff0CIMCw7SiU7472YtuwDlYNrOqPHTZvZ4JPpSjunkLq0BOw1u\\r\\nY7yb9h9bj1d6poii4suqa8+Hd4r/B/d2qdC9ljk5XA+Mtt/IH1BLAQIKAAoAAAAIAAlJfUgBY8K+\\r\\n2QEAAHoEAAAvAAAAAAAAAAAAAAAAAAAAAABnb29nbGUuY29tIW5qYWUubWUudWshMTQ1OTEyMzIw\\r\\nMCExNDU5MjA5NTk5LnhtbFBLBQYAAAAAAQABAF0AAAAmAgAAAAA=\\r\\n'),\n",
397 " b')'])"
398 ]
399 },
400 "execution_count": 54,
401 "metadata": {},
402 "output_type": "execute_result"
403 }
404 ],
405 "source": [
406 "all_resp = mailbox.fetch(nums[0].split()[-1], '(BODY[1])')\n",
407 "all_resp"
408 ]
409 },
410 {
411 "cell_type": "code",
412 "execution_count": 55,
413 "metadata": {
414 "collapsed": false
415 },
416 "outputs": [
417 {
418 "data": {
419 "text/plain": [
420 "('OK',\n",
421 " [b'174 (BODY (\"application\" \"zip\" (\"name\" \"google.com!njae.me.uk!1459123200!1459209599.zip\") NIL NIL \"base64\" 912))'])"
422 ]
423 },
424 "execution_count": 55,
425 "metadata": {},
426 "output_type": "execute_result"
427 }
428 ],
429 "source": [
430 "all_resp = mailbox.fetch(nums[0].split()[-1], '(BODY)')\n",
431 "all_resp"
432 ]
433 },
434 {
435 "cell_type": "code",
436 "execution_count": 56,
437 "metadata": {
438 "collapsed": false
439 },
440 "outputs": [
441 {
442 "data": {
443 "text/plain": [
444 "55"
445 ]
446 },
447 "execution_count": 56,
448 "metadata": {},
449 "output_type": "execute_result"
450 }
451 ],
452 "source": [
453 "all_resp[1][0][1]"
454 ]
455 },
456 {
457 "cell_type": "code",
458 "execution_count": 57,
459 "metadata": {
460 "collapsed": false
461 },
462 "outputs": [
463 {
464 "data": {
465 "text/plain": [
466 "int"
467 ]
468 },
469 "execution_count": 57,
470 "metadata": {},
471 "output_type": "execute_result"
472 }
473 ],
474 "source": [
475 "type(all_resp[1][0][1])"
476 ]
477 },
478 {
479 "cell_type": "code",
480 "execution_count": 80,
481 "metadata": {
482 "collapsed": false
483 },
484 "outputs": [
485 {
486 "data": {
487 "text/plain": [
488 "b'Return-Path: <noreply-dmarc-support@google.com>\\r\\nDelivered-To: dmarc@njae.me.uk\\r\\nReceived: from localhost (localhost [127.0.0.1])\\r\\n\\tby mail.njae.me.uk (Postfix) with ESMTP id 38B4132B\\r\\n\\tfor <dmarc@njae.me.uk>; Tue, 29 Mar 2016 10:19:13 +0100 (BST)\\r\\nX-Virus-Scanned: Debian amavisd-new at njae.me.uk\\r\\nAuthentication-Results: ogedei.njae.me.uk (amavisd-new);\\r\\n\\tdkim=pass (2048-bit key) header.d=google.com\\r\\nReceived: from mail.njae.me.uk ([127.0.0.1])\\r\\n\\tby localhost (ogedei.njae.me.uk [127.0.0.1]) (amavisd-new, port 10024)\\r\\n\\twith ESMTP id SnLdON04KYCo for <dmarc@njae.me.uk>;\\r\\n\\tTue, 29 Mar 2016 10:19:10 +0100 (BST)\\r\\nReceived-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.85.213.73; helo=mail-vk0-f73.google.com; envelope-from=noreply-dmarc-support@google.com; receiver=dmarc@njae.me.uk \\r\\nAuthentication-Results: mail.njae.me.uk; dmarc=pass header.from=google.com\\r\\nAuthentication-Results: mail.njae.me.uk; dkim=pass\\r\\n\\treason=\"2048-bit key; unprotected key\"\\r\\n\\theader.d=google.com header.i=@google.com header.b=iAXipzAt;\\r\\n\\tdkim-adsp=pass; dkim-atps=neutral\\r\\nReceived: from mail-vk0-f73.google.com (mail-vk0-f73.google.com [209.85.213.73])\\r\\n\\tby mail.njae.me.uk (Postfix) with ESMTPS id 179E41E5\\r\\n\\tfor <dmarc@njae.me.uk>; Tue, 29 Mar 2016 10:19:09 +0100 (BST)\\r\\nReceived: by mail-vk0-f73.google.com with SMTP id z68so702703vkg.0\\r\\n for <dmarc@njae.me.uk>; Tue, 29 Mar 2016 02:19:09 -0700 (PDT)\\r\\nDKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\\r\\n d=google.com; s=20120113;\\r\\n h=mime-version:message-id:date:subject:from:to:content-disposition\\r\\n :content-transfer-encoding;\\r\\n bh=LH2uamJGGOiwcPQ0Y/w6LUkyxCGuLyHT3APu5+Zs63I=;\\r\\n b=iAXipzAtsCytlhTKIQ8CQy7SgB9q5HZ71k1QE93vubKwtldTgCdIZc3KiZLhJA0TLw\\r\\n 5YEVf+rfppwog3YJhffpeZgb+O8oaCxAga47sMGxSq3He0bP8TpHtVo+EaJyRaFVbOei\\r\\n X2f4/WuC1gF5eDg/JYhJgIkq0owFlhl10CgLnFRZCEWIFNuuPKLmhWrIceqZY5Cay90X\\r\\n CCmEBsFYY+cvfnbtzhJeSLG8w9vHbyCZVs8cY5XFOfaRmcWmKH/Yq/fpcAZ9BaMYme2U\\r\\n YW1lSKKFlFf5aJtaO2YGQMPyEZqLRsDjFo+wldyTMwaptG5hyYMH1MRTrRuCbUpsIV8t\\r\\n mHag==\\r\\nX-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\\r\\n d=1e100.net; s=20130820;\\r\\n h=x-gm-message-state:mime-version:message-id:date:subject:from:to\\r\\n :content-disposition:content-transfer-encoding;\\r\\n bh=LH2uamJGGOiwcPQ0Y/w6LUkyxCGuLyHT3APu5+Zs63I=;\\r\\n b=V5D9qH2AnRN1Yl9Q/ZaOCk7+NDT8Uk2kJRGxFu8goO+F1oJfRVe5zyp9Ig2DTAwUaj\\r\\n 8odegu+0RiGm3hrRYlbcTw3Mdsa3D2Gf2GWxAfEWTsheH2D/8cv6W8XqsFUhNl4w7j/f\\r\\n 9m4dQ6bBCqX2sBoD/vu+3dvtiL1u7qe4QiBFYlZy/75hbPJzaPkaGbXJyFl9jJLBmmR8\\r\\n DTMIwevCzUgHpoh0ITYL7lAW640jKV9ouNcXSo+pfsarztbhC8bBG+5Lh9SigI1EqgFB\\r\\n cUgZ+Oxuzkq93CcYHWTYYr1tsO7Y55w/+5DsAhiqjgPCkFIGrbLLguUM2+9V6yYex1v2\\r\\n JgXw==\\r\\nX-Gm-Message-State: AD7BkJLvHE6gfQN3L4TDuBK40mhasmyPR5+mR27t8PtP3Ym5H6IsuU0eB5uXi4w8dar7jVodeLR/5A==\\r\\nMIME-Version: 1.0\\r\\nX-Received: by 10.129.87.74 with SMTP id l71mr605278ywb.38.1459243148486; Tue,\\r\\n 29 Mar 2016 02:19:08 -0700 (PDT)\\r\\nMessage-ID: <15410706527896810898@google.com>\\r\\nDate: Tue, 29 Mar 2016 09:19:08 +0000\\r\\nSubject: Report domain: njae.me.uk Submitter: google.com Report-ID: 15410706527896810898\\r\\nFrom: noreply-dmarc-support@google.com\\r\\nTo: dmarc@njae.me.uk\\r\\nContent-Type: application/zip; \\r\\n\\tname=\"google.com!njae.me.uk!1459123200!1459209599.zip\"\\r\\nContent-Disposition: attachment; \\r\\n\\tfilename=\"google.com!njae.me.uk!1459123200!1459209599.zip\"\\r\\nContent-Transfer-Encoding: base64\\r\\n\\r\\nUEsDBAoAAAAIAAlJfUgBY8K+2QEAAHoEAAAvAAAAZ29vZ2xlLmNvbSFuamFlLm1lLnVrITE0NTkx\\r\\nMjMyMDAhMTQ1OTIwOTU5OS54bWytVE2TnCAQve+vsOY+ou7oaoplc8ovSM4WA61DRoEC3I9/Hxzw\\r\\nY2dTlUtO4uvu1/1eo/jlfRySVzBWKPl8yNPskIBkigvZPx9+/fxxrA/JC3nAHQA/U3YlD0mCDWhl\\r\\nXDuCo5w6OmMeVaZvJR2B9Er1A6RMjRitYMiBkYqBSOUZho8jH6lhRzvpme77vizkxZp3Z2jLlHSU\\r\\nuVbITpGLc9p+QyiWplspoohK+wYGFaeqKuvMc32tD8RRhuAkL0959pRVZfFUN1WdZ3VTY7TFQ77X\\r\\nCq2hso9qPHSGXkiSn8omLx6LzHcLyBIHyW/RImvKpvGzyIUMfWZbu+1NxVoNgn20ejoPwl5gHUR5\\r\\neySRvymkI6TT1bMFKMQpv4qRGIzCIYJWdzdsfgZI+01IwEjHd7sAdkE0cySfZc2H25h/G8k7yZRZ\\r\\npjPqbdVv1WQYtEKTIi/SqknLMq0K32DFl0ymJunII0bhsMCxHbzSYfKG8SUwuyCsVlY4f3Pj2Htk\\r\\nlzd7oKm1PmG1I+rtYmD1ZCfxrqff0CIMCw7SiU7472YtuwDlYNrOqPHTZvZ4JPpSjunkLq0BOw1u\\r\\nY7yb9h9bj1d6poii4suqa8+Hd4r/B/d2qdC9ljk5XA+Mtt/IH1BLAQIKAAoAAAAIAAlJfUgBY8K+\\r\\n2QEAAHoEAAAvAAAAAAAAAAAAAAAAAAAAAABnb29nbGUuY29tIW5qYWUubWUudWshMTQ1OTEyMzIw\\r\\nMCExNDU5MjA5NTk5LnhtbFBLBQYAAAAAAQABAF0AAAAmAgAAAAA=\\r\\n'"
489 ]
490 },
491 "execution_count": 80,
492 "metadata": {},
493 "output_type": "execute_result"
494 }
495 ],
496 "source": [
497 "msg = mailbox.fetch(nums[0].split()[-1], '(RFC822)')[1][0][1]\n",
498 "msg"
499 ]
500 },
501 {
502 "cell_type": "code",
503 "execution_count": 81,
504 "metadata": {
505 "collapsed": false
506 },
507 "outputs": [
508 {
509 "data": {
510 "text/plain": [
511 "<email.message.Message at 0x7f6538441ef0>"
512 ]
513 },
514 "execution_count": 81,
515 "metadata": {},
516 "output_type": "execute_result"
517 }
518 ],
519 "source": [
520 "pmsg = email.parser.BytesParser()\n",
521 "pmsg.parsebytes(msg)"
522 ]
523 },
524 {
525 "cell_type": "code",
526 "execution_count": 82,
527 "metadata": {
528 "collapsed": false
529 },
530 "outputs": [
531 {
532 "data": {
533 "text/plain": [
534 "<email.message.Message at 0x7f65381a7b38>"
535 ]
536 },
537 "execution_count": 82,
538 "metadata": {},
539 "output_type": "execute_result"
540 }
541 ],
542 "source": [
543 "pmsg = email.message_from_bytes(msg)\n",
544 "pmsg"
545 ]
546 },
547 {
548 "cell_type": "code",
549 "execution_count": 87,
550 "metadata": {
551 "collapsed": false
552 },
553 "outputs": [
554 {
555 "data": {
556 "text/plain": [
557 "False"
558 ]
559 },
560 "execution_count": 87,
561 "metadata": {},
562 "output_type": "execute_result"
563 }
564 ],
565 "source": [
566 "pmsg.is_multipart()"
567 ]
568 },
569 {
570 "cell_type": "code",
571 "execution_count": 85,
572 "metadata": {
573 "collapsed": false
574 },
575 "outputs": [
576 {
577 "data": {
578 "text/plain": [
579 "'application/zip'"
580 ]
581 },
582 "execution_count": 85,
583 "metadata": {},
584 "output_type": "execute_result"
585 }
586 ],
587 "source": [
588 "pmsg.get_content_type()"
589 ]
590 },
591 {
592 "cell_type": "code",
593 "execution_count": 86,
594 "metadata": {
595 "collapsed": false
596 },
597 "outputs": [
598 {
599 "data": {
600 "text/plain": [
601 "'UEsDBAoAAAAIAAlJfUgBY8K+2QEAAHoEAAAvAAAAZ29vZ2xlLmNvbSFuamFlLm1lLnVrITE0NTkx\\r\\nMjMyMDAhMTQ1OTIwOTU5OS54bWytVE2TnCAQve+vsOY+ou7oaoplc8ovSM4WA61DRoEC3I9/Hxzw\\r\\nY2dTlUtO4uvu1/1eo/jlfRySVzBWKPl8yNPskIBkigvZPx9+/fxxrA/JC3nAHQA/U3YlD0mCDWhl\\r\\nXDuCo5w6OmMeVaZvJR2B9Er1A6RMjRitYMiBkYqBSOUZho8jH6lhRzvpme77vizkxZp3Z2jLlHSU\\r\\nuVbITpGLc9p+QyiWplspoohK+wYGFaeqKuvMc32tD8RRhuAkL0959pRVZfFUN1WdZ3VTY7TFQ77X\\r\\nCq2hso9qPHSGXkiSn8omLx6LzHcLyBIHyW/RImvKpvGzyIUMfWZbu+1NxVoNgn20ejoPwl5gHUR5\\r\\neySRvymkI6TT1bMFKMQpv4qRGIzCIYJWdzdsfgZI+01IwEjHd7sAdkE0cySfZc2H25h/G8k7yZRZ\\r\\npjPqbdVv1WQYtEKTIi/SqknLMq0K32DFl0ymJunII0bhsMCxHbzSYfKG8SUwuyCsVlY4f3Pj2Htk\\r\\nlzd7oKm1PmG1I+rtYmD1ZCfxrqff0CIMCw7SiU7472YtuwDlYNrOqPHTZvZ4JPpSjunkLq0BOw1u\\r\\nY7yb9h9bj1d6poii4suqa8+Hd4r/B/d2qdC9ljk5XA+Mtt/IH1BLAQIKAAoAAAAIAAlJfUgBY8K+\\r\\n2QEAAHoEAAAvAAAAAAAAAAAAAAAAAAAAAABnb29nbGUuY29tIW5qYWUubWUudWshMTQ1OTEyMzIw\\r\\nMCExNDU5MjA5NTk5LnhtbFBLBQYAAAAAAQABAF0AAAAmAgAAAAA=\\r\\n'"
602 ]
603 },
604 "execution_count": 86,
605 "metadata": {},
606 "output_type": "execute_result"
607 }
608 ],
609 "source": [
610 "pmsg.get_payload()"
611 ]
612 },
613 {
614 "cell_type": "code",
615 "execution_count": 63,
616 "metadata": {
617 "collapsed": false
618 },
619 "outputs": [
620 {
621 "data": {
622 "text/plain": [
623 "b'PK\\x03\\x04\\n\\x00\\x00\\x00\\x08\\x00\\tI}H\\x01c\\xc2\\xbe\\xd9\\x01\\x00\\x00z\\x04\\x00\\x00/\\x00\\x00\\x00google.com!njae.me.uk!1459123200!1459209599.xml\\xadTM\\x93\\x9c \\x10\\xbd\\xef\\xaf\\xb0\\xe6>\\xa2\\xee\\xe8j\\x8aes\\xca/H\\xce\\x16\\x03\\xadCF\\x81\\x02\\xdc\\x8f\\x7f\\x1f\\x1c\\xf0cgS\\x95KN\\xe2\\xeb\\xee\\xd7\\xfd^\\xa3\\xf8\\xe5}\\x1c\\x92W0V(\\xf9|\\xc8\\xd3\\xec\\x90\\x80d\\x8a\\x0b\\xd9?\\x1f~\\xfd\\xfcq\\xac\\x0f\\xc9\\x0by\\xc0\\x1d\\x00?Sv%\\x0fI\\x82\\rhe\\\\;\\x82\\xa3\\x9c::c\\x1eU\\xa6o%\\x1d\\x81\\xf4J\\xf5\\x03\\xa4L\\x8d\\x18\\xad`\\xc8\\x81\\x91\\x8a\\x81H\\xe5\\x19\\x86\\x8f#\\x1f\\xa9aG;\\xe9\\x99\\xee\\xfb\\xbe,\\xe4\\xc5\\x9awgh\\xcb\\x94t\\x94\\xb9V\\xc8N\\x91\\x8bs\\xda~C(\\x96\\xa6[)\\xa2\\x88J\\xfb\\x06\\x06\\x15\\xa7\\xaa*\\xeb\\xccs}\\xad\\x0f\\xc4Q\\x86\\xe0$/Oy\\xf6\\x94Ue\\xf1T7U\\x9dguSc\\xb4\\xc5C\\xbe\\xd7\\n\\xad\\xa1\\xb2\\x8fj<t\\x86^H\\x92\\x9f\\xca&/\\x1e\\x8b\\xccw\\x0b\\xc8\\x12\\x07\\xc9o\\xd1\"k\\xca\\xa6\\xf1\\xb3\\xc8\\x85\\x0c}f[\\xbb\\xedM\\xc5Z\\r\\x82}\\xb4z:\\x0f\\xc2^`\\x1dDy{$\\x91\\xbf)\\xa4#\\xa4\\xd3\\xd5\\xb3\\x05(\\xc4)\\xbf\\x8a\\x91\\x18\\x8c\\xc2!\\x82Vw7l~\\x06H\\xfbMH\\xc0H\\xc7w\\xbb\\x00vA4s$\\x9fe\\xcd\\x87\\xdb\\x98\\x7f\\x1b\\xc9;\\xc9\\x94Y\\xa63\\xeam\\xd5o\\xd5d\\x18\\xb4B\\x93\"/\\xd2\\xaaI\\xcb2\\xad\\n\\xdf`\\xc5\\x97L\\xa6&\\xe9\\xc8#F\\xe1\\xb0\\xc0\\xb1\\x1d\\xbc\\xd2a\\xf2\\x86\\xf1%0\\xbb \\xacVV8\\x7fs\\xe3\\xd8{d\\x977{\\xa0\\xa9\\xb5>a\\xb5#\\xea\\xedb`\\xf5d\\'\\xf1\\xae\\xa7\\xdf\\xd0\"\\x0c\\x0b\\x0e\\xd2\\x89N\\xf8\\xeff-\\xbb\\x00\\xe5`\\xda\\xce\\xa8\\xf1\\xd3f\\xf6x$\\xfaR\\x8e\\xe9\\xe4.\\xad\\x01;\\rnc\\xbc\\x9b\\xf6\\x1f[\\x8fWz\\xa6\\x88\\xa2\\xe2\\xcb\\xaak\\xcf\\x87w\\x8a\\xff\\x07\\xf7v\\xa9\\xd0\\xbd\\x9699\\\\\\x0f\\x8c\\xb6\\xdf\\xc8\\x1fPK\\x01\\x02\\n\\x00\\n\\x00\\x00\\x00\\x08\\x00\\tI}H\\x01c\\xc2\\xbe\\xd9\\x01\\x00\\x00z\\x04\\x00\\x00/\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00google.com!njae.me.uk!1459123200!1459209599.xmlPK\\x05\\x06\\x00\\x00\\x00\\x00\\x01\\x00\\x01\\x00]\\x00\\x00\\x00&\\x02\\x00\\x00\\x00\\x00'"
624 ]
625 },
626 "execution_count": 63,
627 "metadata": {},
628 "output_type": "execute_result"
629 }
630 ],
631 "source": [
632 "pmsg.get_payload(decode=True)"
633 ]
634 },
635 {
636 "cell_type": "code",
637 "execution_count": 64,
638 "metadata": {
639 "collapsed": true
640 },
641 "outputs": [],
642 "source": [
643 "# io.BytesIO(pmsg.get_payload(decode=True))\n",
644 "zfp = zipfile.ZipFile(io.BytesIO(pmsg.get_payload(decode=True)))"
645 ]
646 },
647 {
648 "cell_type": "code",
649 "execution_count": 65,
650 "metadata": {
651 "collapsed": false
652 },
653 "outputs": [
654 {
655 "data": {
656 "text/plain": [
657 "'google.com!njae.me.uk!1459123200!1459209599.xml'"
658 ]
659 },
660 "execution_count": 65,
661 "metadata": {},
662 "output_type": "execute_result"
663 }
664 ],
665 "source": [
666 "zfp.infolist()[0].filename"
667 ]
668 },
669 {
670 "cell_type": "code",
671 "execution_count": 66,
672 "metadata": {
673 "collapsed": true
674 },
675 "outputs": [],
676 "source": [
677 "def walk(node, indent=0):\n",
678 " for child in node:\n",
679 " print(' '*indent, child.tag, ':', child.text.strip())\n",
680 " walk(child, indent+2)"
681 ]
682 },
683 {
684 "cell_type": "code",
685 "execution_count": 67,
686 "metadata": {
687 "collapsed": true
688 },
689 "outputs": [],
690 "source": [
691 "zfp.close()"
692 ]
693 },
694 {
695 "cell_type": "code",
696 "execution_count": 68,
697 "metadata": {
698 "collapsed": false
699 },
700 "outputs": [
701 {
702 "name": "stdout",
703 "output_type": "stream",
704 "text": [
705 " report_metadata : \n",
706 " org_name : google.com\n",
707 " email : noreply-dmarc-support@google.com\n",
708 " extra_contact_info : https://support.google.com/a/answer/2466580\n",
709 " report_id : 15410706527896810898\n",
710 " date_range : \n",
711 " begin : 1459123200\n",
712 " end : 1459209599\n",
713 " policy_published : \n",
714 " domain : njae.me.uk\n",
715 " adkim : r\n",
716 " aspf : r\n",
717 " p : none\n",
718 " sp : none\n",
719 " pct : 100\n",
720 " record : \n",
721 " row : \n",
722 " source_ip : 212.69.55.62\n",
723 " count : 3\n",
724 " policy_evaluated : \n",
725 " disposition : none\n",
726 " dkim : pass\n",
727 " spf : pass\n",
728 " identifiers : \n",
729 " header_from : njae.me.uk\n",
730 " auth_results : \n",
731 " dkim : \n",
732 " domain : njae.me.uk\n",
733 " result : pass\n",
734 " spf : \n",
735 " domain : njae.me.uk\n",
736 " result : pass\n"
737 ]
738 }
739 ],
740 "source": [
741 "with zipfile.ZipFile(io.BytesIO(pmsg.get_payload(decode=True))) as zf:\n",
742 " fn = zf.infolist()[0].filename\n",
743 " contents = zf.read(fn).decode('utf-8')\n",
744 " root = xml.etree.ElementTree.fromstring(contents)\n",
745 " walk(root)"
746 ]
747 },
748 {
749 "cell_type": "code",
750 "execution_count": 88,
751 "metadata": {
752 "collapsed": false
753 },
754 "outputs": [
755 {
756 "data": {
757 "text/plain": [
758 "b'Return-Path: <noreply@dmarc.yahoo.com>\\r\\nDelivered-To: neil@njae.me.uk\\r\\nReceived: from localhost (localhost [127.0.0.1])\\r\\n\\tby mail.njae.me.uk (Postfix) with ESMTP id 2F3B2B4\\r\\n\\tfor <neil@njae.me.uk>; Mon, 23 Nov 2015 16:53:20 +0000 (GMT)\\r\\nX-Virus-Scanned: Debian amavisd-new at njae.me.uk\\r\\nAuthentication-Results: ogedei.njae.me.uk (amavisd-new);\\r\\n\\tdkim=pass (2048-bit key) header.d=yahoo.com\\r\\nReceived: from mail.njae.me.uk ([127.0.0.1])\\r\\n\\tby localhost (ogedei.njae.me.uk [127.0.0.1]) (amavisd-new, port 10024)\\r\\n\\twith ESMTP id phn6BeTXjy5q for <neil@njae.me.uk>;\\r\\n\\tMon, 23 Nov 2015 16:53:17 +0000 (GMT)\\r\\nReceived-SPF: None (no SPF record) identity=mailfrom; client-ip=98.138.229.247; helo=n4-vm7.bullet.mail.ne1.yahoo.com; envelope-from=noreply@dmarc.yahoo.com; receiver=dmarc@njae.me.uk \\r\\nAuthentication-Results: mail.njae.me.uk; dkim=pass\\r\\n\\treason=\"2048-bit key; unprotected key\"\\r\\n\\theader.d=yahoo.com header.i=@yahoo.com header.b=dV1Y/4Bc;\\r\\n\\tdkim-adsp=none (unprotected policy); dkim-atps=neutral\\r\\nReceived: from n4-vm7.bullet.mail.ne1.yahoo.com (n4-vm7.bullet.mail.ne1.yahoo.com [98.138.229.247])\\r\\n\\tby mail.njae.me.uk (Postfix) with ESMTPS id A0EA23F\\r\\n\\tfor <dmarc@njae.me.uk>; Mon, 23 Nov 2015 16:53:16 +0000 (GMT)\\r\\nDKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1448297595; bh=oUT0dgwPXhYXV7MKOeA6qc/HcuG/XlY+/W2VclJfB2U=; h=Date:From:To:Subject:From:Subject; b=dV1Y/4Bc0OUvcxyeQZb7hvNYcMSim3elky+sVqi9TMTXDnOOvrzUhZYuz2FMfbQefAz5720bX7vuztbVJAcSWMw3AgNBWfSLyJ2hCLFCipY+R7uqDBA6uAz9WY0jfVVUsyr8Naz2+0J1bK6DAF76AQnfNW0I/2uWjOncYa6YsHjAHs/iOhimhzn0DBrHYW5bU99OSndh7ixjywLryJobMInXWdB8pBXxji6H6C3+80Bn1ZoEGWco5Dwr7W/7LlWlURFxLybxuOBLfAi9ihosOeIUyEpycTOz16VSdG/lm5ycxStdlmw6AXc8GkR6jHkOAZQbm6W3vlFNzvUQbtRWQg==\\r\\nReceived: from [98.138.101.135] by n4.bullet.mail.ne1.yahoo.com with NNFMP; 23 Nov 2015 16:53:15 -0000\\r\\nReceived: from [98.138.237.130] by t7.bullet.mail.ne1.yahoo.com with NNFMP; 23 Nov 2015 16:53:15 -0000\\r\\nReceived: from [127.0.0.1] by launcher100.asd.mail.corp.ne1.yahoo.com with NNFMP; 23 Nov 2015 16:53:15 -0000\\r\\nX-Yahoo-Newman-Property: asdreport\\r\\nX-Yahoo-Newman-Id: 1448246712.259522\\r\\nMIME-Version: 1.0\\r\\nContent-Transfer-Encoding: binary\\r\\nContent-Type: multipart/mixed; boundary=\"_----------=_14482975952874280\"\\r\\nX-Mailer: MIME::Lite 3.027 (F2.73; A2.04; B3.13; Q3.13)\\r\\nDate: Mon, 23 Nov 2015 08:53:15 -0800\\r\\nFrom: noreply@dmarc.yahoo.com\\r\\nTo: dmarc@njae.me.uk\\t\\r\\nSubject: Report Domain: njae.me.uk Submitter: yahoo.com Report-ID: <1448246712.259522>\\r\\nMessage-Id: <1448297594.757634@dmarc.yahoo.com>\\r\\n\\r\\n This is a multi-part message in MIME format.\\r\\n\\r\\n--_----------=_14482975952874280\\r\\nContent-Disposition: inline\\r\\nContent-Length: 44\\r\\nContent-Transfer-Encoding: binary\\r\\nContent-Type: text/plain\\r\\n\\r\\nThis is an aggregate report from Yahoo! Inc.\\r\\n--_----------=_14482975952874280\\r\\nContent-Disposition: attachment; filename=\"yahoo.com!njae.me.uk!1448150400!1448236799.zip\"\\r\\nContent-Transfer-Encoding: base64\\r\\nContent-Type: application/x-zip-compressed; name=\"yahoo.com!njae.me.uk!1448150400!1448236799.zip\"\\r\\n\\r\\nUEsDBBQAAAAIAKdGd0dVgJtgpQEAACMEAAAuABwAeWFob28uY29tIW5qYWUu\\r\\nbWUudWshMTQ0ODE1MDQwMCExNDQ4MjM2Nzk5LnhtbFVUCQADekRTVnpEU1Z1\\r\\neAsAAQQAAAAABAAAAACVU8tyozAQPGe/guQDJGBtJ67SyrnuJ+yJksVga40e\\r\\nJYns5u8zGFlgO1WpnBiaVk/3aGC7/7ov3sAHZc2vp4qUTzv+8IN1AO1eyBPW\\r\\nRcE8OOtjoyGKVkRxBhG2/tAYoYH/EUdrH4vfRhJGM5pYoIXqubMhahEi+NdW\\r\\nCy/J+3iGSKsZnRiJnnqpller1Uu92jxXNanX23VdMzp/TGy0A40X5nBph9ge\\r\\nDsqcT1frclWWjE5IJoBJ4j83z9ttgQZMFqQ3irnnVXjmbK/ke+OGfa/CEWY/\\r\\nFrMYbv4KIBrIcELBCUoE0Z6U5p7RqbigwXVncHwmzHFjDTDqMiAjr8Y4YzF5\\r\\n+9QGjlBany15+2+OHuzgJTTK8c2a1CUpSYVjndFMlHYw2I7Rqch46ghvoh9w\\r\\nUm3+MoZXAa9ZRVyl5H2JLIljdCdCQMY8hckgDqDDdUBTeRSLpLd98XpyPKZa\\r\\nMFF1Crd5PnkE0YJvOm/11bUs8YvWvQATQzw2HsLQx4Xoreuvrj1t9qiScqeX\\r\\nOeCVJFuG/6Z+sF2cJnjXY7Fd9C7YyE97w+ji//8AUEsBAh4DFAAAAAgAp0Z3\\r\\nR1WAm2ClAQAAIwQAAC4AGAAAAAAAAQAAAKSBAAAAAHlhaG9vLmNvbSFuamFl\\r\\nLm1lLnVrITE0NDgxNTA0MDAhMTQ0ODIzNjc5OS54bWxVVAUAA3pEU1Z1eAsA\\r\\nAQQAAAAABAAAAABQSwUGAAAAAAEAAQB0AAAADQIAAAAA\\r\\n\\r\\n--_----------=_14482975952874280--\\r\\n'"
759 ]
760 },
761 "execution_count": 88,
762 "metadata": {},
763 "output_type": "execute_result"
764 }
765 ],
766 "source": [
767 "msg1 = mailbox.fetch(b'1', '(RFC822)')[1][0][1]\n",
768 "msg1"
769 ]
770 },
771 {
772 "cell_type": "code",
773 "execution_count": 89,
774 "metadata": {
775 "collapsed": false
776 },
777 "outputs": [
778 {
779 "data": {
780 "text/plain": [
781 "'multipart/mixed'"
782 ]
783 },
784 "execution_count": 89,
785 "metadata": {},
786 "output_type": "execute_result"
787 }
788 ],
789 "source": [
790 "pmsg1 = email.message_from_bytes(msg1)\n",
791 "pmsg1.get_content_type()"
792 ]
793 },
794 {
795 "cell_type": "code",
796 "execution_count": 90,
797 "metadata": {
798 "collapsed": false
799 },
800 "outputs": [
801 {
802 "name": "stdout",
803 "output_type": "stream",
804 "text": [
805 "None\n",
806 "None\n",
807 "yahoo.com!njae.me.uk!1448150400!1448236799.zip\n"
808 ]
809 }
810 ],
811 "source": [
812 "for part in pmsg1.walk():\n",
813 " print(part.get_filename())"
814 ]
815 },
816 {
817 "cell_type": "code",
818 "execution_count": 91,
819 "metadata": {
820 "collapsed": false
821 },
822 "outputs": [
823 {
824 "name": "stdout",
825 "output_type": "stream",
826 "text": [
827 "This is an aggregate report from Yahoo! Inc. text/plain\n",
828 "UEsDBBQAAAAIAKdGd0dVgJtgpQEAACMEAAAuABwAeWFob28uY29tIW5qYWUu\r\n",
829 "bWUudWshMTQ0ODE1MDQwMCExNDQ4MjM2Nzk5LnhtbFVUCQADekRTVnpEU1Z1\r\n",
830 "eAsAAQQAAAAABAAAAACVU8tyozAQPGe/guQDJGBtJ67SyrnuJ+yJksVga40e\r\n",
831 "JYns5u8zGFlgO1WpnBiaVk/3aGC7/7ov3sAHZc2vp4qUTzv+8IN1AO1eyBPW\r\n",
832 "RcE8OOtjoyGKVkRxBhG2/tAYoYH/EUdrH4vfRhJGM5pYoIXqubMhahEi+NdW\r\n",
833 "Cy/J+3iGSKsZnRiJnnqpller1Uu92jxXNanX23VdMzp/TGy0A40X5nBph9ge\r\n",
834 "DsqcT1frclWWjE5IJoBJ4j83z9ttgQZMFqQ3irnnVXjmbK/ke+OGfa/CEWY/\r\n",
835 "FrMYbv4KIBrIcELBCUoE0Z6U5p7RqbigwXVncHwmzHFjDTDqMiAjr8Y4YzF5\r\n",
836 "+9QGjlBany15+2+OHuzgJTTK8c2a1CUpSYVjndFMlHYw2I7Rqch46ghvoh9w\r\n",
837 "Um3+MoZXAa9ZRVyl5H2JLIljdCdCQMY8hckgDqDDdUBTeRSLpLd98XpyPKZa\r\n",
838 "MFF1Crd5PnkE0YJvOm/11bUs8YvWvQATQzw2HsLQx4Xoreuvrj1t9qiScqeX\r\n",
839 "OeCVJFuG/6Z+sF2cJnjXY7Fd9C7YyE97w+ji//8AUEsBAh4DFAAAAAgAp0Z3\r\n",
840 "R1WAm2ClAQAAIwQAAC4AGAAAAAAAAQAAAKSBAAAAAHlhaG9vLmNvbSFuamFl\r\n",
841 "Lm1lLnVrITE0NDgxNTA0MDAhMTQ0ODIzNjc5OS54bWxVVAUAA3pEU1Z1eAsA\r\n",
842 "AQQAAAAABAAAAABQSwUGAAAAAAEAAQB0AAAADQIAAAAA\r\n",
843 " application/x-zip-compressed\n"
844 ]
845 }
846 ],
847 "source": [
848 "for p in pmsg1.get_payload():\n",
849 " print(p.get_payload(), p.get_content_type())"
850 ]
851 },
852 {
853 "cell_type": "code",
854 "execution_count": 92,
855 "metadata": {
856 "collapsed": false
857 },
858 "outputs": [
859 {
860 "name": "stdout",
861 "output_type": "stream",
862 "text": [
863 "application/x-zip-compressed <zipfile.ZipFile object at 0x7f6538172208>\n"
864 ]
865 }
866 ],
867 "source": [
868 "for p in pmsg1.get_payload():\n",
869 " if 'zip' in p.get_content_type():\n",
870 " print(p.get_content_type(), zipfile.ZipFile(io.BytesIO(p.get_payload(decode=True))))"
871 ]
872 },
873 {
874 "cell_type": "code",
875 "execution_count": 93,
876 "metadata": {
877 "collapsed": false
878 },
879 "outputs": [
880 {
881 "name": "stdout",
882 "output_type": "stream",
883 "text": [
884 "application/x-zip-compressed\n",
885 " report_metadata : \n",
886 " org_name : Yahoo! Inc.\n",
887 " email : postmaster@dmarc.yahoo.com\n",
888 " report_id : 1448246712.259522\n",
889 " date_range : \n",
890 " begin : 1448150400\n",
891 " end : 1448236799\n",
892 " policy_published : \n",
893 " domain : njae.me.uk\n",
894 " adkim : r\n",
895 " aspf : r\n",
896 " p : none\n",
897 " pct : 100\n",
898 " record : \n",
899 " row : \n",
900 " source_ip : 65.20.0.12\n",
901 " count : 1\n",
902 " policy_evaluated : \n",
903 " disposition : none\n",
904 " dkim : pass\n",
905 " spf : fail\n",
906 " identifiers : \n",
907 " header_from : njae.me.uk\n",
908 " auth_results : \n",
909 " dkim : \n",
910 " domain : njae.me.uk\n",
911 " result : pass\n",
912 " spf : \n",
913 " domain : njae.me.uk\n",
914 " result : softfail\n"
915 ]
916 }
917 ],
918 "source": [
919 "for p in pmsg1.get_payload():\n",
920 " if 'zip' in p.get_content_type():\n",
921 " print(p.get_content_type())\n",
922 " with zipfile.ZipFile(io.BytesIO(p.get_payload(decode=True))) as zf:\n",
923 " fn = zf.infolist()[0].filename\n",
924 " contents = zf.read(fn).decode('utf-8')\n",
925 " root = xml.etree.ElementTree.fromstring(contents)\n",
926 " walk(root)"
927 ]
928 },
929 {
930 "cell_type": "code",
931 "execution_count": 105,
932 "metadata": {
933 "collapsed": true
934 },
935 "outputs": [],
936 "source": [
937 "def xml_of_part(part):\n",
938 " with zipfile.ZipFile(io.BytesIO(part.get_payload(decode=True))) as zf:\n",
939 " fn = zf.infolist()[0].filename\n",
940 " contents = zf.read(fn).decode('utf-8')\n",
941 " return xml.etree.ElementTree.fromstring(contents)"
942 ]
943 },
944 {
945 "cell_type": "code",
946 "execution_count": 98,
947 "metadata": {
948 "collapsed": true
949 },
950 "outputs": [],
951 "source": [
952 "def xml_of(message):\n",
953 " reports = []\n",
954 " if message.is_multipart():\n",
955 " for p in pmsg1.get_payload():\n",
956 " if 'zip' in p.get_content_type():\n",
957 " reports += [xml_of_part(p)]\n",
958 " else:\n",
959 " reports = [xml_of_part(message)]\n",
960 " return reports"
961 ]
962 },
963 {
964 "cell_type": "code",
965 "execution_count": 104,
966 "metadata": {
967 "collapsed": false
968 },
969 "outputs": [
970 {
971 "data": {
972 "text/plain": [
973 "[('google.com!njae.me.uk!1459123200!1459209599.xml',\n",
974 " <Element 'feedback' at 0x7f6538174d68>)]"
975 ]
976 },
977 "execution_count": 104,
978 "metadata": {},
979 "output_type": "execute_result"
980 }
981 ],
982 "source": [
983 "xml_of(pmsg)"
984 ]
985 },
986 {
987 "cell_type": "code",
988 "execution_count": 102,
989 "metadata": {
990 "collapsed": false
991 },
992 "outputs": [
993 {
994 "name": "stdout",
995 "output_type": "stream",
996 "text": [
997 " report_metadata : \n",
998 " org_name : Yahoo! Inc.\n",
999 " email : postmaster@dmarc.yahoo.com\n",
1000 " report_id : 1448246712.259522\n",
1001 " date_range : \n",
1002 " begin : 1448150400\n",
1003 " end : 1448236799\n",
1004 " policy_published : \n",
1005 " domain : njae.me.uk\n",
1006 " adkim : r\n",
1007 " aspf : r\n",
1008 " p : none\n",
1009 " pct : 100\n",
1010 " record : \n",
1011 " row : \n",
1012 " source_ip : 65.20.0.12\n",
1013 " count : 1\n",
1014 " policy_evaluated : \n",
1015 " disposition : none\n",
1016 " dkim : pass\n",
1017 " spf : fail\n",
1018 " identifiers : \n",
1019 " header_from : njae.me.uk\n",
1020 " auth_results : \n",
1021 " dkim : \n",
1022 " domain : njae.me.uk\n",
1023 " result : pass\n",
1024 " spf : \n",
1025 " domain : njae.me.uk\n",
1026 " result : softfail\n"
1027 ]
1028 }
1029 ],
1030 "source": [
1031 "walk(xml_of(pmsg1)[0])"
1032 ]
1033 },
1034 {
1035 "cell_type": "code",
1036 "execution_count": 73,
1037 "metadata": {
1038 "collapsed": false
1039 },
1040 "outputs": [
1041 {
1042 "ename": "RuntimeError",
1043 "evalue": "No active exception to reraise",
1044 "output_type": "error",
1045 "traceback": [
1046 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
1047 "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)",
1048 "\u001b[1;32m<ipython-input-73-26814ed17a01>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mraise\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1049 "\u001b[1;31mRuntimeError\u001b[0m: No active exception to reraise"
1050 ]
1051 }
1052 ],
1053 "source": [
1054 "raise"
1055 ]
1056 },
1057 {
1058 "cell_type": "code",
1059 "execution_count": null,
1060 "metadata": {
1061 "collapsed": false
1062 },
1063 "outputs": [],
1064 "source": [
1065 "mailbox.close()"
1066 ]
1067 },
1068 {
1069 "cell_type": "code",
1070 "execution_count": null,
1071 "metadata": {
1072 "collapsed": false
1073 },
1074 "outputs": [],
1075 "source": [
1076 "mailbox.logout()"
1077 ]
1078 },
1079 {
1080 "cell_type": "code",
1081 "execution_count": null,
1082 "metadata": {
1083 "collapsed": true
1084 },
1085 "outputs": [],
1086 "source": []
1087 }
1088 ],
1089 "metadata": {
1090 "kernelspec": {
1091 "display_name": "Python 3",
1092 "language": "python",
1093 "name": "python3"
1094 },
1095 "language_info": {
1096 "codemirror_mode": {
1097 "name": "ipython",
1098 "version": 3
1099 },
1100 "file_extension": ".py",
1101 "mimetype": "text/x-python",
1102 "name": "python",
1103 "nbconvert_exporter": "python",
1104 "pygments_lexer": "ipython3",
1105 "version": "3.4.3+"
1106 }
1107 },
1108 "nbformat": 4,
1109 "nbformat_minor": 0
1110 }