Почта в телеграм боте

psyche1879

Новичок
Пользователь
Май 19, 2024
1
0
1
Всем доброго времени суток. Я новичок самоучка, пытаюсь написать телеграм бота с функцией отправки запросов пользователя на почту. Вот сам код:

aiogram 3.6
python 3.12

from aiogram import Bot, Dispatcher, F
from aiogram.filters import CommandStart
from aiogram.types import (KeyboardButton, Message, ReplyKeyboardMarkup,
ReplyKeyboardRemove, ForceReply)
import aiohttp
import smtplib
from email.message import EmailMessage

# Ваши настройки
BOT_TOKEN = 'Токен'
EMAIL_ADDRESS = 'почта'

bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()

start_keyboard = ReplyKeyboardMarkup(keyboard=[
[KeyboardButton(text="Презентация")],
[KeyboardButton(text="Копирайтинг")],
[KeyboardButton(text="Верстка письма")],
[KeyboardButton(text="Контент-план")],
], resize_keyboard=True)

copywriting_keyboard = ReplyKeyboardMarkup(keyboard=[
[KeyboardButton(text="Статья"), KeyboardButton(text="Сценарий")],
[KeyboardButton(text="Рерайтинг"), KeyboardButton(text="Назад")]
], resize_keyboard=True)

article_form = ReplyKeyboardMarkup(keyboard=[
[KeyboardButton(text="Тема")],
[KeyboardButton(text="Объём")],
[KeyboardButton(text="Цель статьи")],
[KeyboardButton(text="Отправить заявку")],
], resize_keyboard=True)

SMTP_SERVER = 'smtp.yandex.ru'
SMTP_PORT = 587
EMAIL_USERNAME = 'почта'
EMAIL_PASSWORD = 'токен-пароль'

async def send_email(data):
msg = EmailMessage()
msg.set_content(f"Тема: {data['Тема']}\nОбъем: {data['Объём']}\nЦель статьи: {data['Цель статьи']}")
msg['Subject'] = 'Заказ статьи'
msg['From'] = EMAIL_USERNAME
msg['To'] = EMAIL_ADDRESS

with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL_USERNAME, EMAIL_PASSWORD)
server.send_message(msg)

print("Данные заказа статьи отправлены на email.")

@dp.message(CommandStart())
async def process_start_command(message: Message):
await message.answer("Привет! Выберите услугу:", reply_markup=start_keyboard)

@dp.message(F.text == "Копирайтинг")
async def process_copywriting(message: Message):
await message.answer("Что вам нужно?", reply_markup=copywriting_keyboard)

data = {"Тема": "", "Объём": "", "Цель статьи": ""}

@dp.message(F.text == "Статья")
async def process_article(message: Message):
await message.answer("Пожалуйста, заполните форму:", reply_markup=article_form)



@dp.message(F.text == "Тема")
async def process_topic(message: Message):
global data
data["Тема"] = message.text
if data["Тема"]: # Проверка на наличие введенных данных
await message.answer("Тема статьи сохранена. Сколько слов должна содержать статья?")
else:
await message.answer("Пожалуйста, введите тему статьи.")

@dp.message(F.text == "Объём")
async def process_volume(message: Message):
global data
data["Объём"] = message.text
await message.answer("Объем статьи сохранен. Для какой цели вам нужна статья?")

@dp.message(F.text == "Цель статьи")
async def process_goal(message: Message):
global data
data["Цель статьи"] = message.text
await message.answer("Цель статьи сохранена. Вы можете отправить заявку.")

@dp.message(F.text == "Отправить заявку")
async def process_article_form(message: Message):
global data

# Отладочный вывод данных
print("Данные перед отправкой письма:")
print(data)

await send_email(data)
await message.answer("Ваша заявка принята! Мы свяжемся с вами в ближайшее время.")


@dp.message(F.text == "Назад")
async def process_back(message: Message):
await message.answer("Выберите услугу:", reply_markup=start_keyboard)

async def delete_webhook():
await bot.delete_webhook()

async def main():
await delete_webhook()
await dp.start_polling(bot)

if __name__ == '__main__':
import asyncio
asyncio.run(main())
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
392
110
43
 

PYDEV

Пользователь
Пользователь
Авг 31, 2023
53
13
8
Ознакомьтесь с FSM (Finite State Machine). Можно в принципе прочитать гошу. А в чем был то вопрос?
 

Форум IT Специалистов