@spamNedge

Как передать ответ функции парсинга почты в телеграмм бот на python?

Существует функция получения новой почты из gmail при помощи библиотеки imaplib:

import email
import imaplib
import config

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(config.gmail_log, config.gmail_pass)
mail.select("INBOX")

def loop():

    mail.select("INBOX")
    n = 0
    (retcode, messages) = mail.search(None, '(UNSEEN)')
    if retcode == 'OK':
        for num in messages[0].split():
            n = n + 1
            typ, data = mail.fetch(num, '(RFC822)')
            for respone_part in data:
                if isinstance(respone_part, tuple):
                    original = email.message_from_string('respone_part[1]')
                    print(original['From'])
                    data = original['Subject']
                    print(data)
                    typ, data = mail.store(num, '+FLAGS', '\\Seen')


if __name__ == '__main__':
    try:
        while True:
            loop()
    finally:
        print("Thanks")


Кроме функции существует примитивный телеграмм бот на Telegram Bot API, который постоянно должен только передавать её ответ пользователю. Как можно реализовать такую функцию для бота? Все мои попытки приводили к единичному обращению к функции и получению, разумеется, null(
Заранее, большое спасибо
  • Вопрос задан
  • 777 просмотров
Решения вопроса 1
shabelski89
@shabelski89
engineer
1) функция должна что-то возвращать, добавьте return data например.
2) из бота импорт модуля с функцией проверки почты from module_name import loop , лучше имени для функции нет?
3) добавляете в боте функцию check_email, которая периодически дергает функцию проверки почты - loop
from time import sleep


def check_email():
    while True:
        mails = loop()
        if mails:
            for mail in mails:
                bot.send_message(admin_id, mail)
        sleep(60)

4) в боте делаете вызов функции check_email в отдельном потоке, например так
from threading import Thread

Thread(target=check_email, args=()).start()

5) бот умеет слать только str, это касается return data, если там например возвращается tuple.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы