簡體   English   中英

如何使用 python imaplib 閱讀電子郵件

[英]How to read emails using python imaplib

我正在創建一個 email 系統來讀取電子郵件並向用戶顯示它們是什么。

我所擁有的代碼無法正常顯示內容。 我知道有些電子郵件使用 html 格式,所以想知道是否是這種情況。 無論哪種方式,我都需要幫助將其轉換為可讀格式,最好看起來像原始格式。

我得到了 output

From: Google Community Team <googlecommunityteam-noreply@google.com>
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}')

那么有什么辦法可以讓它變成可讀的格式嗎?

內容(在這種情況下)是 base64 編碼的。 你會想要

  1. 確定內容的編碼,因為它可能使用不同的編碼,
  2. 導入相應的模塊,如 base64 或 uu,然后,
  3. 從模塊上調用解碼 function 對編碼的內容。

對於#1,在完整的消息內容中可能還有另一個 header 指示使用的編碼。

import base64
print(base64.b64decode(mail_content))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM