При прикреплении фотографии и текста, на почту приходит только фотография_ телеграм бот

Рейтинг: 0Ответов: 1Опубликовано: 27.04.2023

Телеграм бот должен отправлять сообщение на почту, сообщение может содержать как просто текст, так и\или фото. Но если в телеграме приложить фотографию и написать текст, то на почту придет только фотография. Подскажите, в чем проблема?

import os
import telebot
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage


# TOKEN
TOKEN = '59**1:AAH**lk'

# настройки почты
FROMADDR = ''
PASSWORD = ''
TOADDR = ''

bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['start'])
def process_start(message):
    # отправляем приветственное сообщение
    bot.send_message(message.chat.id, 'Привет!\nЯ бот 🤖, который очень хочет решить вашу проблему.\nДля этого мне нужно знать ваши данные, а именно:\n📃ФИО\n📱Сотовый номер\n🏫Филиал\n💼Должность\n💥Описание проблемы')

@bot.message_handler(content_types=['text', 'photo'])
def send_form(message):
    try:
        # получаем информацию о пользователе и формируем сообщение для отправки на почту
        msg = MIMEMultipart()
        msg['From'] = FROMADDR
        msg['To'] = TOADDR
        msg['Subject'] = f'Заявка от телеграм-бота'
        
 # Добавляем текст сообщения
        if message.text:
            body = message.text + '\n\n'
            msg.attach(MIMEText(body, 'plain'))

        # Проверяем, есть ли фотография в сообщении
        if message.photo:
            # Сохраняем фотографию во временный файл
            file_info = bot.get_file(message.photo[-1].file_id)
            downloaded_file = bot.download_file(file_info.file_path)
            temp_file_name = 'temp.jpg'
            with open(temp_file_name, 'wb') as temp_file:
                temp_file.write(downloaded_file)

             #Добавляем фотографию в сообщение
            with open(temp_file_name, 'rb') as image_file:
                image = MIMEImage(image_file.read(), name=os.path.basename(temp_file_name))
                msg.attach(image)
            os.remove(temp_file_name)

        # Отправляем сообщение на почту
        with smtplib.SMTP_SSL('smtp.mail.ru', 465) as smtp_server:
            smtp_server.ehlo()
            smtp_server.login(FROMADDR, PASSWORD)
            smtp_server.sendmail(FROMADDR, TOADDR, msg.as_string())

        bot.reply_to(message, 'Я отправил заявку на ***💌\nСкоро с вами свяжется специалист тех. поддержки👷‍♂️\nВ случае возникновения вопросов, обратитесь на ***📞')
    except Exception as e:
        print(f'Error: {e}')
        bot.reply_to(message, 'Произошла ошибка при отправке формы.')


bot.polling(none_stop=True)

Ответы

▲ 0Принят

если отправлена анимация/аудио/документ/фотография с подписью, это не message.text, а message.caption.

https://core.telegram.org/bots/api#message

caption, String

Подпись к анимации, аудио, документу, фотографии, видео или голосу