Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/103: Рейтинг темы: голосов - 103, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 16

Де кодировка email (py3.6)

02.03.2017, 19:35. Показов 57859. Ответов 8

Студворк — интернет-сервис помощи студентам
Python
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
import imaplib, email, quopri, base64
 
EmailServer = 'gmail.com'
EmailIMAPServer = 'imap.' + EmailServer
 
EmailIMAPServerPort = '993'
 
login = "username"
password = "password"
 
IMAPServer = imaplib.IMAP4_SSL(EmailIMAPServer, EmailIMAPServerPort)
 
IMAPServer.login(login, password)
 
IMAPServer.select('Google')
 
#####
result, data = IMAPServer.search(None, "ALL")
 
ids = data[0] # data is a list.
id_list = ids.split() # ids is a space separated string
latest_email_id = id_list[1] # get the latest
 
result, data = IMAPServer.fetch(latest_email_id, "(RFC822)") # fetch the email body (RFC822) for the given ID
 
raw_email = data[0][1] # here's the body, which is raw text of the whole email
# including headers and alternate payloads
 
body = str(raw_email).split('rn')
 
 
open('msg.txt', 'ab').write(raw_email)
 
IMAPServer.close()
IMAPServer.logout()
Code
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
MIME-Version: 1.0
x-no-auto-attachment: 1
Received: by 10.36.16.10; Thu, 2 Mar 2017 06:39:32 -0800 (PST)
Date: Thu, 2 Mar 2017 06:39:32 -0800
Message-ID: <CAJZf2B7rwooOSARQipjzvdoeUSfR-11JJ-s1rnn1k0x7JBPgyA@mail.gmail.com>
Subject: =?UTF-8?B?0JLRgdC1INC/0YDQtdC40LzRg9GJ0LXRgdGC0LLQsCBHbWFpbCDQtNC+0YHRgtGD0L/QvQ==?=
    =?UTF-8?B?0Ysg0YEg0LvRjtCx0L7Qs9C+INGD0YHRgtGA0L7QudGB0YLQstCw?=
From: =?UTF-8?B?0JrQvtC80LDQvdC00LAgR21haWw=?= <mail-noreply@google.com>
To: Anonymous Helper <anonymous.anonhelp@gmail.com>
Content-Type: multipart/alternative; boundary=001a1143d908bd62770549c0654e
X-Antispam: clean, score=57
X-Antivirus: avast! (VPS 170302-1, 02.03.2017), Inbound message
X-Antivirus-Status: Clean
 
--001a1143d908bd62770549c0654e
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
 
INCS0YHQtSDQv9GA0LXQuNC80YPRidC10YHRgtCy0LAgR21haWwg0LTQvtGB0YLRg9C/0L3RiyDR
gSDQu9GO0LHQvtCz0L4g0YPRgdGC0YDQvtC50YHRgtCy0LANCltpbWFnZTogR29vZ2xlXQ0KW2lt
YWdlOiBOZXh1cyA0IHdpdGggR21haWxdDQoNCtCX0LTRgNCw0LLRgdGC0LLRg9C50YLQtSwgQW5v
bnltb3VzIQ0KDQoNCtCj0YHRgtCw0L3QvtCy0LjRgtC1INC+0YTQuNGG0LjQsNC70YzQvdC+0LUg
0L/RgNC40LvQvtC20LXQvdC40LUgR21haWwNCg0K0JLRgdC1INC/0YDQtdC40LzRg9GJ0LXRgdGC
0LLQsCDQvNC+0LHQuNC70YzQvdC+0Lkg0L/QvtGH0YLRiyDQtNC+0YHRgtGD0L/QvdGLINGC0L7Q
u9GM0LrQviDQsiDQvtGE0LjRhtC40LDQu9GM0L3QvtC8INC/0YDQuNC70L7QttC10L3QuNC4DQpH
bWFpbC4g0KHQutCw0YfQsNC50YLQtSDQv9GA0LjQu9C+0LbQtdC90LjQtSDQuNC70Lgg0L7RgtC6
0YDQvtC50YLQtSBnbWFpbC5jb20gPGh0dHBzOi8vd3d3LmdtYWlsLmNvbS8+DQrQvdCwINC60L7Q
vNC/0YzRjtGC0LXRgNC1INC40LvQuCDQvNC+0LHQuNC70YzQvdC+0Lwg0YPRgdGC0YDQvtC50YHR
gtCy0LUuDQoNCltpbWFnZTogR29vZ2xlIFBsYXldDQo8aHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20v
c3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5nb29nbGUuYW5kcm9pZC5nbT4gIFtpbWFnZToNCkFw
cCBTdG9yZV0gPGh0dHBzOi8vaXR1bmVzLmFwcGxlLmNvbS9ydS9hcHAvZ21haWwvaWQ0MjI2ODk0
ODA/bXQ9OD4NCg0KDQpbaW1hZ2U6INCX0L3QsNGH0L7QuiBHbWFpbF0g0J/RgNC40Y/RgtC90L7Q
s9C+INC+0LHRidC10L3QuNGPIQ0K0JrQvtC80LDQvdC00LAgR21haWwNCsKpIDIwMTcgR29vZ2xl
IEluYy4gMTYwMCBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMN
Cg==
--001a1143d908bd62770549c0654e
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
 
<!DOCTYPE html>
<html><head><meta http-equiv=3D"content-type" content=3D"text/html;charset=
=3DUTF-8" /><title>=D0=92=D1=81=D0=B5 =D0=BF=D1=80=D0=B5=D0=B8=D0=BC=D1=83=
=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=B0 Gmail =D0=B4=D0=BE=D1=81=D1=82=D1=83=
=D0=BF=D0=BD=D1=8B =D1=81 =D0=BB=D1=8E=D0=B1=D0=BE=D0=B3=D0=BE =D1=83=D1=81=
=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0</title></head><body style=
=3D"background-color:#e5e5e5; margin:20px 0;"><br /><div style=3D"margin:2%=
;"><div style=3D"direction:ltr; text-align:left; font-family:'Open sans','A=
rial',sans-serif; color:#444; background-color:white; padding:1.5em; border=
-radius:1em; box-shadow:1px -5px 8px 2px #bbb; max-width:580px; margin:2% a=
uto 0 auto;"><table style=3D"background:white;width:100%"><tr><td><div styl=
e=3D"width:90px; height:54px; margin:10px auto;"><img src=3D"https://servic=
es.google.com/fh/files/emails/google_logo_flat_90_color.png" alt=3D"Google"=
 width=3D"90" height=3D"34"/></div><div style=3D"float:right; padding-top:2=
em;"><img src=3D"https://ssl.gstatic.com/accounts/services/mail/msa/welcome=
_nexus.png" alt=3D"Nexus 4 with Gmail" style=3D"border:0; margin-right:10px=
;" width=3D"155" height=3D"242"/></div><div style=3D"width:90%; padding-bot=
tom:10px; padding-left:15px"><p><img alt=3D"" aria-hidden=3D"true" src=3D"h=
ttps://ssl.gstatic.com/ui/v1/icons/mail/images/gmail_logo_large.png" style=
=3D"display:inline-block; max-height:10px; margin-right:5px;"/><span style=
=3D"font-family:'Open sans','Arial',sans-serif; font-weight:bold; font-size=
:small; line-height:1.4em">=D0=97=D0=B4=D1=80=D0=B0=D0=B2=D1=81=D1=82=D0=B2=
=D1=83=D0=B9=D1=82=D0=B5, Anonymous!</span></p><p><span style=3D"font-famil=
y:'Open sans','Arial',sans-serif; font-size:2.08em;"><br/>=D0=A3=D1=81=D1=
=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=B8=D1=82=D0=B5 =D0=BE=D1=84=D0=B8=D1=86=D0=
=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5 =D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=
=B6=D0=B5=D0=BD=D0=B8=D0=B5 Gmail</span><br/></p></div><p></p><div style=3D=
"padding-left:15px"><p style=3D"size:small; line-height:1.4em;">=D0=92=D1=
=81=D0=B5 =D0=BF=D1=80=D0=B5=D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=
=B2=D0=B0 =D0=BC=D0=BE=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9 =D0=BF=D0=
=BE=D1=87=D1=82=D1=8B =D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD=D1=8B =D1=
=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE =D0=B2 =D0=BE=D1=84=D0=B8=D1=86=D0=B8=D0=
=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC =D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=
=B5=D0=BD=D0=B8=D0=B8 Gmail. =D0=A1=D0=BA=D0=B0=D1=87=D0=B0=D0=B9=D1=82=D0=
=B5 =D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5 =D0=B8=D0=
=BB=D0=B8 =D0=BE=D1=82=D0=BA=D1=80=D0=BE=D0=B9=D1=82=D0=B5 <a href=3D"https=
://www.gmail.com/" target=3D"_blank" style=3D"text-decoration:none; color:#=
15C">gmail.com</a> =D0=BD=D0=B0 =D0=BA=D0=BE=D0=BC=D0=BF=D1=8C=D1=8E=D1=82=
=D0=B5=D1=80=D0=B5 =D0=B8=D0=BB=D0=B8 =D0=BC=D0=BE=D0=B1=D0=B8=D0=BB=D1=8C=
=D0=BD=D0=BE=D0=BC =D1=83=D1=81=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=
=D0=B5.</p><p style=3D"line-height:2em; margin-right:170px;"><a href=3D"htt=
ps://play.google.com/store/apps/details?id=3Dcom.google.android.gm" style=
=3D"text-decoration:none"><img alt=3D"Google Play" width=3D"127" height=3D"=
44" src=3D"https://ssl.gstatic.com/accounts/services/mail/buttons/google_pl=
ay_ru.png" style=3D"border:0" /></a>&nbsp;&nbsp;<a href=3D"https://itunes.a=
pple.com/ru/app/gmail/id422689480?mt=3D8" style=3D"text-decoration:none;"><=
img alt=3D"App Store" width=3D"144" height=3D"43" src=3D"https://ssl.gstati=
c.com/accounts/services/mail/buttons/apple_store_ru.png" style=3D"border:0"=
 /></a></p></div><br/><br/>
<div style=3D"clear:both; padding-left:13px; height:6.8em;"><table style=3D=
"width:100%; border-collapse:collapse; border:0"><tr><td style=3D"width:68p=
x"><img alt=3D'=D0=97=D0=BD=D0=B0=D1=87=D0=BE=D0=BA Gmail' width=3D"49" hei=
ght=3D"37" src=3D"https://ssl.gstatic.com/ui/v1/icons/mail/images/gmail_log=
o_large.png" style=3D"display:block;"/></td><td style=3D"align:left; font-f=
amily:'Open sans','Arial',sans-serif; vertical-align:bottom"><span style=3D=
"font-size:small">=D0=9F=D1=80=D0=B8=D1=8F=D1=82=D0=BD=D0=BE=D0=B3=D0=BE =
=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F!<br/></span><span style=3D"font-=
size:x-large; line-height:1">=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0 Gma=
il</span></td></tr></table></div>
</td></tr></table></div>
<div style=3D"direction:ltr;color:#777; font-size:0.8em; border-radius:1em;=
 padding:1em; margin:0 auto 4% auto; font-family:'Arial','Helvetica',sans-s=
erif; text-align:center;">=C2=A9 2017 Google Inc. 1600 Amphitheatre Parkway=
, Mountain View, CA 94043<br/></div></div></body></html>
 
--001a1143d908bd62770549c0654e--
На выходе есть все данные. Но как их декодировать.
В ручную base64 и quopri не очень вариант.
Просьба проинструктировать как это сделать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2017, 19:35
Ответы с готовыми решениями:

Spyder-3.1.4-py3-none-any.whl
Думаю, что этот редактор не стоит использовать, так как он завязан на определённую версию Пайтона. Если она поменяется, то Spyder наверное...

Почему зацикливание Py3.4
Пример из книги &quot;Изучаем Python&quot; Работает: def myzip(*args): iters = list(map(iter, args)) while iters: res = ...

