使用Python和imaplib处理编码消息

3
在过去几天中,我一直在编写一个脚本,它可以解析自动生成的帮助台工单并将其内容存储到数据库中。在测试过程中,我遇到了几个似乎被编码了的电子邮件,这导致脚本无法正常运行。以下是其中一个 RFC822 的示例:

"[(b'9255 (RFC822 {12558}', b'Delivered-To: XXXXXXXXX\r\nReceived: by 10.220.77.132 with SMTP id g4csp176213vck;\r\n Mon, 28 Jul 2014 09:37:05 -0700 (PDT)\r\nX-Received: by 10.67.30.130 with SMTP id ke2mr39896936pad.44.1406565425185;\r\n Mon, 28 Jul 2014 09:37:05 -0700 (PDT)\r\nReturn-Path: \r\nReceived: from XXXXXXXXX (XXXXXXXXX [74.125.149.112])\r\n by XXXXXXXXX with SMTP id yh3si18379315pab.170.2014.07.28.09.37.04\r\n for ;\r\n Mon, 28 Jul 2014 09:37:04 -0700 (PDT)\r\nReceived-SPF: none (XXXXXXXXX: XXXXXXXXX does not designate permitted sender hosts) client-ip=74.125.149.141;\r\nAuthentication-Results: XXXXXXXXX;\r\n spf=neutral (XXXXXXXXX: XXXXXXXXX does not designate permitted sender hosts) v\r\nReceived: from XXXXXXXXX ([74.125.149.141]) by XXXXXXXXX ([74.125.148.10]) with SMTP;\r\n\tMon, 28 Jul 2014 16:37:04 GMT\r\nReceived: from XXXXXXXXX ([209.85.213.178]) (using TLSv1) by XXXXXXXXX ([74.125.148.12]) with SXXXXXXXXX; Mon, 28 Jul 2014 09:37:04 PDT\r\nReceived: by XXXXXXXXX with SMTP id uq10sf3897971igb.11\r\n for ; Mon, 28 Jul 2014 09:37:03 -0700 (PDT)\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:from:to:date:subject:message-id\r\n :x-original-sender:x-original-authentication-results:precedence\r\n :mailing-list:list-id:list-post:list-help:list-archive\r\n :list-unsubscribe:content-type:content-transfer-encoding;\r\n bh=H+FlcmWQAFURCHnDFK/bNHUOvofUAPB8bcDYlBceyxE=;\r\n b=LoR8D1MK8eoDG9DLkP9gkfR82+EGUIEeOTLpqymqxyx9HJl0C9BW6iwPD7OgrJFbV4\r\n xWYumML6RCinpcZc4d6VCDSw+akXLdhiol+lbWJBZWvgN4BQPgHJwCF6EaHYf3h8j4tq\r\n /KAZIkXowz4/WKW8STri4BVjlA2a4LPwV/wazP+I9Kvr1yz433ymd+iCY1V0NexTI+cb\r\n 9m3IyL8sqB0+Efyu+XQrR2y7ZdXDPwdzGS/WNHJBtKga5xPDtPga+21pozVMCbuCc/cj\r\n Cx9me6cVo19PrNKIOtSimDZ1u6ELdpVr4iprYQSaT8arYYiCPHJE34OFPlqspTxjm1eI\r\n ngyg==\r\nX-Gm-Message-State: ALoCoQkb908wRLWedDE+CtRzjD6VwC6Nja6duttyoVAdf+TFFn+uCxFB0Kwd5jk411YWdMD2G6HuFeRj2y3q7EzTe/vTvPLfymDIkHwZQa1r1zQ8I1B254t6v01ourR8InF/41aPGnnD\r\nX-Received: by 10.42.48.74 with SMTP id r10mr26049776icf.18.1406565423564;\r\n Mon, 28 Jul 2014 09:37:03 -0700 (PDT)\r\nX-Received: by 10.42.48.74 with SMTP id r10mr26049775icf.18.1406565423537;\r\n Mon, 28 Jul 2014 09:37:03 -0700 (PDT)\r\nX-BeenThere: XXXXXXXXX\r\nReceived: by 10.50.153.15 with SMTP id vc15ls1961411igb.42.gmail; Mon, 28 Jul\r\n 2014 09:37:03 -0700 (PDT)\r\nX-Received: by 10.66.254.37 with SMTP id af5mr39703901pad.113.1406565423331;\r\n Mon, 28 Jul 2014 09:37:03 -0700 (PDT)\r\nReceived: from XXXXXXXXX (XXXXXXXXX [74.125.149.158])\r\n by XXXXXXXXX with SMTP id da9si9190520pdb.425.2014.07.28.09.37.02\r\n for ;\r\n Mon, 28 Jul 2014 09:37:03 -0700 (PDT)\r\nReceived-SPF: none (XXXXXXXXX: XXXXXXXXX does not designate permitted sender hosts) client-ip=207.211.31.47;\r\nReceived: from XXXXXXXXX ([207.211.31.47]) by XXXXXXXXX ([74.125.148.10]) with SMTP;\r\n\tMon, 28 Jul 2014 16:37:02 GMT\r\nReceived: from XXXXXXXXX (XXXXXXXXX\r\n [129.135.112.43]) (Using TLS) by XXXXXXXXX; Mon, 28 Jul\r\n 2014 12:37:01 -0400\r\nReceived: from XXXXXXXXX (129.135.128.210) by XXXXXXXXX\r\n (129.135.112.45) with Microsoft SMTP Server id 14.3.181.6; Mon, 28 Jul 2014\r\n 11:36:58 -0500\r\nReceived: from ITSDC50 ([127.0.0.1]) by XXXXXXXXX with Microsoft\r\n SMTPSVC(6.0.3790.4675);\t Mon, 28 Jul 2014 11:36:58 -0500\r\nMIME-Version: 1.0\r\nFrom: \r\nTo: \r\nDate: Mon, 28 Jul 2014 11:36:58 -0500\r\nSubject: Dispatching IT/Cares Case: SC-118656-7031\r\nMessage-ID: \r\nX-OriginalArrivalTime: 28 Jul 2014 16:36:58.0498 (UTC) FILETIME=[26792E20:01CFAA82]\r\nX-MC-Unique: 114072812370105901\r\nX-pstn-levels: (S:85.19264/99.90000 CV:99.9000 FC:95.5390 LC:95.5390 R:95.9108 P:95.9108 M:97.0282 C:98.6951 )\r\nX-pstn-dkim: 0 skipped:not-enabled\r\nX-pstn-settings: 1 (0.1500:0.1500) cv gt6 gt5 gt4 gt3 gt2 gt1\r\nX-pstn-addresses: from [1094/49]\r\nX-pstn-nxpr: disp=neutral, envrcpt=XXXXXXXXX\r\nX-pstn-nxp: bodyHash=9500f76054cf97c2a0eec20f8940768958faf6c3, headerHash=eb9362a172738328a8b8a8ae406c42a63f5545f9, keyName=4, rcptHash=e0dd4695780dcb1818e78b482447ac976870bcbe, sourceip=207.211.31.47, version=1\r\nX-Original-Sender: XXXXXXXXX\r\nX-Original-Authentication-Results: XXXXXXXXX; spf=neutral\r\n (XXXXXXXXX: XXXXXXXXX does not designate permitted sender\r\n hosts) smtp.mail=XXXXXXXXX\r\nPrecedence: list\r\nMailing-list: list XXXXXXXXX contact XXXXXXXXX\r\nList-ID: \r\nX-Google-Group-Id: 511158325204\r\nList-Post: , \r\nList-Help: , \r\nList-Archive: \r\nList-Unsubscribe: ,\r\n \r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\nX-pstn-neptune: 0/0/0.00/0\r\nX-pstn-levels: (S:65.87536/99.90000 CV:99.9000 FC:95.5390 LC:95.5390 R:95.9108 P:95.9108 M:97.0282 C:98.6951 )\r\nX-pstn-dkim: 0 skipped:not-enabled\r\nX-pstn-settings: 5 (2.0000:0.0200) s cv fc lc gt6 gt5 gt4 GT3 gt2 gt1 ft lt r p m c \r\nX-pstn-addresses: from [db-null] \r\nX-pstn-nxpr: disp=neutral, envrcpt=XXXXXXXXX\r\nX-pstn-nxp: bodyHash=45f4f2e59005199791055b3d1f937e1d3fb7d7ca, headerHash=ca981838d5783da04d9d38e3fffc3f5907100fcf, keyName=4, rcptHash=4f3dee680a09495dc5b095849a4225f49c4a45f4, sourceip=74.125.149.141, version=1\r\n\r\nQ2FzZSBOdW1iZXI6ICAgICAgICAgU0MtMTE4NjU2LTcwMzENClNldmVyaXR5IExldmVsOiAg\r\nICAgIE5vcm1hbA0KQWNjb3VudCBOYW1lOiAgICAgICAgSENSIE1hbm9yY2FyZQ0KU2l0ZSBO\r\nYW1lOiAgICAgICAgICAgMzAxDQpDbGllbnQgTmFtZTogICAgICAgICBBbWFuZGEgUGVucm9k\r\nDQpDbGllbnQgUGhvbmU6ICAgICAgICANCkNsaWVudCBNYWlsUGF0aDogICAgIGFtYW5kYS5w\r\nZW5yb2RAaGNyLW1hbm9yY2FyZS5jb20NCkNhc2UgUHJvZHVjdDogICAgICAgIEhDUi1GaWVs\r\nZCBEZXBsb3ltZW50DQpDYXNlIEtleXdvcmQ6ICAgICAgICBGRC1BU0QNCg0KDQoNClBsZWFz\r\nZSBDbGljayBCZWxvdyB0byBVcGRhdGUgQ2FzZTogDQoNCg0KUHJvYmxlbSBEZXNjcmlwdGlv\r\nbg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq\r\nKioqKioqKioNCjw8LSBUaGlzIENhc2UgaXMgYSBTdWItQ2FzZSBvZjogRU0tMTE4NjU2LTcw\r\nMTcgIC0+Pg0KDQpQbGVhc2UgZGlzcGF0Y2ggd2lyaW5nIHRlY2ggdG8gaW5zdGFsbCB0d28g\r\nbmV3IG5ldHdvcmsgZHJvcHMuIE9uZSBpbiB0aGUgTnVyc2UgTWFuYWdlIE9mZmljZSBhbmQg\r\nb25lIGluIHRoZSBDYXNlIE1hbmFnZW1lbnQgT2ZmaWNlDQoNCkxvY2F0aW9uIG9mIGRyb3Ag\r\naXM6ICAgICAgIE51cnNlIE1hbmFnZXIgT2ZmaWNlICYgQ2FzZSBNYW5hZ2VtZW50IE9mZmlj\r\nZQ0KUGhvbmUgRXh0IChJZiBQaG9uZSBEcm9wKTogbi9hDQoNCk9ubHkgQ2F0NWUgUGxlbnVt\r\nIFJhdGVkIChDTVApIGNhYmxlIGNhbiBiZSB1c2VkIGZvciBuZXcgZHJvcHMuIEFkZGluZyBS\r\nYWNld2F5L1dpcmVtb2xkIGlzIG5vdCBhbiBvcHRpb24gd2l0aG91dCBwcmlvciBhcHByb3Zh\r\nbC4gSWYgUmFjZXdheS9XaXJlbW9sZCBpcyByZXF1aXJlZCwgcGxlYXNlIG5vdGlmeSB5b3Vy\r\nIGJ1eWVyIGFuZCByZXF1ZXN0IHRoZXkgb2J0YWluIGFwcHJvdmFsLiBTaW5nbGUgZ2FuZyBm\r\nYWNlLXBsYXRlIHNob3VsZCBiZSB1c2VkIChzdXJmYWNlIG1vdW50IGJveGVzIHNob3VsZCBu\r\nb3QgYmUgdXNlZCB1bmxlc3MgaW5zdGFsbGluZyBhIFdBUCwgUE9DIHNjcmVlbiwgb3IgZ2l2\r\nZW4gY3VzdG9tZXIgYXBwcm92YWwpLiANCg0KRGF0YSBMYWJlbGluZzoNCi0tLS0tLS0tLS0t\r\nLS0tDQpXYWxsIEphY2sgQXJlYToNCkVhY2ggd2FsbCBqYWNrIHdpbGwgYmUgbGFiZWxlZCBp\r\nbiBzZXF1ZW5jZSBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuDQpBbGwgbGFiZWxzIHdp\r\nbGwgYmUgY29tcHV0ZXIgZ2VuZXJhdGVkLg0KVGhlIGxhYmVsaW5nIHNlcXVlbmNlIHdpbGwg\r\nYmU6DQpDbG9zZXQsIFJhY2ssIFBhdGNoIFBhbmVsLCBQYXRjaCBQYW5lbCBQb3J0Li4uDQpF\r\neGFtcGxlIG9mIGhvdyBkcm9wIHdvdWxkIGJlIGxhYmVsZWQ6IDEtQi0xLTI0DQpUaGUgYWJv\r\ndmUgbGFiZWwgd291bGQgcmVwcmVzZW50OiANCiAgICAgQ2xvc2V0IDENCiAgICAgUmFjayBC\r\nIA0KICAgICBQYXRjaCBQYW5lbCAxIA0KICAgICBQYXRjaCBQYW5lbCBQb3J0IDI0DQoNCkRh\r\ndGEgTURGL0lERiBsYWJlbGluZzoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\r\nDQpFYWNoIFJhY2sgd2lsbCBiZSBsYWJlbGVkIOKAnENsb3NldCB4IFJhY2sgeeKAnSAoeCA9\r\nIDEtNC4gQ2xvc2V0IDEgc2hvdWxkIGJlIHRoZSBNREYuIENsb3NldCAyIHNob3VsZCBiZSBJ\r\nREYjMSxldGPigKYpIEVhY2ggUGF0Y2ggUGFuZWwgd2lsbCBiZSBsYWJlbGVkIOKAnFBhdGNo\r\nIFBhbmVsIHjigJ0gKHggPSAxLTQuKQ0KDQpTd2l0Y2hlcyBzaG91bGQgYmUgbGFiZWxlZCBB\r\nLUY6IFN3aXRjaCBBLCBTd2l0Y2ggQiwgZXRjLi4uDQoNCklmIFJhY2tzLCBQYXRjaCBQYW5l\r\nbHMsIGFuZCBzd2l0Y2hlcyBhdCB5b3VyIGRlc3RpbmF0aW9uIGFyZSBub3QgcHJvcGVybHkg\r\nbGFiZWxlZCwgcGxlYXNlIGNhbGwgSU5HUiBjb250YWN0IHRvIHByb3Blcmx5IGlkZW50aWZ5\r\nIGVhY2ggY2xvc2V0LCByYWNrLCBhbmQgcGF0Y2ggcGFuZWwgaW4gb3JkZXIgdG8gaGF2ZSB0\r\nZWNobmljaWFuIHByb3Blcmx5IGxhYmVsIGVhY2guIElOR1IgdGVjaCBjYW4gYWxzbyBoZWxw\r\nIGxvY2F0ZSBhdmFpbGFibGUgc3dpdGNoIHBvcnRzIGlmIGFsbCBhcHBlYXJzIGZ1bGwuDQoN\r\nClBhdGNoIGRyb3AgZnJvbSBwYXRjaCBwYW5lbCB0byBmYWNpbGl0eSBzd2l0Y2ggYW5kIGZy\r\nb20gd2FsbCBqYWNrIHRvIG5ldHdvcmsgZGV2aWNlLiBQcm92aWRlIHBhdGNoIGNhYmxlIGZv\r\nciBjb21wdXRlciBvciBuZXR3b3JrIGRldmljZSB0byB3YWxsIGphY2sgaWYgbmVlZGVkLg0K\r\nDQoqKioqKkRBV EEgSk9CIERFTElWRVJBQkxFUyoqKioqOg0KLS0tLS0tLS0tLS0tLS0tLS0t\r\nLS0tLS0tLS0tLS0tLS0NCkRvd25sb2FkIGFuZCBzZW5kIGRyb3AgdGVzdCByZXN1bHRzIChp\r\nZiB5b3UgZG8gbm90IGhhdmUgYSBtYWNoaW5lIGNhcGFibGUgb2YgZG93bmxvYWRpbmcgdGVz\r\ndCByZXN1bHRzLCB0YWtlIHBpY3R1cmVzIG9mIHlvdXIgbGl2ZSB0ZXN0ZXIgc2hvd2luZyB0\r\naGUgZHJvcCBwYXNzZXMpIGFuZCBhIGRpZ2l0YWwgcGhvdG8gb2YgZWFjaCBwcm9wZXJseSBs\r\nYWJlbGVkIHdhbGwgamFjayANDQphbmQgMSBkaWdpdGFsIHBob3RvIG9mIHBhdGNoIHBhbmVs\r\nIHRoYXQgc2hvd3MgeW91ciBqb2IgaXMgcHJvcGVybHkgbGFiZWxlZCBhbmQgdGFnZ2VkIGFu\r\nZCBlbWFpbCB0byBBU0QgY29udGFjdC4NCg0KUGxlYXNlIGNhbGwgSU5HUiBjb250YWN0IHRv\r\nIGRpc2N1c3MgYW55IGlzc3VlcyB3aXRoIGpvYi4NCg0KSUYgV09SSyBJUyBDQU5DRUxMRUQg\r\nT1IgQ09NUExFVEUgVVBPTiBBUlJJVkFMIFBMRUFTRSBPQlRBSU4gUkVRVUVTVEVEIERFTElW\r\nRVJBQkxFUyBQUklPUiBUTyBMRUFWSU5HIFNJVEUuDQoNCklOR1IgQ29udGFjdCBpbmZvOg0K\r\nUmljayBNYXJ0aW4gYXQgODAwLTYwMy01NTAwIGV4dC4gNTExMSAobHVuY2ggMTowMHBtIC0g\r\nMjowMHBtIEVTVCkNClJpY2sgWWFuY2V5IGF0IDgwMC02MDMtNTUwMCBleHQuIDUxMTUgKGx1\r\nbmNoIDI6MDBwbSAtIDI6MzBwbSBFU1QpDQpEb3VnIEpvaG5zb24gYXQgODAwLTYwMy01NTAw\r\nIGV4dC4gNTIwMg0KU3RldmUgSmFrdWJpayBhdCA4MDAtNjAzLTU1MDAgZXh0LiA1NDU2DQpM\r\nb2dhbiBIYWdhIGF0IDgwMC02MDMtNTUwMCBleHQuIDU0NzYNClRyYXZpcyBCYWlsZXkgYXQg\r\nODAwLTYwMy01NTAwIGV4dC4gNTIwOQ0KSXNhYWMgRGlja3NvbiBhdCA4MDAtNjAzLTU1MDAg\r\nZXh0LiA1MTk4DQoNCk9OTFkgSUYgWU9VIEFSRSBVTkFCTEUgVE8gUkVBQ0ggSU5HUiBjb250\r\nYWN0LCBhZnRlciBsZWF2aW5nIG1lc3NhZ2VzIGZvciBlYWNoIHBlcnNvbiBsaXN0ZWQgYWJv\r\ndmUgYW5kIHdhaXRpbmcgNSBtaW51dGVzIGZvciBhIHJldHVybiBjYWxsLCBjb250YWN0Og0K\r\nVG9ueSBCdXRsZXIgYXQgODAwLTYwMy01NTAwIGV4dC4gNTE0MA0KQmFyYiBFZHdhcmRzIGF0\r\nIDgwMC00MjctMTkwMiBleHQuIDUxODMNCkRhdmUgSGlyZSBhdCA4MDAtNDI3LTE5MDIgZXh0\r\nLiA2NDE4DQoNCkFTRCBBZnRlciBIb3VycyBudW1iZXIgaXMgODI4LTYyNC0xMDk5IGFuZCBl\r\nbWFpbCBmb3IgdGhpcyBhY2NvdW50IGlzIHRlYW1pbnRlcmdyYXBoQGFzZC11c2EuY29tDQoN\r\nCjwwNy8yOC8xNCAxMTozNiBDYXNlIG9wZW5lZCBieTogIHJtYXJ0aW4gKDI1Nik3MzAtNTEx\r\nMT4NCg0KDQpQcm9ibGVtIFNvbHV0aW9uDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioq\r\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KUmVmZXJyZWQgZm9yIFJlc29sdXRp\r\nb24gVG86IEFTRA0KPDA3LzI4LzE0IDExOjM2IENhc2UgZWRpdGVkIGJ5OiBybWFydGluICgy\r\nNTYpNzMwLTUxMTE+DQoqfip+Kn4qfip+Kn4qfip+Kn4qfip+Kn4qfip+Kn4qfip+Kn4qfip+\r\nKn4qfip+Kn4qfip+Kg0KDQoNCg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f\r\nX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f\r\nX19fX19fX19fX19fX19fX18NCk5vdGljZSByZXF1aXJlZCBieSBsYXc6ICBUaGlzIGVtYWls\r\nIG1heSBjb25zdGl0dXRlIGFuIGFkdmVydGlzZW1lbnQgb3Igc29saWNpdGF0aW9uIHVuZGVy\r\nIFUuUy4gbGF3IGlmIGl0cyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYWR2ZXJ0aXNlIG9yIHBy\r\nb21vdGUgYSBjb21tZXJjaWFsIHByb2R1Y3Qgb3Igc2VydmljZS4gIFlvdSBtYXkgY2hvb3Nl\r\nIG5vdCB0byByZWNlaXZlIGFkdmVydGlzaW5nIGFuZCBwcm9tb3Rpb25hbCBtZXNzYWdlcyBm\r\ncm9tIEFTRCAoZXhjZXB0IGZvciB3d3cuYXNkLXVzYS5jb20sIHdoaWNoIG1hbmFnZXMgZW1h\r\naWwgcHJlZmVyZW5jZXMgdGhyb3VnaCBhIHNlcGFyYXRlIHByb2Nlc3MpIGF0IHRoaXMgZW1h\r\naWwgYWRkcmVzcyBieSBmb3J3YXJkaW5nIHRoaXMgbWVzc2FnZSB0byBsZWF2ZW1lYWxvbmVA\r\nYXNkLXVzYS5jb20uICBJZiB5b3UgZG8gc28sIHRoZSBzZW5kZXIgb2YgdGhpcyBlbWFpbCB3\r\naWxsIGJlIG5vdGlmaWVkIHByb21wdGx5IGFuZCB5b3Ugd2lsbCBub3QgYmUgY29udGFjdGVk\r\nIGFnYWluLiAgT3VyIHByaW5jaXBhbCBwb3N0YWwgYWRkcmVzcyBpcyA3NzUgR29kZGFyZCBD\r\nb3VydCBBbHBoYXJldHRhLCBHQSAgMzAwMDUuDQoNCg==\r\n'), b')']"

邮件内容是否编码?如果是,我该如何处理解码?


尝试使用高级库:https://github.com/ikvk/imap_tools - Vladimir
4个回答

4
您可以使用email包来完成此操作。您拥有一个列表,列表的第一项是一个元组,其中第二个元素是整个电子邮件消息。假设您在名为msg_bytes的变量中拥有该字节对象。您可以使用以下代码解析消息:
import email.parser
msg = email.parser.BytesParser().parsebytes(msg_bytes)

您可以访问邮件的不同部分(请参阅email.message.Message文档):

# get a bytes object containing the base64-decoded message
textbytes = msg.get_payload(decode=True)

# get the content charset
content_charset = msg.get_content_charset()

# decode the text to obtain a string object
text = textbytes.decode(content_charset)

这将能够处理大多数有效的电子邮件,如果不是全部。

我一直在尝试使用以下语句以及我认为它们在官方库文档(https://docs.python.org/3/library/email.parser.html 和 https://docs.python.org/3/library/email.message.html)中的等效语句,并收到以下错误:AttributeError: 'Parser'对象没有 'parsebytes' 属性,AttributeError: 'Parser'对象没有 'get_payload' 属性,AttributeError: 'Parser'对象没有 'get_content_charset' 属性。 - socialdtk
我已经在Windows上的全新3.4.1安装和来自Ubuntu软件仓库的python3上尝试过了。 - socialdtk
@socialdtk 抱歉,我犯了个错误。应该是使用BytesParser而不是Parser - Jonas Schäfer

2
尝试使用Imbox,这里无需修复编解码器。
因为imaplib是一个非常低级的库,返回的结果很难处理。 安装 pip install imbox 用法
from imbox import Imbox

with Imbox('imap.gmail.com',
        username='username',
        password='password',
        ssl=True,
        ssl_context=None,
        starttls=False) as imbox:

    all_inbox_messages = imbox.messages()
    for uid, message in all_inbox_messages:
        message.sent_from
        message.sent_to
        message.body

1
我会建议其他人使用上述的软件包。它运行得非常完美,而且与imap库相比也更简单。 - Prometheus

1

正文使用了base64编码(Content-Transfer-Encoding: base64),这与加密不同。将第一组字符粘贴到在线解码器中即可。

Q2FzZSBOdW1iZXI6ICAgICAgICAgU0MtMTE4NjU2LTcwMzENClNldmVyaXR5IExldmVsOiAg

"

" 被解码为 "

"。
Case Number:         SC-118656-7031
Severity Level:  

Python有解码base64的库,但如果imaplib没有内置的简化方法,我会感到失望。

1
要获取由Imaplib生成的base64编码的电子邮件,可以使用base64模块轻松解码,需要执行以下步骤。
# import python base64 and re modules
import base64
import re

# Save the encoded part in a variable, e.g re.search grabs the encoded part after string "version=1\r\n\r\n" and saves to the variable named 'decoded'.
decoded = re.search('version=1\r\n\r\n(.*)', email, re.DOTALL)

# prints the decoded message
print(base64.b64decode(decoded.group(1)))

如果你想获取两个字符串之间的编码部分,搜索表达式将是什么。
decoded = re.search('string1(.*)string2', email)

'email'变量包含了Imaplib生成的整个电子邮件内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接