通过 Gmail API 发送多部分/签名电子邮件 (RFC 3156)

2023-11-21

尝试构建符合 RFC3156 [0] 的消息,并通过 Gmail API 发送它(我正在使用 python 客户端实现)。

我得到的是:在我的 Gmail 邮箱中,邮件已正确发送(我看到的正是我之前构建的邮件)·

我的接收者得到的是:一条“多部分/混合”消息,其有效负载与我发送的消息相同。

似乎在某个时候,Gmail 改变了我的内容类型……这是真的吗?

作为解决方法,我使用 SMTP 连接(其行为如我所料,正确发送消息),但将来我希望避免此步骤,转而使用纯 Gmail API 应用程序。

您能否确认这个问题?

[0] - 这是一个测试示例:

发送消息:

message_as_str = '''Content-Type: multipart/signed; protocol="application/pgp-signature";\n micalg="pgp-sha512"; boundary="===============0594182808971957567=="\nMIME-Version: 1.0\nDate: Wed, 12 Nov 2014 12:18:02 +0100\nSubject: A test email\nFrom: Leo Iannacone <[email protected]>\nTo: Andrea Colangelo <[email protected]>\n\n--===============0594182808971957567==\nContent-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\nHello,\r\n\r\nthis is a signed email (RFC 3156).\r\n\r\nBest,\r\nL.\r\n\r\n-- =\r\n\r\nUbuntu Member - http://launchpad.net/~l3on\r\nHome Page - http://leoiannacone.com\r\nGPG Key Id - 0xD282FC25\r\n\n--===============0594182808971957567==\nContent-Type: application/pgp-signature; name="signature.asc"\nContent-Description: GooPG digital signature\n\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABCgAGBQJUY0JcAAoJEDMrlP7SgvwlQakP/jmw6OOcafFAxMnMZNBREnG6\nGF3cG/ACJ6BeYhOb0Q2HFQrUKACbsB8QaTxSCf3q7O0HIl5Atr9IVmVIoUuHOM9M\nZt66LWQ3ZUpvyulBswYOq4ERkeeAZh8AYHCz81SUWt42PDn+RrrKESifkgOgy1cM\nUpNUXX99cppdY3w1oKVS0SFdhT4ZDNSr6PVUzPzWOHNk3OGOg4okTJOag3lp5R1x\nIMQ4plOFNNUs1bDDOpH75TOOGIAdqqgInH5fOk8h2djrPyCozhyllrpCJdiCkrj9\njkL/m0nNS/wHW/pnqSPHZuMDrEYCiiI4fqJYZUkiXQu/koDt40TUqAdeEy1HWJS2\npPqqXjjiZ1jlQ2IBbOG8YfgsLmexTyNE6CmPBXiVk6zY2hnhA6sjq/I9qF8F73SS\nFALfkbdRddN7NMzjFVES3eV2gfrUrQnxru2G8urUeeQ2POQrxsGQvb5CrK7VMaUx\nteB9UruIpPLNUYR0E7Cr17lqlMR5ILdSlx5xFxIIjg3pfItHQXoOfyusoO1xt8XK\ntY8oateT4dgwfR2qrguAnZ96vXtI1soqy8P1TLrJAI/d95kIw4PMzWVm1GjyUiRe\ngPhYqvGQV6jc0oUCp+/1MXGUe0zb0meMnBu2f3e/h5Lxkd2z4lPPdxejpNaFc2H1\nuC+56ZJxbKlu73UPsTYh\n=gQKI\n-----END PGP SIGNATURE-----\n\n--===============0594182808971957567==--'''

raw = base64.urlsafe_b64encode(message_as_str)
gmail_service.users().messages().send(userId='me', body={'raw':raw}).execute()

我的发件箱里有:

Received: from 333313917298-rr7th7jvf4alej59jkv5bbs2fl8sc0j9.apps.googleusercontent.com
    named unknown
    by gmailapi.google.com
    with HTTPREST;
    Wed, 12 Nov 2014 03:23:50 -0800
Content-Type: multipart/signed; protocol="application/pgp-signature";
 micalg="pgp-sha512"; boundary="===============0594182808971957567=="
MIME-Version: 1.0
Date: Wed, 12 Nov 2014 03:23:50 -0800
Subject: A test email
From: Leo Iannacone <[email protected]>
To: Andrea Colangelo <[email protected]>
Message-Id: <CACzqv1fvmbg2Er0Fi-poFSfEDaCLXxW-WGQr8dwHma6t9NjBzA@mail.gmail.com>

--===============0594182808971957567==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Hello,

this is a signed email (RFC 3156).

Best,
L.

-- =

Ubuntu Member - http://launchpad.net/~l3on
Home Page - http://leoiannacone.com
GPG Key Id - 0xD282FC25

--===============0594182808971957567==
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: GooPG digital signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAABCgAGBQJUY0JcAAoJEDMrlP7SgvwlQakP/jmw6OOcafFAxMnMZNBREnG6
GF3cG/ACJ6BeYhOb0Q2HFQrUKACbsB8QaTxSCf3q7O0HIl5Atr9IVmVIoUuHOM9M
Zt66LWQ3ZUpvyulBswYOq4ERkeeAZh8AYHCz81SUWt42PDn+RrrKESifkgOgy1cM
UpNUXX99cppdY3w1oKVS0SFdhT4ZDNSr6PVUzPzWOHNk3OGOg4okTJOag3lp5R1x
IMQ4plOFNNUs1bDDOpH75TOOGIAdqqgInH5fOk8h2djrPyCozhyllrpCJdiCkrj9
jkL/m0nNS/wHW/pnqSPHZuMDrEYCiiI4fqJYZUkiXQu/koDt40TUqAdeEy1HWJS2
pPqqXjjiZ1jlQ2IBbOG8YfgsLmexTyNE6CmPBXiVk6zY2hnhA6sjq/I9qF8F73SS
FALfkbdRddN7NMzjFVES3eV2gfrUrQnxru2G8urUeeQ2POQrxsGQvb5CrK7VMaUx
teB9UruIpPLNUYR0E7Cr17lqlMR5ILdSlx5xFxIIjg3pfItHQXoOfyusoO1xt8XK
tY8oateT4dgwfR2qrguAnZ96vXtI1soqy8P1TLrJAI/d95kIw4PMzWVm1GjyUiRe
gPhYqvGQV6jc0oUCp+/1MXGUe0zb0meMnBu2f3e/h5Lxkd2z4lPPdxejpNaFc2H1
uC+56ZJxbKlu73UPsTYh
=gQKI
-----END PGP SIGNATURE-----

--===============0594182808971957567==--

我的接收者得到的正是:

Delivered-To: [email protected]
Received: by 10.70.104.40 with SMTP id gb8csp207478pdb;
        Wed, 12 Nov 2014 03:23:54 -0800 (PST)
X-Received: by 10.194.94.132 with SMTP id dc4mr64238431wjb.56.1415791433615;
        Wed, 12 Nov 2014 03:23:53 -0800 (PST)
Return-Path: <[email protected]>
Received: from fiordland.canonical.com (fiordland.canonical.com. [91.189.94.145])
        by mx.google.com with ESMTP id 16si39684910wjr.38.2014.11.12.03.23.53
        for <[email protected]>;
        Wed, 12 Nov 2014 03:23:53 -0800 (PST)
Received-SPF: softfail (google.com: domain of transitioning [email protected] does not designate 91.189.94.145 as permitted sender) client-ip=91.189.94.145;
Authentication-Results: mx.google.com;
       spf=softfail (google.com: domain of transitioning [email protected] does not designate 91.189.94.145 as permitted sender) [email protected]
Received: from mail-ig0-f170.google.com (mail-ig0-f170.google.com [209.85.213.170])
    by fiordland.canonical.com (Postfix) with ESMTPS id ABACCA183B1
    for <[email protected]>; Wed, 12 Nov 2014 11:23:52 +0000 (UTC)
Received: by mail-ig0-f170.google.com with SMTP id a13so1193944igq.5
        for <[email protected]>; Wed, 12 Nov 2014 03:23:51 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=mime-version:from:date:message-id:subject:to:content-type;
        bh=W/iDzPadzt4k3bMV8jLK7/5iZLI23kjqCuGNPJ0hdzY=;
        b=MFCFT42IlWfQzbXCCG5slCE4vzpsZg2WQpkmwFa7L46b61Yd/zQ522GgPA1rRhsSrP
         pHhuhPUfCy6HjZRIFf8GqgtTPhinLiuli+ClOz6Oe9rvjH2JK5ILxf0+17woL1n48QAW
         xHnJfo8A/qhBvN42AfdSNVhvcQqQObZ25wBe08zwDJeEWT2XRRiDXcWdWagyqisTronc
         kj3CwRj5AOBThEpzA+wPC0Aalofqqu+YMIMuchBoTsfh437BxkHJLg+il6kDobJXVtXB
         9OPc8o2JqtWwnzHEkC6QKFG54ddoPwvuyq6S325zuDfuKoVrLGeC/kzWRQP+SudBTw0J
         RWBA==
