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

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

02.03.2017, 19:35. Показов 73765. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru