在我的 IMAP "Sent" 邮箱中显示通过 SMTP 服务器发送的邮件
Show mail sent through SMTP server in my IMAP "Sent" mailbox
我可以使用 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 帐户的"Sent" 邮箱中看不到发送的邮件。如何使邮件在此框中可见?
SMTP 和 IMAP 协议是两个不同的东西:通过 SMTP 服务器发送的邮件对于 IMAP 服务器是不可见的。
因此,您需要自己模拟此行为,方法是将邮件发送到您自己的地址(但不要在 MIME object 的 "To:" header 中添加您)和然后将邮件移入正确的邮箱:
使用 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()
我可以使用 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 帐户的"Sent" 邮箱中看不到发送的邮件。如何使邮件在此框中可见?
SMTP 和 IMAP 协议是两个不同的东西:通过 SMTP 服务器发送的邮件对于 IMAP 服务器是不可见的。
因此,您需要自己模拟此行为,方法是将邮件发送到您自己的地址(但不要在 MIME object 的 "To:" header 中添加您)和然后将邮件移入正确的邮箱:
使用 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()