При прикреплении фотографии и текста, на почту приходит только фотография_ телеграм бот
Телеграм бот должен отправлять сообщение на почту, сообщение может содержать как просто текст, так и\или фото. Но если в телеграме приложить фотографию и написать текст, то на почту придет только фотография. Подскажите, в чем проблема?
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)
Источник: Stack Overflow на русском