Поиск нескольких адресов FROM с использованием imapclient.IMAPClient.search в python

Я искал, но похоже, что синтаксис изменился с тех пор, как были опубликованы сообщения, которые я нашел. Я пытаюсь найти электронные письма с нескольких адресов. Это работает:

UIDs = conn.search([
                      ['FROM','[email protected]'],
                      [u'SINCE', datetime.date(2022, 3, 6)],
])

Я надеялся на что-то вроде этого:

UIDs = conn.search([
                      'OR'[
                      ['FROM','[email protected]'],['FROM','[email protected]']
                      ],
                      [u'SINCE', datetime.date(2022, 3, 6)],
])

Но я не могу найти какой-либо вариант ИЛИ, который работает. Я попробовал пример из «Автоматизировать скучные вещи», и он рекомендует это:

imapObj.search(['OR FROM [email protected] FROM [email protected]']

Это тоже не работает для меня. Я проверил страницу imapclient и не нашел там ответа: https://imapclient.readthedocs.io/en/master/index.html

Любое руководство будет оценено!

OR FROM [email protected] FROM [email protected] - правильный синтаксис. Для уверенности можно попробовать OR (FROM "[email protected]") (FROM "[email protected]"). Однако вполне возможно, что программное обеспечение вашего сервера на самом деле не поддерживает должным образом язык поиска IMAP. Какой сервер вы используете?
Max 07.05.2022 17:16

@Max Я пробовал это: UIDs=conn.search(['OR (FROM [email protected]) (FROM [email protected])']) и выдает следующую ошибку: Эта ошибка могла быть вызвана синтаксической ошибкой в ​​критериях: ['ИЛИ (ОТ [email protected]) (ОТ [email protected])'] Пожалуйста, обратитесь к документации для получения дополнительной информации о синтаксисе критериев поиска. imapclient.readthedocs.io/en/master/… Я использую Python 3.8.8, imapclient 2.2.0, pyzmail 1.0.4, подключаюсь к imap.gmail.com

Gareth Murray 07.05.2022 17:43

Почему вы используете [ ]? Это часть imapclient? Просто отправьте необработанную строку, в том числе с кавычками. conn.search('OR (FROM "[email protected]") (FROM "[email protected]")'. (Обновление: Ах, я вижу, imapclient использует синтаксис, немного отличающийся от imaplib, если вы передаете необработанную строку, она будет использовать ее необработанно. Я бы попробовал это)

Max 07.05.2022 18:32

@Max Кажется, это часть синтаксиса: messages = server.search(['FROM', '[email protected]']), из библиотечная документация. Если я использую ваш метод, я получаю следующую ошибку:<br> ConnectionAbortedError: [WinError 10053] Установленное соединение было прервано программным обеспечением на вашем хост-компьютере. К сожалению, я не могу вставить сюда полную ошибку, но может показаться, что это просто невозможно на основе ответа об ошибке.

Gareth Murray 07.05.2022 19:03
imapclient.readthedocs.io/en/master/… говорит, что вы можете отправить «простую строку» для выполнения необработанного поиска: It is also possible (but not recommended) to pass the combined criteria as a single string. In this case IMAPClient won’t perform quoting, allowing lower-level specification of criteria. Хотя вам лучше убедиться, что все ваши скобки и тому подобное совпадают!
Max 07.05.2022 20:17

@Макс, ты легенда. Это сработало: searchstring='OR (FROM "[email protected]") (FROM "[email protected]")' UIDs=conn.search(searchstring) Кажется глупым обходным путем, но я так рад, что он работает! Примечание: что такое этикет - я разрешаю вам опубликовать ответ, а затем голосую?

Gareth Murray 08.05.2022 16:37

ну конечно. Я не совсем уверен, как правильно это сделать, но я могу дать свой обходной путь в качестве ответа. Рад, что это помогло.

Max 08.05.2022 19:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаком с библиотекой imapclient, но вижу, что API позволяет отправлять необработанные строки, поэтому, если он отправляет не совсем то, что вы хотите, вы можете переопределить его.

Это должно сделать это за вас, сделав его максимально однозначным:

conn.search('OR (FROM "[email protected]") (FROM "[email protected]")')

Другие вопросы по теме