MIME标头无法通过Gmail API进行

问题描述 投票:6回答:2

我正在尝试通过Gmail API自动创建草稿,我希望这些草稿是对现有电子邮件的回复。为此,我相信我需要设置“ threadId”标头(特定于Gmail),“ References”标头和“ In-Reply-To”标头。此外,为使Gmail认为该邮件是答复,“主题”标头必须与原始电子邮件匹配。

我将所有这些标头硬编码为MIMEText对象,然后将邮件作为字符串进行base-64编码(urlsafe),并让Gmail API传递。但是,“ threadId”,“ In-Reply-To”和“ References”标头似乎从未出现在发送的电子邮件中,因为在单击“显示原始”时显示的MIME中不存在这些标头。在Gmail用户界面中。

new = MIMEText("reply body text")
new["In-Reply-To"] = "[Message-ID of email to reply to]" #looks like <[email protected]>
new["References"] = "[Message-ID of email to reply to]" #looks like <[email protected]>
new["threadId"] = "[threadId of message to reply to]" #looks like 14ec476abbce3421
new["Subject"] = "Testsend2"
new["To"] = "[Email to send to]"
new["From"] = "[Email to send from]"

messageToDraft = {'raw': base64.urlsafe_b64encode(new.as_string())}
message = {'message': messageToDraft}
draft = service.users().drafts().create(userId="me", body=message).execute()
python mime gmail-api
2个回答
10
投票

实际上,比这简单得多!如果您仅在标题中提供正确的Subject,在正文中提供正确的threadId,则Google会为您计算所有引用。

new = MIMEText("This is the placeholder draft message text.")
new["Subject"] = "Example Mail"
new["To"] = "[email protected]"
new["From"] = "[email protected]"

raw = base64.urlsafe_b64encode(new.as_string())
message = {'message': {'raw': raw, 'threadId': "14ec598be7f25362"}}
draft = service.users().drafts().create(userId="me", body=message).execute()

这将产生草稿,可以在正确的线程中发送:

enter image description here

然后,我发送邮件。如您所见,引用是为您计算的:

MIME-Version: 1.0
Received: by 10.28.130.132 with HTTP; Sat, 25 Jul 2015 07:54:12 -0700 (PDT)
In-Reply-To: <CADsZLRz5jWF5h=6Cs1F45QQOiFuqNGmMeb6St5e-tOj3stCNiA@mail.gmail.com>
References: <CADsZLRwmDZ_L5_zWqE8qOgoKuvRiRTWUopqssn4+XYGM_SKrfg@mail.gmail.com>
    <CADsZLRz5jWF5h=6Cs1F45QQOiFuqNGmMeb6St5e-tOj3stCNiA@mail.gmail.com>
Date: Sat, 25 Jul 2015 16:54:12 +0200
Delivered-To: [email protected]
Message-ID: <CADsZLRxuyFhuGNPwjRrfFVQ0_2MxO=_jstjmsBGmAiwMEvfWSg@mail.gmail.com>
Subject: Example Mail
From: Emil Tholin <[email protected]>
To: Emil Tholin <[email protected]>
Content-Type: text/plain; charset=UTF-8

This is the placeholder draft message text.

0
投票

如果您不仅要创建草稿,还要发送它,然后再扩展上述代码(在草稿= ... create()。execute()之后的另一行:

    draft = service.users().drafts().create(userId="me", body= message).execute()
    message = service.users().drafts().send(userId='me', body={'id': draft['id']}).execute()
© www.soinside.com 2019 - 2024. All rights reserved.