Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
zekfad
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 16
1

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

02.03.2017, 19:35. Просмотров 2860. Ответов 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()
Код
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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2017, 19:35
Ответы с готовыми решениями:

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

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

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

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

[py3] Робот для автоматической торговли акциями
Напишите робота для автоматической торговли акциями на бирже. Вводится цена акций в первый,...

8
Garry Galler
2756 / 2090 / 757
Регистрация: 28.10.2013
Сообщений: 5,434
03.03.2017, 00:46 2
Цитата Сообщение от 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
shsv
422 / 287 / 190
Регистрация: 20.05.2016
Сообщений: 592
03.03.2017, 14:33 3
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
Код
 Все преимущества 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
Garry Galler
2756 / 2090 / 757
Регистрация: 28.10.2013
Сообщений: 5,434
03.03.2017, 14:56 4
shsv,
Нет - все так. Я ими и пользовался. У меня просто две функции для декодирования - одна для заголовков, другая - для тела письма. У каждой немного отличающийся алгоритм декодирования.

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

Не по теме:

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

0
Garry Galler
2756 / 2090 / 757
Регистрация: 28.10.2013
Сообщений: 5,434
03.03.2017, 15:19 6
Собственно, вот эти функции.
Возможно, их как-то вообще можно объединить и сделать универсальным декодировщиком, но мне пока так было проще делать.
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
zekfad
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 16
03.03.2017, 21:20  [ТС] 7
Вы ведь так и не поняли. Вы сделаи ручной декодинг. А необходимо всё автоматизировать. Чтобы получить текст в переменные, которые возможно потом запишутся в файл или сразу в обработку другого скрипта сделаю.
0
Garry Galler
2756 / 2090 / 757
Регистрация: 28.10.2013
Сообщений: 5,434
03.03.2017, 23:08 8
Цитата Сообщение от zekfad Посмотреть сообщение
Вы ведь так и не поняли
Возможно. Но я и сейчас не понял. И, по всей видимости, остальные тоже.
Цитата Сообщение от zekfad Посмотреть сообщение
необходимо всё автоматизировать
звучит как сказать: "крибле крабле бумс" - текст раскодируйся!
0
zekfad
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 16
04.03.2017, 15:19  [ТС] 9
А разве нельзя организовать вытаскивание body и проверку шифра с дешифрацией?
0
04.03.2017, 15:19
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2017, 15:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.