繁体   English   中英

如何使用 Gmail API send() 方法压缩 email(无任何附件)?

[英]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 提到的,文档说响应。

虽然我想到了替代方案,如果您的唯一目的是减小邮件大小,它就是压缩内容/正文。 如果需要,您还可以在之后解压缩内容。

我之前做过测试。 请参阅以下结果:

测试条件:

  • 使用 Gmail API 在 Google Apps 脚本中测试(python 在我的设备中不可用)
  • 长字符串内容测试长度:8802
  • 短字符串内容测试长度:452
  • 测试用例通过这里生成
  • 使用的压缩是LZ 字符串压缩

Output(尺寸估计):

  • 长未压缩:18928
  • 长压缩:18421
  • 短未压缩:1627
  • 短压缩:2081

结论:

  • 如果您打算在内容相当短的电子邮件中使用它,请不要打扰,它不会为您节省任何存储空间,只会扩大大小。
  • 如果您在长内容电子邮件中使用它,它可以节省很少的存储空间,但您可以决定是否值得节省这么多,但每次您想阅读 email 时都需要解压缩它。
  • 参考包括压缩和解压缩功能。
  • 如果您想最终测试它,请参阅eduardtomasek 的 Python 实现

暂无
暂无

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

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