标题说明了一切
我已经实现了使用gmail api文档生成到草稿的线程。尽管如此,它还是行不通的。
def create_message(sender, to, cc, bcc,inreplyto, subject, message_text, file=None, thread=None):
message = MIMEMultipart()
message['to'] = to
if cc:
message['cc'] = cc
if bcc:
message['bcc'] = bcc
message["In-Reply-To"] =inreplyto
message["References"] = inreplyto
message['from'] = sender
message['subject'] = subject
msg = MIMEText(message_text, 'html')
message.attach(msg)
#if file:
#message = attach_file(message, file)
output = {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}
if thread:
output['threadId'] = thread
return output
#RFC format is followed as well
假设我的收件箱中有一封电子邮件"A"
。使用gmail API的Python脚本会创建对此电子邮件的草稿答复,并以"B"
的形式存储在我的收件箱中。
预期 但是,我希望它以原始的Gmail答复格式存储-
"B
..."
,当您单击三个点时,应显示原始电子邮件"A"
。
答案 0 :(得分:0)
Gmail API没有您想要的功能。您将必须手动执行。我尝试手动进行操作,获得了要回复的消息对象并获取了其主体数据。我将邮件的正文数据与您希望的结构连接起来,如下所示:
def createBody(message_text, inreplyto, replyName, replyBody):
body = '<div dir="ltr">' \
+ message_text\
+ '</div><br>'\
+ '<div class="gmail_quote"><div dir="ltr" class="gmail_attr">'\
+ 'On Thu, Jul 18, 2019 at 11:06 AM ' + replyName + ' <<a href="mailto:' + inreplyto + '">' + inreplyto + '</a>> wrote:<br></div>'\
'<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">'\
+ replyBody\
+ '</div>'\
+ '</blockquote>'
您可以使用Gmail文档[1]的“尝试此API”功能自行检查此结构。
我将这段代码放入您的create_message函数中,以将手动修改的正文设置为草稿消息:
#create body
message_text = createBody(message_text, inreplyto, "name", replyBody)
msg = MIMEText(message_text, 'html')
message.attach(msg)
我在这里收到要回复的消息以及消息正文:
replyBody = base64.b64decode(service.users().messages().get(userId="me", id="XXXX").execute()['payload']['parts'][1]['body']['data']+'==')
对我来说,它可以使用结构化的草稿,但是我无法正确解码ReplyBody数据(在在线工具中可以正确解码,但在Python中不能正确解码,不知道为什么)。待处理的另一件事是找到一种方法来获取您要回复的人的名字。
[1] https://developers.google.com/gmail/api/v1/reference/users/messages/get