X-Received: by 10.107.135.146 with SMTP id r18mr1699637ioi.62.1415791431765;
 Wed, 12 Nov 2014 03:23:51 -0800 (PST)
Received: from 333313917298-rr7th7jvf4alej59jkv5bbs2fl8sc0j9.apps.googleusercontent.com
 named unknown by gmailapi.google.com with HTTPREST; Wed, 12 Nov 2014 03:23:50 -0800
MIME-Version: 1.0
From: Leo Iannacone <[email protected]>
Date: Wed, 12 Nov 2014 03:23:50 -0800
Message-ID: <CACzqv1fvmbg2Er0Fi-poFSfEDaCLXxW-WGQr8dwHma6t9NjBzA@mail.gmail.com>
Subject: A test email
To: Andrea Colangelo <[email protected]>
Content-Type: multipart/mixed; boundary=001a113f96625df1a80507a7a1d8

--001a113f96625df1a80507a7a1d8
Content-Type: text/plain; charset=ISO-8859-1

Hello,

this is a signed email (RFC 3156).

Best,
L.

-- 
Ubuntu Member - http://launchpad.net/~l3on
Home Page - http://leoiannacone.com
GPG Key Id - 0xD282FC25

--001a113f96625df1a80507a7a1d8
Content-Type: application/pgp-signature; name="signature.asc"
Content-Disposition: attachment; filename="signature.asc"
Content-Transfer-Encoding: base64
X-Attachment-Id: bc758a9561fcd7dc_0.1

LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KVmVyc2lvbjogR251UEcgdjEKCmlRSWNCQUFC
Q2dBR0JRSlVZMEpjQUFvSkVETXJsUDdTZ3Z3bFFha1Avam13Nk9PY2FmRkF4TW5NWk5CUkVuRzYK
R0YzY0cvQUNKNkJlWWhPYjBRMkhGUXJVS0FDYnNCOFFhVHhTQ2YzcTdPMEhJbDVBdHI5SVZtVklv
VXVIT005TQpadDY2TFdRM1pVcHZ5dWxCc3dZT3E0RVJrZWVBWmg4QVlIQ3o4MVNVV3Q0MlBEbitS
cnJLRVNpZmtnT2d5MWNNClVwTlVYWDk5Y3BwZFkzdzFvS1ZTMFNGZGhUNFpETlNyNlBWVXpQeldP
SE5rM09HT2c0b2tUSk9hZzNscDVSMXgKSU1RNHBsT0ZOTlVzMWJERE9wSDc1VE9PR0lBZHFxZ0lu
SDVmT2s4aDJkanJQeUNvemh5bGxycENKZGlDa3JqOQpqa0wvbTBuTlMvd0hXL3BucVNQSFp1TURy
RVlDaWlJNGZxSllaVWtpWFF1L2tvRHQ0MFRVcUFkZUV5MUhXSlMyCnBQcXFYamppWjFqbFEySUJi
T0c4WWZnc0xtZXhUeU5FNkNtUEJYaVZrNnpZMmhuaEE2c2pxL0k5cUY4RjczU1MKRkFMZmtiZFJk
ZE43Tk16akZWRVMzZVYyZ2ZyVXJRbnhydTJHOHVyVWVlUTJQT1FyeHNHUXZiNUNySzdWTWFVeAp0
ZUI5VXJ1SXBQTE5VWVIwRTdDcjE3bHFsTVI1SUxkU2x4NXhGeElJamczcGZJdEhRWG9PZnl1c29P
MXh0OFhLCnRZOG9hdGVUNGRnd2ZSMnFyZ3VBblo5NnZYdEkxc29xeThQMVRMckpBSS9kOTVrSXc0
UE16V1ZtMUdqeVVpUmUKZ1BoWXF2R1FWNmpjMG9VQ3ArLzFNWEdVZTB6YjBtZU1uQnUyZjNlL2g1
THhrZDJ6NGxQUGR4ZWpwTmFGYzJIMQp1Qys1NlpKeGJLbHU3M1VQc1RZaAo9Z1FLSQotLS0tLUVO
RCBQR1AgU0lHTkFUVVJFLS0tLS0K
--001a113f96625df1a80507a7a1d8--

正如您所看到的...内容类型与我发送的邮件中的内容以及我在他的收件箱中收到的内容不同。


根据我的测试,这似乎是 Gmail API 的问题。目前尚不清楚 API 是否计划支持此用例,但我已向工程团队提出了这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Gmail API 发送多部分/签名电子邮件 (RFC 3156) 的相关文章

  • Mac OS 上的诗歌安装失败,显示“should_use_symlinks”

    我正在尝试使用以下命令安装诗歌 curl sSL https install python poetry org python3 但它失败了 但有以下例外 例外 此版本的 python 无法在不使用符号链接的情况下创建 venvs 下面是详
  • Google App Engine queue.yaml 无法在开发服务器中工作

    我无法让 dev appserver py 识别我使用queue yaml 创建的自定义队列 他们没有出现在http localhost 8000 taskqueue http localhost 8000 taskqueue 当我尝试向其
  • 如何在Python中流式传输和操作大数据文件

    我有一个相对较大 1 GB 的文本文件 我想通过跨类别求和来减小其大小 Geography AgeGroup Gender Race Count County1 1 M 1 12 County1 2 M 1 3 County1 2 M 2
  • 使用 pygame 显示 unicode 符号

    我检查了其他答案 但不明白为什么我的代码错误地显示 This is what I currently see https i stack imgur com 8tNIK png 这是关于文本渲染的相关代码 font pygame font
  • Pandas:GroupBy 到 DataFrame

    参考这个关于 groupby 到 dataframe 的非常流行的问题 https stackoverflow com questions 10373660 converting a pandas groupby object to dat
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • pyspark 数据框中的自定义排序

    是否有推荐的方法在 pyspark 中实现分类数据的自定义排序 我理想地寻找 pandas 分类数据类型提供的功能 因此 给定一个数据集Speed列 可能的选项是 Super Fast Fast Medium Slow 我想实现适合上下文的
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • Python3.0 - 标记化和取消标记化

    我正在使用类似于以下简化脚本的内容来解析较大文件中的 python 片段 import io import tokenize src foo bar src bytes src encode src io BytesIO src src l
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • Python新式类和__subclasses__函数

    有人可以向我解释为什么这有效 在 Python 2 5 中 class Foo object pass class Bar Foo pass print Foo subclasses 但这不是 class Foo pass class Ba
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • 通过索引访问Python字典的元素

    考虑一个像这样的字典 mydict Apple American 16 Mexican 10 Chinese 5 Grapes Arabian 25 Indian 20 例如 我如何访问该字典的特定元素 例如 我想在对 Apple 的第一个
  • ANTLR 获取并拆分词法分析器内容

    首先 对我的英语感到抱歉 我还在学习 我为我的框架编写 Python 模块 用于解析 CSS 文件 我尝试了 regex ply python 词法分析器和解析器 但我发现自己在 ANTLR 中 第一次尝试 我需要解析 CSS 文件中的注释
  • 将seaborn.palplot轴添加到现有图形中以可视化不同调色板

    将seaborn人物添加到子图中是usually https seaborn pydata org examples cubehelix palette html创建图形时通过传递 ax 来完成 例如 sns kdeplot x y cma
  • 在 keras 中保存和加载权重

    我试图从我训练过的模型中保存和加载权重 我用来保存模型的代码是 TensorBoard log dir output model fit generator image a b gen batch size steps per epoch
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 混淆矩阵不支持多标签指示符

    multilabel indicator is not supported是我在尝试运行时收到的错误消息 confusion matrix y test predictions y test is a DataFrame其形状为 Horse
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que

随机推荐

  • 将任意 R 对象存储到 HDD 上?

    据我所知 我们可以将数据矩阵导出到csv or xlsx files 对于像这样的复杂对象呢 lm 例如 在我的工作中 我可能有一个长度为 1000 的列表 每个列表都有一个lm 目的 每次我加载R我必须等待很长时间才能用这些填充 1000
  • 错误:(-2:未指定错误)该功能未实现。使用 Windows、GTK+ 2.x 或 Cocoa 支持重建库

    我正在 jupyter 笔记本上从事手语检测项目 在运行活体检测代码时 我遇到了如下错误 OpenCV 4 5 1 C Users appveyor AppData Local Temp 1 pip req build 1drr4hl0 o
  • 加载数据时pig出错

    我使用的是 ubuntu 12 02 32bit 并已安装hadoop2 2 0 and pig 0 12成功地 Hadoop 在我的系统上运行正常 但是 每当我运行此命令时 data load atoz csv using PigStor
  • 将应用程序配置为 Facebook 错误:“应用程序的 Facebook 登录配置错误..”[重复]

    这个问题在这里已经有答案了 可能的重复 应用程序的 Facebook 登录配置错误 Android Facebook 集成问题 我正在尝试将 facebook 集成到我的应用程序中 当我按下登录按钮并填写电子邮件和密码时 我在应用程序中收到
  • Angular Material 7 拖放 x 和 y 坐标

    我有一个容器 里面有一个元素 我希望能够将元素拖动到容器内的另一个位置并查看新的 x 和 y 坐标 其中 x 0 和 y 0 是容器的左上角 我在以下位置设置了一个基本的 stackblitzhttps stackblitz com edi
  • 为什么我的数字四舍五入不正确?

    这感觉像是那种只会在原地失败的代码 但我会尝试将其改编成代表我所看到内容的代码片段 float f myFloat myConstInt Where myFloat 13 45 and myConstInt 20 int i int f i
  • 执行 pipfile 脚本

    如何执行 Pipfile 中定义的脚本 按照语法发现here 我在 pipfile 中定义了脚本部分 如下所示 scripts tests bash run tests sh 运行后 pipenv install 我怎样才能调用tests
  • 安装apk时出现java.lang.SecurityException

    如你所知 apk 是一个 zip 存档 我提取了它并替换了一些资源 然后再次压缩它 当我安装它时 我收到此异常 java lang SecurityException META INF MANIFEST MF 具有无效摘要 这个错误有什么解
  • 什么时候调用 C++ 析构函数?

    基本问题 程序何时调用 C 中类的析构函数方法 有人告诉我 只要一个对象超出范围或受到某个对象的影响 就会调用它delete 更具体的问题 1 如果该对象是通过指针创建的 并且该指针后来被删除或被赋予一个新的地址来指向 那么它所指向的对象是
  • TaskCreationOptions.AttachedToParent 不等待子任务

    根据 MSDN 您可以使用 AttachedToParent 选项来表达结构化任务 并行性 因为父任务隐式等待所有子任务 要完成的任务 所以我有这个代码 public async Task
  • 读取内核空间中的符号链接

    我正在编写 LKM 需要找出特定符号链接指向的位置 基本上我需要系统调用的功能readlinkat or readlink 但是在内核空间中 是否有捷径可寻 Using readlinkat直接对我不起作用 我总是收到 EFAULT 我猜这
  • 定义内部枚举[重复]

    这个问题在这里已经有答案了 在linux内核源代码中 我看到在枚举内部 是否还有一个与枚举元素同名的定义 示例中linux rtnetlink h我们有 enum RTM BASE 16 define RTM BASE RTM BASE R
  • 循环引用和 WCF

    我已经使用 POCO Generator 生成了 POCO 实体 我的数据库中有超过 150 个表 我在整个应用程序层 包括客户端 共享 POCO 实体 我在我的上下文中禁用了 LazyLoading 和 ProxyCreation 我在数
  • 在不知道xml文件结构的情况下解析xml文件内容

    我一直在学习一些使用 java 解析文件的新技术 对于 msot 部分 进展顺利 但是 我不知道如何将 xml 文件解析到收到后结构未知的位置 如果您知道结构的话 有很多关于如何执行此操作的示例 getElementByTagName 似乎
  • 如何获取android中加载mapview的进度状态?

    当地图处于加载状态时 我想在地图视图的中心放置一个进度条 如何获得进度 以及怎么办 给我一些例子 thanks 我认为没有任何合理的方法可以做到这一点 请注意 谷歌在其地图应用程序中也没有这样做 只需查看页面即可清楚地了解图块是否仍在加载
  • Spring security - oauth2 资源服务器测试

    我在使用 WebMvcTest 和 POST HTTP 方法测试 oauth2 资源服务器时遇到一些问题 当我不发送 csrf 令牌时 我总是收到 403 状态代码 即使当我使用不记名令牌时不需要该令牌 这是我要测试的 POST 方法 Po
  • 保持回发时的页面位置

    我有个问题
  • 从 URL 获取路径

    寻找一种从 PHP 中的 URL 获取路径的方法 我要拿 http example com hurrdurr 并做到 hurrdurr 我只想要后面的文字 com 我可以用修剪来做到这一点吗 Use parse url来提取你想要的信息 例
  • 为什么“fputc”使用 INT 作为参数而不是 CHAR?

    标准 C 库 int fputc int c FILE stream 并且这样的行为多次发生 例如 int putc int c FILE stream int putchar int c 为什么不直接使用 CHAR 呢 如果必须使用 IN
  • 通过 Gmail API 发送多部分/签名电子邮件 (RFC 3156)

    尝试构建符合 RFC3156 0 的消息 并通过 Gmail API 发送它 我正在使用 python 客户端实现 我得到的是 在我的 Gmail 邮箱中 邮件已正确发送 我看到的正是我之前构建的邮件 我的接收者得到的是 一条 多部分 混合