Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 17, 2018 18:47:54

8toni8
Зарегистрирован: 2018-01-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Как скачать электронное письмо через POP?

Более менее разобрался как подключатся к POP серверу и взаимодействовать с ним:

 # -*- coding: koi8-r -*-
import poplib
import base64
import quopri
import re
 
 
def decode_subject(inp):
    found = re.findall(r'=\?([a-zA-Z0-9-]+)\?([bqBQ])\?([a-zA-Z0-9/+=]{4,})={0,2}\?', inp.decode('utf8', 'ignore'))
    try:
        found = list(filter(bool, found[0]))
    except IndexError:
        return inp  # 
    if found[1].upper() == 'B':
        text = base64.b64decode(found[2]).decode(found[0], 'replace')
    else:
        text = quopri.decodestring(found[2]).decode(found[0], 'replace')
    return 'Subject: {}'.format(text)
 
 
server = "pop.mail.ru"
port = "995"
user = "здесь логин"
pasw= 'здесь пароль'
 
 
mServer = poplib.POP3_SSL(server,port)
mServer.user(user)
mServer.pass_(pasw)
print(mServer.stat())
messages = []
senders = []
numMessages = len(mServer.list()[1])
for i in range(numMessages):
    for msg in mServer.top(i+1,0)[1]:
        if msg.startswith(b'Subject'):
            messages.append(msg)
        if msg.startswith(b'Return-path'):
            senders.append(msg)
print (mServer.retr(2)) # 
# mServer.dele(3) #
for i in messages:
    print(decode_subject(i))
 
print('\n')
 
for i in senders:
    print(i)
print (mServer.quit()) # 

Используя функцию POP3.retr(which) получаю письмо, только оно появляется в какой то не понятной для мене кодировке.
Вот отрывок:
“ b'O3ZhbHVlIFBST0M9IklOUyImZ3Q7LTQuOTMmbHQ7L3ZhbHVlJmd0Ozxicj4KJmx0Oy9wYXJhbWV0', b'ZXImZ3Q7PGJyPgombHQ7cGFyYW1ldGVyIFZBUj0iVEVMRU0iIFNFTlNUWVBFPSJIZWF0ZXIiIFNF', b'TlNJRD0iMiIgdW5pdD0iYyImZ3Q7PGJyPgombHQ7dmFsdWUgUFJPQz0iSU5TIiZndDstMS44NyZs', ”

Я так понимаю, это какой то байт код? Должен быть в кодировке Base64 ?
Пробовал его декодировать с помощью функции base64.b64decode(), питон ругается, говорит давай ASCII:

“ TypeError: argument should be a bytes-like object or ASCII string, not ‘tuple’ ”

Ну по крайней мере я так понимаю, что необходимо его с начало кодировать в ASCII, а уже после этого в Base64, ну или как то из b' байт кода переиначить в строку?

А может быть я вообще не той функцией пользуюсь? Ну в смысле POP3.retr(which), хотя вроде другой подходящей в модуле poplib нету: https://docs.python.org/2/library/poplib.html#module-poplib
Или не туда смотрю?

Вообщем вопросов много, натолкните на путь истинный



Офлайн

#2 Янв. 18, 2018 10:47:32

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Как скачать электронное письмо через POP?

https://github.com/VadymRud/email_downloader
Єто я писал недавно

Офлайн

#3 Янв. 18, 2018 10:57:54

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Как скачать электронное письмо через POP?

> Пробовал его декодировать с помощью функции base64.b64decode(), питон ругается, говорит давай ASCII:

У меня всё работает:

 >>> import base64
>>> s = "O3ZhbHVlIFBST0M9IklOUyImZ3Q7LTQuOTMmbHQ7L3ZhbHVlJmd0Ozxicj4KJmx0Oy9wYXJhbWV0"
>>> base64.b64decode(s)
';value PROC="INS"&gt;-4.93&lt;/value&gt;<br>\n&lt;/paramet'



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Янв. 18, 2018 18:41:47

8toni8
Зарегистрирован: 2018-01-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Как скачать электронное письмо через POP?

helm2004
https://github.com/VadymRud/email_downloaderЄто я писал недавно
Что то для новичка совсем сложно для понимания Комментариев минимум
Я так понимаю это вы под Linux писали, судя по директориям?

Rodegast
У меня всё работает:
Видимо не очень хороший обрывок кода, я для примера показал. По этому для понимания, прикрепил полную версию программы.
Ошибку кстати после применения функции base64.b64decode, такую выдает:
TypeError: argument should be a bytes-like object or ASCII string, not ‘tuple’

Прикреплённый файлы:
attachment pythonsu1.py (1,5 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version