2016-05-31 2 views
0

Я могу отправить почту с помощью SMTP-сервера:Показать сообщения, отправленные через SMTP-сервер в моем IMAP «Отправленные» почтового ящика

self.smtp_connection.sendmail(
    '[email protected]', 
    recipients, # list of To, Cc and Bcc mails 
    mime_message.as_string() 
) 

Но я не могу увидеть почту, отправленную в «Отправленные» в учетной записи IMAP '[email protected]'. Как я могу сделать почту видимой в этом поле?

ответ

1

Протоколы SMTP и IMAP: две отличные вещи: письма, отправленные через SMTP-сервер, не видны IMAP.

Таким образом, вам необходимо смоделировать это поведение самостоятельно, отправив письмо на свой адрес (но не добавив вас в заголовок «To:» объекта MIME), а затем переместите почту в нужном поле:

Использование API абстракции, где smtp_connection и imap_connection правильно инициализирован, с той же учетной записью, под названием self.email_account:

def send(self, recipients, mime_message): 
    """ 
    From the MIME message (object from standard Python lib), we extract 
    information to know to who send the mail and then send it using the 
    SMTP server. 

    Recipients list must be passed, since it includes BCC recipients 
    that should not be included in mime_message header. 
    """ 
    self.smtp_connection.sendmail(
     self.email_account, 
     recipients + [self.email_account], 
     mime_message.as_string() 
    ) 

    ### On the IMAP connection, we need to move the mail in the "SENT" box 
    # you may need to be smarter there, since this name may change 
    sentbox_name = 'Sent' 

    # 1. Get the mail just sent in the INBOX 
    self.imap_connection.select_folder('INBOX', readonly=False) 
    sent_msg_id = self.imap_connection.search(['UNSEEN', 'FROM', self.username]) 
    if sent_msg_id: 
     # 2. Mark it as read, to not bother the user at each mail 
     self.imap_connection.set_flags(sent_msg_id, '\Seen') 
     # 3. Copy the mail in the sent box 
     self.imap_connection.copy(sent_msg_id, sentbox_name) 
     # 4. Mark the original to delete and clean the INBOX 
     self.imap_connection.set_flags(sent_msg_id, '\Deleted') 
     self.imap_connection.expunge()