尝试使用Gmail API创建对线程的草稿答复时,原始电子邮件内容未附加在草稿消息中

时间:2019-07-12 19:19:28

标签: gmail-api

标题说明了一切

我已经实现了使用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"

1 个答案:

答案 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 + ' &lt;<a href="mailto:' + inreplyto + '">' + inreplyto + '</a>&gt; 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