为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不丢失格式的情况下在新电子邮件中发送现有消息

如何在不丢失格式的情况下在新电子邮件中发送现有消息

噜噜哒 2022-06-22 19:44:22
上下文: 我正在尝试将收件箱中的现有电子邮件发送到新线程。问题: 我已使用此功能成功发送电子邮件正文,但正文丢失了原始电子邮件的格式,仅发送文本。我认为将整个有效负载添加到请求正文中更有意义,如gmail API 页面“尝试此 API”部分中所述:但是,当我将有效负载添加到请求正文时:def create_message(sender, to, subject, thread_id, message_id, payload, service):  """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 = MIMEMultipart('alternative')  message['to'] = to  message['from'] = sender  message['subject'] = 'Re: %s' %subject  return {'raw': raw, 'threadId': thread_id, 'payload': payload}发送的电子邮件没有内容。如何将现有电子邮件添加到新线程而无需解码和编码并丢失电子邮件的格式?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

在搞砸之后,我制作了两个函数,可以将plain和html内容类型传递给可能遇到困难的任何人的新电子邮件:


def get_all_parts(service, user_id, msg_id):

  message = service.users().messages().get(userId=user_id, id=msg_id, format='raw').execute()

  msg_bytes = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))

  b = email.message_from_bytes(msg_bytes)

  body = []


  if b.is_multipart():

    for part in b.walk():

      if part.get_content_maintype() != 'multipart':

        this_part = []

        this_part.append(part.get_payload(decode=True))

        this_part.append(part.get_content_type())

        body.append(this_part)


  return body


def create_message(sender, to, subject, thread_id, message_id, message_text, service):

  message = MIMEMultipart()

  message['to'] = to

  message['from'] = sender

  message['subject'] = 'Re: %s' %subject

  for part in message_text:

    text = part[1].split('/') # 'text/plain' -> ['text', 'plain']

    new_part = MIMEText(str(part[0]), text[1])

    print(part[1])

    message.attach(new_part)


  raw = base64.urlsafe_b64encode(message.as_string().encode('UTF-8')).decode('ascii')   

  body = {'raw': raw, 'threadId': thread_id}


enter code here

这绝对不是所有电子邮件的详尽功能,但适用于alternative内容类型。


查看完整回答
反对 回复 2022-06-22
?
郎朗坤

TA贡献1921条经验 获得超9个赞

如果您从 Gmail UI 打开电子邮件,请单击三个点并选择“显示原始”,

您可以观察电子邮件结构

样本:

信息

在此处输入图像描述

显示原件

在此处输入图像描述

  • 您可以看到消息是multipart/alternative并且包含一个text/plain和一个text/html部分

  • 如果您使用示例中的整个突出显示的代码作为消息的正文,则格式将被保留。您只需要指定From,ToSubject标头。


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信