[英]How to compress email (without any attachment) using Gmail API send() method?
我尝试过操作标头,尝试添加/替换编码到“gzip”,但添加新标头以接受“gzip”格式或替换当前标头只会增加 email 的整体大小,而不是减少它。
我的代码:
def create_message(sender, to, subject, message_text):
"""Create a message for an email.
Args:
sender: Email address of the sender.
to: Email address of the receiver.
subject: The subject of the email message.
message_text: The text of the email message.
Returns:
An object containing a base64url encoded email object.
"""
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
# message.add_header('Accept-Encoding', 'gzip')
# message.add_header('User-Agent', 'gzip')
message.add_header('Content-Encoding', 'gzip')
# message.replace_header('Content-Transfer-Encoding', 'gzip')
to_be_sent = {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}
return to_be_sent
def send_message(service, user_id, message):
"""Send an email message.
Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
message: Message to be sent.
Returns:
Sent Message.
"""
try:
message = (service.users().messages().send(userId=user_id, body=message).execute())
# print('Message Id: %s' % message['id'])
return message
except Exception as error:
print('An error occurred: %s' % error)
要阅读消息:
# Call the Gmail API - read
message = service.users().messages().get(userId="me", id=MESSAGE_ID, format="full").execute()
Gmail API 性能提示指出: 减少每个请求所需带宽的简单方便的方法是启用 gzip 压缩。为了接收 gzip 编码的响应,您必须做两件事:设置接受编码 Z099FB9953046F33E95EFZ9修改您的用户代理以包含字符串 gzip。
接受编码:gzip
用户代理:我的程序(gzip)
仍然不适合我。 只保持大小不变或增加它。
使用您要求的方法是不可能的。 正如@VPfB 提到的,文档说响应。
虽然我想到了替代方案,如果您的唯一目的是减小邮件大小,它就是压缩内容/正文。 如果需要,您还可以在之后解压缩内容。
我之前做过测试。 请参阅以下结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.