繁体   English   中英

使用 Gmail API 向电子邮件线程发送回复

[英]Send Reply to email thread using Gmail API

我正在尝试回复我发送给自己的电子邮件,电子邮件的主题是“测试函数”我有一个函数 subject() 返回主题、message_id 和 thread_id 如下(“测试函数”、“DEFxmu7HPSRAti50ki2i6PK_DOOPLwMm5fiR+_dPkcOR7mep7hQ@ mail.gmail.com', '166e2507fc661924')

我的完整代码是:

def create_message(sender, to, message_id, thread_id, subject, message_text):
    message = MIMEText(message_text)
    message['from'] = sender
    message['to'] = to
    message['In-Reply-To'] = message_id
    message['References'] = message_id
    message['threadId'] = thread_id
    message['subject'] = subject

    return {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}

def send_message(service, user_id, message):
    message = (service.users().messages().send(userId="me", 
    body=message).execute())
    print('Message Id: %s' % message['id'])
    return message

def send_email(orders):
    SCOPES = 'https://mail.google.com/'
    credentials = auth.get_user_oauth2_credentials(scopes=SCOPES, 
                                                   client_id='xxxxx', 
                                                   client_secret='xxxxxx')
    service = discovery.build('gmail','v1', credentials=credentials)
    message_text = orders[0]
    created_message = create_message('th14@gmail.com','th14@gmail.com', 
        subject()[1],subject()[2], subject()[0], message_text)
    send_message(service, 'me', created_message)

send_email(['Msg Received'])

它发送电子邮件但不发送到所需的线程,只发送一封新电子邮件。

根据此文档 ,您可以在插入发送消息的过程中向线程添加消息。

为了成为主题的一部分,消息或草稿必须满足以下条件:

  1. 必须在随请求提供的MessageDraft.Message上指定请求的threadId
  2. ReferencesIn-Reply-To标头必须符合RFC 2822标准进行设置。
  3. Subject标题必须匹配。

检查此链接以获取其他参考: 如何使用Gmail API发送回复

您需要添加threadId到你的回报create_message功能。

return {
    'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode(),
    'threadId':thread_id
}

另外,删除message['threadId'] = thread_id

def create_message(sender, to, message_id, thread_id, subject, message_text):
    message = MIMEText(message_text)
    message['from'] = sender
    message['to'] = to
    message['In-Reply-To'] = message_id
    message['References'] = message_id
    message['subject'] = subject

    return {
        'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode(),
        'threadId':thread_id
    }

现在只需调用send_message传递从上面的函数创建的消息:假设subject()[1] = "$your_thread_id"

SCOPES = 'https://mail.google.com/'
credentials = auth.get_user_oauth2_credentials(scopes=SCOPES, 
                                                   client_id='xxxxx', 
                                                   client_secret='xxxxxx')
service = discovery.build('gmail','v1', credentials=credentials)
message_text = orders[0]
created_message = create_message('th14@gmail.com','th14@gmail.com', 
    subject()[1],subject()[2], subject()[0], message_text)
send_message(service, 'me', created_message)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM