Ответ на почту с помощью

Столкнулся с проблемой отправки ответов на письма череp smtp, пишу на питоне 3.7. Кто-то подскажет как ответить на письмо в gmail? За любую помочь буду очень признателен!


Ответы (1 шт):

Автор решения: Motik

Для ответа на письмо, нужно к обычному сообщению добавить заголовки 'In-Reply-To' и 'References' их значение это 'Message-id', его можно посмотреть в оригинале сообщения. Так же тема('Subject') сообщения должна быть ' Re: ' + subject_msg, где subject_msg тема сообщения, смотрится в оригинале сообщения или по следующему коду.

from imapclient import IMAPClient
import smtplib
import random
import email


# Добавляем необходимые подклассы - MIME-типы
from email.mime.multipart import MIMEMultipart      # Многокомпонентный объект
from email.mime.text import MIMEText                # Текст/HTML
from email.mime.image import MIMEImage              # Изображения
from email.utils import formatdate

def search_id_reply_message():
    imap_server = IMAPClient('imap.gmail.com', use_uid=True)                      # оъявление класса
    imap_server.login(addr_from, password)                                        # авторизация
    connect_info = imap_server.welcome                                            # данные подключения
    print('Данные подключения к почте ' + addr_from + ': ' + str(imap_server.welcome))# принт данных подключения
    imap_server.select_folder('[Gmail]/All Mail')                                            # выбор папки инбокс
    msg = imap_server.search([u'UNSEEN', 'FROM', addr_to])                             # поиск uid сообщений
    print(msg[-1])
    print('msg_uid_list = ' + str(msg[-1]))
    msg_uid = msg[-1]
    print('msg_uid = ' + str(msg_uid))
    for uid, message_data in imap_server.fetch(msg_uid, 'RFC822').items():
        email_message = email.message_from_bytes(message_data[b'RFC822'])
        subject_msg = email_message.get('Subject')
        message_id = email_message.get('Message-id')
        print(uid, email_message.get('From'), email_message.get('Subject'), email_message.get('Message-id'))
    # status, data = imap_server.fetch(msg_uid, "(RFC822)")
    #     # email_data = data[0][1]
    imap_server.logout()
    return msg_uid, subject_msg, message_id

def send_message():
    server = smtplib.SMTP('smtp.gmail.com', 587)        # Создаем объект SMTP
    server.set_debuglevel(True)                         # Включаем режим отладки - если отчет не нужен, строку можно закомментировать
    server.starttls()                                   # Начинаем шифрованный обмен по TLS
    server.login(addr_from, password)                   # Получаем доступ
    server.send_message(msg)                            # Отправляем сообщение
    server.quit()                                       # Выходим

msg_uid, subject_msg, message_id = search_id_reply_message()

msg = MIMEMultipart()                                   # Создаем сообщение
msg['From'] = addr_from                                 # Адресат
msg['To'] = addr_to                                     # Получатель
msg['Subject'] = ' Re: ' + subject_msg                                     # Тема сообщения
msg['In-Reply-To'] = message_id # Какое сообщение привязать как ответ 
msg['References'] = message_id
msg['Date'] = formatdate(localtime=True)



body = reply_txt[random.randint(0, len(reply_txt)-1)] # Текст сообщения
msg.attach(MIMEText(body, 'plain'))                 # Добавляем в сообщение текст

send_message()

→ Ссылка