如何在 imaplib 或 imapclient 中使用 X-GM-THRID 发送电子邮件?

How to thread emails using X-GM-THRID either in imaplib or imapclient?

提问人:Chandrahas 提问时间:11/7/2023 最后编辑:Chandrahas 更新时间:11/22/2023 访问量:55

问:

在过去的几天里,我一直在尝试从谷歌发送电子邮件,并且感到非常沮丧。我想像 gmail 网络客户端通常所做的那样,将 gmail 中的所有电子邮件分组到线程中,并将每个线程中的所有文本分别连接成不同的字符串并将它们保存在文档中。imaplib 中的方法或解决方案会很棒,但我认为 imapclient 是高级的,所以我真的很喜欢。

到目前为止,我已经弄清楚了如何从电子邮件中提取文本,但我似乎找不到任何有关如何使用“X-GM-THRID”在我的收件箱中发送电子邮件的资源。我到处找,几乎尝试了一切。任何帮助将不胜感激。

编辑:这是我到目前为止从一封电子邮件中提取文本的代码。


#Import necessary packages
!pip install imaplib2
!pip install html2text
import imaplib2 as imap
import email
from email.header import decode_header, make_header
import html2text
import re

#Login
con = imap.IMAP4_SSL(imap_server)
con.login(username, password)

#Get list of emails in inbox
Mailbox = 'INBOX'
con.select(Mailbox, readonly = True)
_, email_ids = con.search(None, "ALL")
email_ids = email_ids[0].split()
print("Number of emails in ", Mailbox, " is: ", len(email_ids))

#Define function to extract text from an email given uid (Unique Identification Number)
def extract_text_from_email(uid):
    _, data = con.fetch(uid, "(RFC822)")
    email_message = email.message_from_bytes(data[0][1])
    text = ""
    text = text + "To: " + str(make_header(decode_header(email_message["To"]))) + ". "
    text = text + "From: " + str(make_header(decode_header(email_message["From"]))) + ". "
    text = text + "Date: " + str(make_header(decode_header(email_message["Date"]))) + ". "
    if email_message["BCC"]:
        text = text + "BCC: " + str(make_header(decode_header(email_message["BCC"]))) + ". "
    if email_message["Subject"]:
        text = text + "Subject: " + str(make_header(decode_header(email_message["Subject"]))) + ". "
    for part in email_message.walk():
        if part.get_content_type() == "text/plain":
            result = part.get_payload(decode = True).decode(part.get_content_charset())                  #Extracting payload if message type is plain text
            result = re.sub(r"http\S+", "url", result).replace("\n", " ").replace("\r","")               #Remove urls and replace them with "url" and remove "\n" and "\r"
            text = text + result
    return text

extract_text_from_email(email_ids[-1])
电子邮件 imap gmail-imap imapclient

评论

0赞 Babanana 11/7/2023
您能否分享您当前的代码进度,以突出您的问题以及您正在使用的库。
0赞 Chandrahas 11/7/2023
当然,完成了。我没有包括我的任何线程尝试,因为我真的不知道从哪里开始。

答:

0赞 arnt 11/22/2023 #1

X-GM-THRID非常简单:如果两条消息具有相同的 thrid,则它们位于同一线程中。

要使用它,只需以与以前相同的方式获取您的消息。您可以获取所有内容,也可以仅获取例如.创建一个以整数为键,以消息列表为值的字典。对于每条消息,请在字典中查找其第三条消息,并将该消息添加到消息列表中。现在,字典中的每个值都是一个线程。线程/列表可能已经粗略排序,但您可以轻松地按日期对其进行排序。BODYSTRUCTURE X-GM-THRID