Форум сайта python.su
Здравствуйте! У меня возникла проблема, а именно:
При завершении машины состояний, введенные данные пользователя, должны отправляться по определённому EMAIL адресу, я вписал в конец машины состояний функцию отправки сообщений, и при завершении, когда данные должны отправляться на почту, у меня вылезает ошибка. Прошу вас помочь разобраться в проблеме!
Отредактировано PotatoFish96 (Июль 2, 2022 16:04:19)
Офлайн
#----Импорт библиотек-------- import logging from aiogram import Bot, types, Dispatcher, executor from aiogram.dispatcher.filters.state import StatesGroup, State from aiogram.dispatcher import FSMContext from config import token, email, password from states import Email from aiogram.contrib.fsm_storage.memory import MemoryStorage import smtplib import os from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText #-----Токен бота + HTML разметка и Диспетчер----- bot = Bot(token=token, parse_mode=types.ParseMode.HTML) dp = Dispatcher(bot, storage=storage) #-----Запоминание состояния в опер.памяти------ storage = MemoryStorage() #------Логи----------- logging.basicConfig(level=logging.INFO) #------Команда /start---------- @dp.message_handler(commands=('start')) async def start_command(message: types.Message): await message.reply("Привет, я бот Гоша!\nЧто бы отправить от меня Email, напиши /email") #-------Команда /email которая вызывает машину состояний------- @dp.message_handler(commands=('email')) async def email(message: types.message): await message.answer('Привет! Ты начал(а) заполнять форму на заявку! \nВведите своё полное ФИО: ') await Email.Test1.set() #---------Состояние 1------------------------ @dp.message_handler(state=Email.Test1) async def state1(message: types.message, state: FSMContext): answer = message.text await state.update_data(Test1=answer) await message.answer('Введите свои контактные данные для обратной связи (Email или Номер телефoна)') await Email.Test2.set() #---------Состояние 2------------------------ @dp.message_handler(state=Email.Test2) async def state2(message: types.message, state: FSMContext): answer = message.text await state.update_data(Test2=answer) await message.answer('Введите Сообщение, которое хотите отправить') await Email.Test3.set() #---------Состояние 3------------------------ @dp.message_handler(state=Email.Test3) async def state3(message: types.message, state: FSMContext): answer = message.text await state.update_data(Test3=answer) #-----Берёт значения из data--------- data = await state.get_data() name = data.get('Test1') contact = data.get('Test2') msg = data.get('Test3') await message.answer(f'{message.from_user.full_name}, вот письмо составленное вами:\n' f'Ваше ФИО: <b>{name}</b>\n' f'Ваша почта/номер телефона: <b>{contact}</b>\n' f'Ваше сообщение: <b>{msg}</b>') #------Та самая функция, которая отправляет результаты на Email address------- addr_from = email addr_to = 'EMAIL@mail.ru' mgs = MIMEMultipart() mgs['From'] = addr_from mgs['To'] = addr_to mgs['Subject'] = 'Новая заявка!' body = (f''' Автор заявки {name} Контакты для обратной связи {contact} Текст заявки: {msg} ''') mgs.attach(MIMEText(body, 'plain')) smtpObj = smtplib.SMTP('smtp.mail.ru', 587) smtpObj.starttls() smtpObj.login(addr_from, password) smtpObj.send_message(mgs) smtpObj.quit() #---------Выход из машины состояний----------- await state.finish() #---------Команда /help ---------------------- @dp.message_handler(commands=('help')) async def process_help_command(message: types.Message): await message.reply('Я создан для отправки писем через себя! Напиши /start чтоб начать!') if __name__ == '__main__': executor.start_polling(dp)
ERROR:asyncio:Task exception was never retrieved future: <Task finished name='Task-20' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\Dima\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=AttributeError("'function' object has no attribute 'encode'")> Traceback (most recent call last): File "C:\Users\Dima\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)): File "C:\Users\Dima\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates return await asyncio.gather(*tasks) File "C:\Users\Dima\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\handler.py", line 116, in notify response = await handler_obj.handler(*args, **partial_data) File "C:\Users\Dima\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update return await self.message_handlers.notify(update.message) File "C:\Users\Dima\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\handler.py", line 116, in notify response = await handler_obj.handler(*args, **partial_data) File "main.py", line 73, in state3 smtpObj.login(addr_from, password) File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2800.0_x64__qbz5n2kfra8p0\lib\smtplib.py", line 732, in login (code, resp) = self.auth( File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2800.0_x64__qbz5n2kfra8p0\lib\smtplib.py", line 634, in auth response = encode_base64(initial_response.encode('ascii'), eol='') AttributeError: 'function' object has no attribute 'encode'
Отредактировано PotatoFish96 (Июль 2, 2022 20:49:13)
Офлайн
Ошибку разумеется мы должны угдадать?
Офлайн
ZerGОбновил
Ошибку разумеется мы должны угадать?
Офлайн
PotatoFish96
addr_from = email
email у вас это функция, объявленная выше. А нужна то строка
Офлайн
FishHookЗдравствуйте! Извините что так поздно отвечаю. У меня всё заработало, спасибо вам большое!
PotatoFish96addr_from = email у вас это функция, объявленная выше. А нужна то строка
Офлайн
Здравствуйте! как вы решили данную ситуацию?
Отредактировано lilalik (Янв. 14, 2023 12:59:17)
Офлайн
Как вы решили данную ошибку?
Офлайн
FishHookПроверьте, что ваше приложение имеет доступ к SMTP-серверу (smtp.mail.ru) и что ваш аккаунт на почтовом сервере настроен для использования сторонних приложений
PotatoFish96addr_from = emailemail у вас это функция, объявленная выше. А нужна то строка
Офлайн