如何使用python imaplib读取邮件?

问题描述 投票:0回答:1

我创建了一个邮件系统,可以读取邮件并向用户显示邮件内容。

我的代码除了能正常显示内容外,还能正常工作。我知道有些邮件使用html格式,所以想知道是否是这样。不管是哪种方式,我都需要帮助把它变成一个可读的格式,最好是看起来像原始的格式。

我得到的输出是

From: Google Community Team <[email protected]>
Subject: Finish setting up your new Google Account
Content: R29vZ2xlICANCjxodHRwczovL3d3dy5nb29nbGUuY29tL2FwcHNlcnZlL21rdC9wL0FELUZuRXhO
cjkzR21VVWhrSXg1NlQtNl9pM0xpMzRvT3hHeXZYX3BfUW9uR2QzWndYTGw1VTl0cnV5bHJ2ZnNS
QnEzLVJ1ck44eGlWN2ZXeG5FM0dYZ1pvR3ozQURlNGpJSG5BZEtZcE5uRFpSVGdyVzV0QXBZY1d4
WXhibHlKLUxHcVVucFRpVUlZS2g4WTg4YmZQWVB1eUJoMmZHRGM+DQoNCmJhbm5lcg0KDQpIaSBE
YW5pZWwsDQoNCldlbGNvbWUgdG8gR29vZ2xlLiBZb3VyIG5ldyBhY2NvdW50IGNvbWVzIHdpdGgg
YWNjZXNzIHRvIEdvb2dsZSBwcm9kdWN0cywgIA0KYXBwcywgYW5kIHNlcnZpY2VzLg0KDQpIZXJl
IGFyZSBhIGZldyB0aXBzIHRvIGdldCB5b3Ugc3RhcnRlZC4NCg0KU2VjdXJpdHkNCg0KQ29udHJv
bCB5b3VyIGFjY291bnQNCg0KQ2hvb3NlIHdoYXQncyByaWdodCBmb3IgeW91LiBSZXZpZXcgYW5k
IGFkanVzdCB5b3VyIHByaXZhY3kgYW5kIHNlY3VyaXR5ICANCnNldHRpbmdzIGFueSB0aW1lLg0K
DQpHb29nbGUgQWNjb3VudCAgDQo8aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9hcHBzZXJ2ZS9ta3Qv
cC9BRC1GbkV4T2JYQURQdzJVZmtqSGxBX21lcEQ1cEpFTU1DOGtya1BPUEJwYmtFMU1ZamdyMGFa
SmRTSk1ncHhmSzgya3BlV0dlcEtjV0k4Sy1ONzdTeDZjVFAwdVBlZmJ5NkJBTVZQNGpTYTRBcnhV
UFJvX0Z1LWp3Tjg2LW1QSTFwTk8zSGVFZzBLX0RtcUJkTDQyeUw2S0wtTmxvbTRuRkdqTEh4dEpS
bWI1N0NEbmIxQk50d1lYWUZrZ1ZQc1JHNEMxWGlXaXVsY3pqREFQLUtuNHBnPg0KDQpHU0ENCg0K
U3RheSBpbiB0aGUga25vdyB3aXRoIHRoZSBHb29nbGUgYXBwDQoNCkZpbmQgcXVpY2sgYW5zd2Vy
cywgZXhwbG9yZSB5b3VyIGludGVyZXN0cywgYW5kIHN0YXkgdXAgdG8gZGF0ZS4NCg0KVHJ5IGl0
ICANCjxodHRwczovL3d3dy5nb29nbGUuY29tL2FwcHNlcnZlL21rdC9wL0FELUZuRXpuajFPelZo
ejhhMGJIMlkxcV9UcGhKVUJ5eldzR01UbFNtY04yblNZUFhxcDNIaWpZUnV0bzUwbno1bnR6Y0ZV
VGxtT2VwODluMENPMGo3N2VvR2JCT2RhRWFwbGk3R1NWcTBHVWtWcms4U3JzM05qbUFLakFFemRw
aG5DQklIWWl6THZ2M0ltLVhBR2htX1VxMEZUZ2xoeW9KaHVnN0wzdGpxMzVUeUNXV3NoZEl3MG5i
bEgwYXBwanF4WFBSRUdfLVBXZkI1Z3cyRWlPRDQ3WjV0ZktwM0J1NHhILXdHYWY0SXJTX0tZTVdR
TTFULVRwZ21YR2NvYk85cjNVM0swPg0KDQphcHBzDQoNCk1vcmUgZnJvbSBHb29nbGUNCg0KRGlz
Y292ZXIgdGhlIGxhdGVzdCBhcHBzIGZyb20gR29vZ2xlLg0KDQpGb3IgQW5kcm9pZCAgDQo8aHR0
cHM6Ly93d3cuZ29vZ2xlLmNvbS9hcHBzZXJ2ZS9ta3QvcC9BRC1GbkV4SUgzWGx3NUxvNlVHRmVN
RGpNWUlNOTFiaXlrV0JVQWtpTG44VGRucjhIRzZGMXB4VjBYWXNKYk92VUNIOXhkUjk0V24zcXl6
NHVZOHRDZzNCRUpOM2s4cGRNRTVDUXlXaUhpS1Z6SS1EYl9aQ3A3bEhJTW85WWEtU29TdnRTZzAz
a1lLbmVqZkVnMzJiSWhFVnRmcE9xOWIySzJKdllOQVk4dGNILUg4bDh3bnFNckJQMWtsYjQ2b2ZC
WG9XUmtHVkRaSUFSNldZbU5xZ0k0bEVUZ25tVGRzek01ak1yWmJVaWcyNVJXTm9oN2tGbDl3RHFQ
SEVERmpzR0Z1VnBLQjVra3M2QnN4d1A5RU41RmFjcFZjOXpxQndMQWZYdXFWQ0tIV2tNTzNKVUpj
TlMyU2ZJakJ4WEQ5bVlxQWJodEE0M0VYV3JnQUk4cWx6elJDOGFEaDdWM2FXNjFGSWpFNDRlaURk
LTFIWVFDalU3RnhHbFRscHhYV3lORkN6ZlhHRjdEdkd6bWxtanE3VTJzWWYxQ09MRldHR0hJLXU1
VmwyU0xRdTZOZFZ4R3NIYjIzWHl2bzF6TnkxVjhPNDYtUFNka0ZLS21jdDIyRnh2TDd5QjA1RWVw
U1VESFF2WUozMUtPZExGSGFUVlotRW1ZT0drQm9xU1czcUVtRFhJRjRSenBfV3d0azYxd3pOc2pI
NTN3NkNRUTI3eGpZc1VFMD4NCg0KRm9yIGlPUyAgDQo8aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9h
cHBzZXJ2ZS9ta3QvcC9BRC1GbkV4dHp2RkZyVHNyN3dUTFZJZWZHSUxielhFalZQYVMzbW51bE9l
cUxKcUlIN3hTMVZ4VXNmYlpXaG1jNHhITGhZdmtLemcwNldqd0l5Z0tfb3VfNHdGSFNOaXB5UUhZ
YTByLXFSU1NiUnplR3ZHTnRYZVYzZFBqa0tNY1daamdRTW9nMmJDcFlmUWUxM0Z5RWNWMUkyNU5M
ZERSc0NWWlgzN0lkY29PZEJSSGV2WFJnME1zY2x4bzAwbHFDaVRjY3ZFUmJfbmNrWk02UVoweDdk
Z2JOdVp2dHp6ZFFXUjExYkxFRW8tMm1TVnYtaERkN2VOakY4NFEwVjBiNDloTDhOUU9OSGtVbWww
dFpfbExkT3F4R1E+DQoNCkZpbmQgTXkgRGV2aWNlDQoNCkZpbmQgeW91ciBwaG9uZQ0KDQpQaW5w
b2ludCB5b3VyIHBob25lJ3MgbG9jYXRpb24gIA0KPGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vYXBw
c2VydmUvbWt0L3AvQUQtRm5FdzktVXh6c0UyQlBvZW52b3ZKNVk4YjFFa0U1cjNDcXg1cUVEd0gt
Wk9YS1N3UXZNUmY0Z1BCWjR3MVdTR1cwYUJuV0FOYTFLdnZtczR4TDN3Vk5vSmlBUWRSZ21TTERQ
T1F6R0FiMVE0VUpBRk90cjhvWDhqWkVtTTRTbWNjQkhQLXpXTEhvemNtTFl5MmtXOTNDdklLdjAx
cG5oNlZUa0pZdmVEaXhKcWE4ZUtMbUlKcGczd1RJSThFWUg4PiAgDQphbmQgc2VjdXJlIGl0IHdp
dGggRmluZCBNeSBEZXZpY2UuDQoNCkZpbmQgQW5zd2Vycw0KDQpGaW5kIGFuc3dlcnMNCg0KVmlz
aXQgdGhlIEhlbHAgQ2VudGVyICANCjxodHRwczovL3d3dy5nb29nbGUuY29tL2FwcHNlcnZlL21r
dC9wL0FELUZuRXc1bVhubEJXU2ZzbVVIY0pXMl9kckY5dXhZNG01VzJEcDZVMDBjam51WFRaSk9j
cldYVEVqa2FiTVoxU0N0YkRjazZra2dvVGRPLXIxUi1xQlNpRVRBZDk3U01vYnB5bHNXZG9JOW93
S1Z2dDJ1OWozbFdWakZjNEVJbkNEZUlEYVhoR1AwSm9IYXpjdGJIakh5UXJxeDNkbFBSRzh4RG5q
V1FjdF8wSEt3bFdXY2t2XzkzbDNHV19XbD4gIA0KdG8gbGVhcm4gYWxsIGFib3V0IHlvdXIgbmV3
IEdvb2dsZSBBY2NvdW50Lg0KDQpHb29nbGUgTG9nbw0KDQpSZXBsaWVzIHRvIHRoaXMgZW1haWwg
YXJlbid0IG1vbml0b3JlZC4gSWYgeW91IGhhdmUgYSBxdWVzdGlvbiBhYm91dCB5b3VyICANCm5l
dyBhY2NvdW50LCB0aGUgSGVscCBDZW50ZXIgIA0KPGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vYXBw
c2VydmUvbWt0L3AvQUQtRm5Fd0xtMUdQLUtEZUZrUTRId2libnBPMWdsZzRtQXMxYXBEalJMeG1B
elM4My16NEhrajJZYjJ6RUlIelltTnpzTTJJdEJOWUtfMkVzQ1BraVI3UXdLbXM4djdFcllLTTEy
b2pDRmlRQ3BURUoxWkp3NU1WekwzcWlCSHo5dXZtUUR0alhnY2JGQjV1LVotME1TdXdHZUxEOU1x
WjQxQVY0b0NkSXFyWlRmMkpYaEtIZ0VZZWF3PiAgDQpsaWtlbHkgaGFzIHRoZSBhbnN3ZXIgeW91
J3JlIGxvb2tpbmcgZm9yLg0KDQoNCg0KR29vZ2xlIExMQyAxNjAwIEFtcGhpdGhlYXRyZSBQYXJr
d2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0Mw0KVGhpcyBlbWFpbCB3YXMgc2VudCB0byB5b3Ug
YmVjYXVzZSB5b3UgY3JlYXRlZCBhIEdvb2dsZSBhY2NvdW50Lg0K

我的代码是:

import email
import imaplib

mail = imaplib.IMAP4_SSL(SERVER)
mail.login(EMAIL, PASSWORD)
mail.select('inbox')


status, data = mail.search(None, 'ALL')

mail_ids = []

for block in data:
    mail_ids += block.split()

for i in mail_ids:
    status, data = mail.fetch(i, '(RFC822)')

    for response_part in data:
        if isinstance(response_part, tuple):
            message = email.message_from_bytes(response_part[1])

            mail_from = message['from']
            mail_subject = message['subject']

            if message.is_multipart():
                mail_content = ''
                for part in message.get_payload():
                    if part.get_content_type() == 'text/plain':
                        mail_content += part.get_payload()
            else:
                mail_content = message.get_payload()

            print(f'From: {mail_from}')
            print(f'Subject: {mail_subject}')
            print(f'Content: {mail_content}')

有什么办法能让它变成可读的格式吗? So is there any way to get to a readable format?

python email imap gmail-imap imaplib
1个回答
0
投票

内容(在这种情况下)是base64编码的。你会想

  1. 确定内容的编码,因为它可能使用不同的编码。
  2. 导入相应的模块,如base64或uu,并。
  3. 在编码内容上调用模块的解码函数。

对于#1,在完整的消息内容中可能还有一个头,说明使用的是什么编码。

© www.soinside.com 2019 - 2024. All rights reserved.