Py3.X что за Х с itertools.groupdy?
Прочитал справку и понял что можно так, но чет меня не очень радует необходимость предварительной сортировки keyfunc = lambda x: x % 2 ...

8
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.03.2017, 00:46
Цитата Сообщение от zekfad Посмотреть сообщение
В ручную base64 и quopri не очень вариант.
Почему? Легких путей imaplib не дает. У меня полный код читалки писем вышел почти на 300 строк, с ручным декодированием на все возможные случаи, поскольку на метод get_payload(decode=True) объекта Message особо полагаться нельзя (поэтому я выбрал ручное декодирование, хотя вы можете попробовать и автоматическое).
И у вас код даже до
Python
1
2
email_body = data[0][1]
mail = email.message_from_bytes(email_body)
не дошел, чтобы объект Message получить. А там еще придется методом walk по Message пройтись, если он multipart, ну и прочие прелести стандарта imap, без знания которого c imaplib тяжело будет работать:-).
К примеру, если захотите получить письма из папки 'отправленные', то знайте - папки OUTBOX (в отличие от INBOX, выбираемой по умолчанию) не существует. А есть нечто с именем b"&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-". Прочие папки имеют столь же выразительные и 'человекопонятные' имена.
P. S. Есть еще сторонние либы imbox и imapclient, работающие частично поверх imaplib, но у них (при внешнем удобстве) тоже есть свои минусы.
1
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
03.03.2017, 14:33
zekfad, в коде импортируются же модули quopri и base64, почему бы на первых парах не воспользоваться ими?

base64

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import base64
 
 
s = '''INCS0YHQtSDQv9GA0LXQuNC80YPRidC10YHRgtCy0LAgR21haWwg0LTQvtGB0YLRg9C/0L3RiyDR
gSDQu9GO0LHQvtCz0L4g0YPRgdGC0YDQvtC50YHRgtCy0LANCltpbWFnZTogR29vZ2xlXQ0KW2lt
YWdlOiBOZXh1cyA0IHdpdGggR21haWxdDQoNCtCX0LTRgNCw0LLRgdGC0LLRg9C50YLQtSwgQW5v
bnltb3VzIQ0KDQoNCtCj0YHRgtCw0L3QvtCy0LjRgtC1INC+0YTQuNGG0LjQsNC70YzQvdC+0LUg
0L/RgNC40LvQvtC20LXQvdC40LUgR21haWwNCg0K0JLRgdC1INC/0YDQtdC40LzRg9GJ0LXRgdGC
0LLQsCDQvNC+0LHQuNC70YzQvdC+0Lkg0L/QvtGH0YLRiyDQtNC+0YHRgtGD0L/QvdGLINGC0L7Q
u9GM0LrQviDQsiDQvtGE0LjRhtC40LDQu9GM0L3QvtC8INC/0YDQuNC70L7QttC10L3QuNC4DQpH
bWFpbC4g0KHQutCw0YfQsNC50YLQtSDQv9GA0LjQu9C+0LbQtdC90LjQtSDQuNC70Lgg0L7RgtC6
0YDQvtC50YLQtSBnbWFpbC5jb20gPGh0dHBzOi8vd3d3LmdtYWlsLmNvbS8+DQrQvdCwINC60L7Q
vNC/0YzRjtGC0LXRgNC1INC40LvQuCDQvNC+0LHQuNC70YzQvdC+0Lwg0YPRgdGC0YDQvtC50YHR
gtCy0LUuDQoNCltpbWFnZTogR29vZ2xlIFBsYXldDQo8aHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20v
c3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5nb29nbGUuYW5kcm9pZC5nbT4gIFtpbWFnZToNCkFw
cCBTdG9yZV0gPGh0dHBzOi8vaXR1bmVzLmFwcGxlLmNvbS9ydS9hcHAvZ21haWwvaWQ0MjI2ODk0
ODA/bXQ9OD4NCg0KDQpbaW1hZ2U6INCX0L3QsNGH0L7QuiBHbWFpbF0g0J/RgNC40Y/RgtC90L7Q
s9C+INC+0LHRidC10L3QuNGPIQ0K0JrQvtC80LDQvdC00LAgR21haWwNCsKpIDIwMTcgR29vZ2xl
IEluYy4gMTYwMCBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMN
Cg=='''
 
print(base64.b64decode(s).decode('utf8'))
Output
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 Все преимущества Gmail доступны с любого устройства
[image: Google]
[image: Nexus 4 with Gmail]
 
Здравствуйте, Anonymous!
 
 
Установите официальное приложение Gmail
 
Все преимущества мобильной почты доступны только в официальном приложении
Gmail. Скачайте приложение или откройте gmail.com <https://www.gmail.com/>
на компьютере или мобильном устройстве.
 
[image: Google Play]
<https://play.google.com/store/apps/details?id=com.google.android.gm>  [image:
App Store] <https://itunes.apple.com/ru/app/gmail/id422689480?mt=8>
 
 
[image: Значок Gmail] Приятного общения!
Команда Gmail
© 2017 Google Inc. 1600 Amphitheatre Parkway, Mountain View, CA 94043


quopri
Python
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
import quopri
 
 
s = '''<!DOCTYPE html>
<html><head><meta http-equiv=3D"content-type" content=3D"text/html;charset=
=3DUTF-8" /><title>=D0=92=D1=81=D0=B5 =D0=BF=D1=80=D0=B5=D0=B8=D0=BC=D1=83=
=D1=89=D0=B5=D1=81=D1=82=D0=B2=D0=B0 Gmail =D0=B4=D0=BE=D1=81=D1=82=D1=83=
=D0=BF=D0=BD=D1=8B =D1=81 =D0=BB=D1=8E=D0=B1=D0=BE=D0=B3=D0=BE =D1=83=D1=81=
=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0</title></head><body style=
=3D"background-color:#e5e5e5; margin:20px 0;"><br /><div style=3D"margin:2%=
;"><div style=3D"direction:ltr; text-align:left; font-family:'Open sans','A=
rial',sans-serif; color:#444; background-color:white; padding:1.5em; border=
-radius:1em; box-shadow:1px -5px 8px 2px #bbb; max-width:580px; margin:2% a=
uto 0 auto;"><table style=3D"background:white;width:100%"><tr><td><div styl=
e=3D"width:90px; height:54px; margin:10px auto;"><img src=3D"https://servic=
es.google.com/fh/files/emails/google_logo_flat_90_color.png" alt=3D"Google"=
 width=3D"90" height=3D"34"/></div><div style=3D"float:right; padding-top:2=
em;"><img src=3D"https://ssl.gstatic.com/accounts/services/mail/msa/welcome=
_nexus.png" alt=3D"Nexus 4 with Gmail" style=3D"border:0; margin-right:10px=
;" width=3D"155" height=3D"242"/></div><div style=3D"width:90%; padding-bot=
tom:10px; padding-left:15px"><p><img alt=3D"" aria-hidden=3D"true" src=3D"h=
ttps://ssl.gstatic.com/ui/v1/icons/mail/images/gmail_logo_large.png" style=
=3D"display:inline-block; max-height:10px; margin-right:5px;"/><span style=
=3D"font-family:'Open sans','Arial',sans-serif; font-weight:bold; font-size=
:small; line-height:1.4em">=D0=97=D0=B4=D1=80=D0=B0=D0=B2=D1=81=D1=82=D0=B2=
=D1=83=D0=B9=D1=82=D0=B5, Anonymous!</span></p><p><span style=3D"font-famil=
y:'Open sans','Arial',sans-serif; font-size:2.08em;"><br/>=D0=A3=D1=81=D1=
=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=B8=D1=82=D0=B5 =D0=BE=D1=84=D0=B8=D1=86=D0=
=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5 =D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=
=B6=D0=B5=D0=BD=D0=B8=D0=B5 Gmail</span><br/></p></div><p></p><div style=3D=
"padding-left:15px"><p style=3D"size:small; line-height:1.4em;">=D0=92=D1=
=81=D0=B5 =D0=BF=D1=80=D0=B5=D0=B8=D0=BC=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=
=B2=D0=B0 =D0=BC=D0=BE=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9 =D0=BF=D0=
=BE=D1=87=D1=82=D1=8B =D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD=D1=8B =D1=
=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE =D0=B2 =D0=BE=D1=84=D0=B8=D1=86=D0=B8=D0=
=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC =D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=
=B5=D0=BD=D0=B8=D0=B8 Gmail. =D0=A1=D0=BA=D0=B0=D1=87=D0=B0=D0=B9=D1=82=D0=
=B5 =D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5 =D0=B8=D0=
=BB=D0=B8 =D0=BE=D1=82=D0=BA=D1=80=D0=BE=D0=B9=D1=82=D0=B5 <a href=3D"https=
://www.gmail.com/" target=3D"_blank" style=3D"text-decoration:none; color:#=
15C">gmail.com</a> =D0=BD=D0=B0 =D0=BA=D0=BE=D0=BC=D0=BF=D1=8C=D1=8E=D1=82=
=D0=B5=D1=80=D0=B5 =D0=B8=D0=BB=D0=B8 =D0=BC=D0=BE=D0=B1=D0=B8=D0=BB=D1=8C=
=D0=BD=D0=BE=D0=BC =D1=83=D1=81=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=
=D0=B5.</p><p style=3D"line-height:2em; margin-right:170px;"><a href=3D"htt=
ps://play.google.com/store/apps/details?id=3Dcom.google.android.gm" style=
=3D"text-decoration:none"><img alt=3D"Google Play" width=3D"127" height=3D"=
44" src=3D"https://ssl.gstatic.com/accounts/services/mail/buttons/google_pl=
ay_ru.png" style=3D"border:0" /></a>&nbsp;&nbsp;<a href=3D"https://itunes.a=
pple.com/ru/app/gmail/id422689480?mt=3D8" style=3D"text-decoration:none;"><=
img alt=3D"App Store" width=3D"144" height=3D"43" src=3D"https://ssl.gstati=
c.com/accounts/services/mail/buttons/apple_store_ru.png" style=3D"border:0"=
 /></a></p></div><br/><br/>
<div style=3D"clear:both; padding-left:13px; height:6.8em;"><table style=3D=
"width:100%; border-collapse:collapse; border:0"><tr><td style=3D"width:68p=
x"><img alt=3D'=D0=97=D0=BD=D0=B0=D1=87=D0=BE=D0=BA Gmail' width=3D"49" hei=
ght=3D"37" src=3D"https://ssl.gstatic.com/ui/v1/icons/mail/images/gmail_log=
o_large.png" style=3D"display:block;"/></td><td style=3D"align:left; font-f=
amily:'Open sans','Arial',sans-serif; vertical-align:bottom"><span style=3D=
"font-size:small">=D0=9F=D1=80=D0=B8=D1=8F=D1=82=D0=BD=D0=BE=D0=B3=D0=BE =
=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F!<br/></span><span style=3D"font-=
size:x-large; line-height:1">=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0 Gma=
il</span></td></tr></table></div>
</td></tr></table></div>
<div style=3D"direction:ltr;color:#777; font-size:0.8em; border-radius:1em;=
 padding:1em; margin:0 auto 4% auto; font-family:'Arial','Helvetica',sans-s=
erif; text-align:center;">=C2=A9 2017 Google Inc. 1600 Amphitheatre Parkway=
, Mountain View, CA 94043<br/></div></div></body></html>'''
 
 
print(quopri.decodestring(s, header=False).decode('utf8'))
Output
HTML5
1
2
3
4
5
<!DOCTYPE html>
<html><head><meta http-equiv="content-type" content="text/html;charset=UTF-8" /><title>Все преимущества Gmail доступны с любого устройства</title></head><body style="background-color:#e5e5e5; margin:20px 0;"><br /><div style="margin:2%;"><div style="direction:ltr; text-align:left; font-family:'Open sans','Arial',sans-serif; color:#444; background-color:white; padding:1.5em; border-radius:1em; box-shadow:1px -5px 8px 2px #bbb; max-width:580px; margin:2% auto 0 auto;"><table style="background:white;width:100%"><tr><td><div style="width:90px; height:54px; margin:10px auto;"><img src="https://services.google.com/fh/files/emails/google_logo_flat_90_color.png" alt="Google" width="90" height="34"/></div><div style="float:right; padding-top:2em;"><img src="https://ssl.gstatic.com/accounts/services/mail/msa/welcome_nexus.png" alt="Nexus 4 with Gmail" style="border:0; margin-right:10px;" width="155" height="242"/></div><div style="width:90%; padding-bottom:10px; padding-left:15px"><p><img alt="" aria-hidden="true" src="https://ssl.gstatic.com/ui/v1/icons/mail/images/gmail_logo_large.png" style="display:inline-block; max-height:10px; margin-right:5px;"/><span style="font-family:'Open sans','Arial',sans-serif; font-weight:bold; font-size:small; line-height:1.4em">Здравствуйте, Anonymous!</span></p><p><span style="font-family:'Open sans','Arial',sans-serif; font-size:2.08em;"><br/>Установите официальное приложение Gmail</span><br/></p></div><p></p><div style="padding-left:15px"><p style="size:small; line-height:1.4em;">Все преимущества мобильной почты доступны только в официальном приложении Gmail. Скачайте приложение или откройте <a href="https://www.gmail.com/" target="_blank" style="text-decoration:none; color:#15C">gmail.com</a> на компьютере или мобильном устройстве.</p><p style="line-height:2em; margin-right:170px;"><a href="https://play.google.com/store/apps/details?id=com.google.android.gm" style="text-decoration:none"><img alt="Google Play" width="127" height="44" src="https://ssl.gstatic.com/accounts/services/mail/buttons/google_play_ru.png" style="border:0" /></a>&nbsp;&nbsp;<a href="https://itunes.apple.com/ru/app/gmail/id422689480?mt=8" style="text-decoration:none;"><img alt="App Store" width="144" height="43" src="https://ssl.gstatic.com/accounts/services/mail/buttons/apple_store_ru.png" style="border:0" /></a></p></div><br/><br/>
<div style="clear:both; padding-left:13px; height:6.8em;"><table style="width:100%; border-collapse:collapse; border:0"><tr><td style="width:68px"><img alt='Значок Gmail' width="49" height="37" src="https://ssl.gstatic.com/ui/v1/icons/mail/images/gmail_logo_large.png" style="display:block;"/></td><td style="align:left; font-family:'Open sans','Arial',sans-serif; vertical-align:bottom"><span style="font-size:small">Приятного общения!<br/></span><span style="font-size:x-large; line-height:1">Команда Gmail</span></td></tr></table></div>
</td></tr></table></div>
<div style="direction:ltr;color:#777; font-size:0.8em; border-radius:1em; padding:1em; margin:0 auto 4% auto; font-family:'Arial','Helvetica',sans-serif; text-align:center;">© 2017 Google Inc. 1600 Amphitheatre Parkway, Mountain View, CA 94043<br/></div></div></body></html>


Garry Galler, или с ними что-то не так?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.03.2017, 14:56
shsv,
Нет - все так. Я ими и пользовался. У меня просто две функции для декодирования - одна для заголовков, другая - для тела письма. У каждой немного отличающийся алгоритм декодирования.

Добавлено через 7 минут
Тут на форуме есть пример который я за основу брал.
0
03.03.2017, 15:07

Не по теме:

А, а я-то уж подумал чего-то, что прямо сами писали декодировщик :)

0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.03.2017, 15:19
Собственно, вот эти функции.
Возможно, их как-то вообще можно объединить и сделать универсальным декодировщиком, но мне пока так было проще делать.
Python
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
preferredencoding = locale.getpreferredencoding()
 
def decode_header(header,content_charset=None):
    if header is None: return ""
    parts = []
    if content_charset is None:
        content_charset ='utf-8'
    
    def try_decode(decoded_part,charset):
        
        try:
            decoded_part = decoded_part.decode(charset)
        except:
            try:
                decoded_part = decoded_part.decode(preferredencoding)
            except:
                decoded_part = str(decoded_part)
        return decoded_part
    
    
    for part in email.header.decode_header(header):
        header_string, charset = part
        
        if charset in ['unknown-8bit',None]:
            charset = content_charset  
        
        decoded_part = try_decode(header_string,charset)
        parts.append(decoded_part)
    
    return "".join(parts)
 
 
def decode_body(text,content_transfer_encoding,content_charset):
    error = 0
    if content_charset is None:
        content_charset = preferredencoding
    
    if content_transfer_encoding == 'quoted-printable':
        try:
            text = quopri.decodestring(text)
            try:
                text = text.decode(content_charset)
                #print('quoted-printable: text.decode(content_charset)')
            except Exception as err:
                text = str(text)
                error = err
        
        except Exception as err:
                text = str(text)
                error = err        
                    
    elif content_transfer_encoding == 'base64':
        try:
            text = base64.b64decode(text)
            try:
                text = text.decode(content_charset)
                 #print('base64: text.decode(content_charset)')
            except Exception as err:
                text = str(text)
                error = err 
            
        except Exception as err:
            text = str(text)
            error = err 
    else:
        if isinstance(text,bytes):
            try:
                text = text.decode(content_charset)
            except Exception as err:
                text = str(text)
                error = err     
    
    return (error,text)
Данные, которые им передаются берутся из заголовков письма
Python
1
2
3
# объект письма либо его часть полученная walk' ом в случае multipart содержимого.
content_charset = mail.get_content_charset()
content_transfer_encoding = mail.get('Content-Transfer-Encoding')
Декодировать приходится даже имена файлов вложений - если они внезапно кириллические :-)

Добавлено через 5 минут

Не по теме:

Цитата Сообщение от shsv Посмотреть сообщение
прямо сами писали декодировщик
Не, на такое я не подписываюсь :-)


Хотя уже было собрался для кодирования\декодирования имен папок в imap, но вовремя обнаружил что в модуле imapclient есть нужная функция imap_utf7:
Python
1
2
3
4
5
decoded = imap_utf7.decode(b'&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-') 
print(decoded)   # 'Отправленные'
encoded = imap_utf7.encode('Отправленные')
print(encoded)   # b'&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-'
print(imap_utf7.encode('Отправленные')==b'&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-')
1
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 16
03.03.2017, 21:20  [ТС]
Вы ведь так и не поняли. Вы сделаи ручной декодинг. А необходимо всё автоматизировать. Чтобы получить текст в переменные, которые возможно потом запишутся в файл или сразу в обработку другого скрипта сделаю.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.03.2017, 23:08
Цитата Сообщение от zekfad Посмотреть сообщение
Вы ведь так и не поняли
Возможно. Но я и сейчас не понял. И, по всей видимости, остальные тоже.
Цитата Сообщение от zekfad Посмотреть сообщение
необходимо всё автоматизировать
звучит как сказать: "крибле крабле бумс" - текст раскодируйся!
0
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 16
04.03.2017, 15:19  [ТС]
А разве нельзя организовать вытаскивание body и проверку шифра с дешифрацией?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2017, 15:19
Помогаю со студенческими работами здесь

Как присвоить значение из бд переменной py3
Здравствуйте, помогите пожалуйста присвоить значение из бд переменной. Есть бд redsdb.db в ней есть таблица card и в ней один...

Async mysql client for py3.x
помогите найти клиент mysql для python 3.x, сколько не нахожу все основаны на MySQLdb который на python 2.7

HTML кодировка Email
Здравствуйте! Как закодировать Email, чтобы в исходном коде страницы email не показывался в открытом виде, а показывался в виде кодов...

Неправильная кодировка в пришедшем email
Здравствуйте. Регистрировался на сайте с использованием своего емейла (обычные гугл, яндекс там не проходят). Пришла ссылка на регистрацию...

Кодировка при отправке файла на email
И так, не получается сделать Русскую кодировку отправленного файла, получаются крякозябры - (скрин) Так вот даже использовал: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru