0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 9
1

Imaplib, метод отбора писем search()

29.01.2018, 14:05. Показов 11958. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Изучаю сбор писем питоном. На данный момент застопорился с методом search.
В связи с поставленной задачей, поставил для себя ряд вопросов.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import imaplib
import getpass
import email
import email.message
import time
import os.path
import subprocess
import re
import sys
 
server = 'imap.yandex.ru'
login = "example@yandex.ru"
 
def main_loop_proc():
    imap = imaplib.IMAP4_SSL(server)
    imap.login(login, password)
    status, select_data = imap.select('INBOX')
    nmessages = select_data[0].decode('utf-8')
    status, search_data = imap.search("utf-8", '(SUBJECT "%s")' % u"темаписьма".encode("utf-8"))
...
Здесь, в методе SEARCH есть два варианта записи.

Задача №1 "легкая". Здесь, вроде как, вопросов нет. Отобрать письма с темой, содержащей текст "ТемаПисьмаОдин".
Первый вариант:
status, search_data = imap.search("utf-8", '(SUBJECT "%s")' % u"ТемаПисьмаОдин".encode("utf-8"))
Второй вариант:
status, search_data = imap.search("utf-8", 'SUBJECT', u"ТемаПисьмаОдин".encode("utf-8"))

Отлично, усложним задачу.
Задача №2 "средняя". Отобрать письма с темой, содержащей текст "ТемаПисьмаОдин" И текст "ТемаПисьмаДва"
Первый вариант:
Собственно вопрос, как это сделать?
Второй вариант:
status, search_data = imap.search("utf-8", 'SUBJECT', u"ТемаПисьмаОдин".encode("utf-8"), 'SUBJECT', u"ТемаПисьмаДва".encode("utf-8"))

Еще усложним.
Задача №3 "сложная". Отобрать письма с темой, содержащей текст "ТемаПисьмаОдин" ИЛИ текст "ТемаПисьмаДва"
Ни первый вариант, ни второй вариант мне не удалось реализовать.

Прошу помощи! Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2018, 14:05
Ответы с готовыми решениями:

Нужна программа для отбора писем с вложениями (файлами), чтобы не видеть писем с обычными письмами
нужна программа для отбора писем с вложениями(файлами), чтобы не видеть писем с обычными письмами...

Оптимизация отбора и вывода писем в файл. Outlook Add-in
Функция принимает 2 даты, начальный период и конечный для поиска необходимых писем, и строку адреса...

метод Search
Не могу написать корректную формулу в параметре метода Search класса NotesDcumentCollection...

Метод Search
Народ, помогите найти серчем по числовому полю (Form = "ContractACC" & Kod = "31619740" & Amount =...

Метод Notesdatabase.search
Добрый день. Не подскажите есть ли какой нибудь способ ограничить метод Search по времени? чтобы...

7
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 9
30.01.2018, 18:01  [ТС] 2
Подскажите, где почитать то хоть об этом можно?
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
30.01.2018, 19:20 3
Цитата Сообщение от Gfest Посмотреть сообщение
где почитать то хоть об этом можно?
RFC 2060, 3501 (официальные спецификации протокола IMAP).
P.S. Однако вы будете разочарованы - разные почтовики поддерживают синтаксис search по разному. Или могут иметь свой собственный.
0
1 / 1 / 2
Регистрация: 23.07.2016
Сообщений: 13
30.01.2018, 22:55 4
набор кортежей ему скорми, Питон 3.6

Python
1
typ, msgnums = M.search(None, '(FROM "LDJ")')
0
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 9
31.01.2018, 16:19  [ТС] 5
Эмм. А как применить эту запись к моему нестандартному примеру?
0
1 / 1 / 2
Регистрация: 23.07.2016
Сообщений: 13
03.02.2018, 12:36 6
набор кортежей, я же написал
M.search(None, '(FROM "LDJ")', '(SUBJECT "LDJ")', '(MESSAGE "LDJ")')

см. документацию
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
03.02.2018, 14:37 7
Цитата Сообщение от Dimmon2016 Посмотреть сообщение
M.search(None, '(FROM "LDJ")', '(SUBJECT "LDJ")', '(MESSAGE "LDJ")')
Как задать, искать через И или через ИЛИ?
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
03.02.2018, 15:26 8
Лучший ответ Сообщение было отмечено Gfest как решение

Решение

Shamil1,
Логического И - для выборки писем, например, с темой № 1 и темой №2 в IMAP, как я понял, вообще нет.

Мы можем только задать ключевые слова в контексте одной темы.
Вот такой запрос найдет все письма в теме которых присутствуют оба слова - "кошелек" и "пополнен"
'(SUBJECT "кошелек")'.encode('utf-8'), '(SUBJECT "пополнен")'.encode('utf-8')
Если же мы захотим найти все письма, в теме которых есть слово "пополнен" и все письма, в теме которых есть слово "заплатили" (два разных типа писем) - то это уже не сработает. Поскольку оба слова будут искаться в контексте одной темы.

То есть здесь для такой задачи требуется уже логическое ИЛИ.
Оно в IMAP есть (OR) - но как его применять непонятно. У меня ни mail, ни yandex его не принимают. Впрочем, Mail вообще, похоже, не знает ключевых слов FROM, TO, SUBJECT, HEADER и т.д.

P.S. И, кстати, не важно как передавать параметры - списком строк или одной строкой. Эти варианты эквивалентны по смыслу.

Добавлено через 16 минут
На яндексе также работает логическое отрицание:
Код
'(SUBJECT "заплатили" NOT SUBJECT "налоги")'.encode('utf-8')
ТО есть все письма в теме которых есть слово "заплатили", но нет одновременно слова "налоги".
2
03.02.2018, 15:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2018, 15:26
Помогаю со студенческими работами здесь

метод Notesdatabase.search
Я столкнулся с проблемой следующего содержания: нужно с помощью метода SEARCH выбрать документы...

Vk api (метод wall.search)
Здравствуйте. Использую метод wall.search для поиска нужных постов на стене и столкнулся с такой...

Метод users.search возвращает 0
Добрый день, вызываю метод execute с кодом (вместо многоточия любые параметры): var a1 =...

VkNet метод Messages.Search
Пример с официальной страницы не работает var search = api.Messages.Search(q: "q");...

Search View не удается вызвать метод
Прописал виджет поиска в приложение, но при добавлении кода поиска в onCreateOptionsMenu возникает...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru