【问题标题】:Show mail sent through SMTP server in my IMAP "Sent" mailbox在我的 IMAP“已发送”邮箱中显示通过 SMTP 服务器发送的邮件
【发布时间】:2016-09-29 17:57:51
【问题描述】:

我可以使用 SMTP 服务器发送邮件:

self.smtp_connection.sendmail(
    'my_smtp_username@provider.com',
    recipients,  # list of To, Cc and Bcc mails
    mime_message.as_string()
)

但我在“my_smtp_username@provider.com”IMAP 帐户的“已发送”框中看不到发送的邮件。如何使邮件在此框中可见?

【问题讨论】:

    标签: python smtplib imaplib


    【解决方案1】:

    SMTP 和 IMAP 协议是两个不同的东西:通过 SMTP 服务器发送的邮件对 IMAP 来说是不可见的。

    因此,您需要自己模拟这种行为,将邮件发送到您自己的地址(但不要将您添加到 MIME 对象的“To:”标头中),然后将邮件移动到正确的框中:

    使用 API 抽象,其中 smtp_connectionimap_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()
    

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 2011-02-07
      • 2016-02-09
      • 2011-10-21
      相关资源
      最近更新 更多