Задать вопрос
@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(
Заранее, большое спасибо
  • Вопрос задан
  • 846 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы