【问题标题】:Create email with Gmail API使用 Gmail API 创建电子邮件
【发布时间】:2021-10-14 16:36:57
【问题描述】:

我在这里 https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/create 测试 Gmail API,但是否可以创建包含发件人、主题、正文的完整电子邮件并加载 gmail 模板并通过 curl 命令发送?

这是我尝试过的,但我收到一条空消息:

【问题讨论】:

  • 希望提供帮助,但请添加您迄今为止尝试过的内容,以提供设置 GCP 项目、配置凭据、访问代码、访问令牌以及最后授权的 api 请求的完整教程curl 对于一个问题来说太多了:(
  • 我不知道您到底需要什么,因为我的问题似乎很简单:是否可以使用 Gmail api 创建草稿电子邮件?但不是空电子邮件。想法是填写所有字段(主题,正文等......)
  • 有可能
  • 你有使用 curl 命令的演示或文档吗?
  • 您是否已经通过 curl 获得了 oauth 令牌?或者你有其他方法来获取它们,然后在 curl 请求中使用它们?

标签: shell curl gmail-api


【解决方案1】:

如何使用 Gmail API 根据草稿发送电子邮件

这是您可以采取的一种方法:

使用users.draft list

{
  "drafts": [
    {
      "id": "r-1561xxx",
      "message": {
        "id": "179891xxx",
        "threadId": "179891xxx"
      }
    }
  ],
  "resultSizeEstimate": 1
}

然后users.draft get 与上一个请求中的id 之一:

您可以通过使用参数 format=raw 调用 drafts.get 来检索草稿中包含的当前 MIME 消息。

(数据已清理)

{
  "id": "r-1561xxx",
  "message": {
    "id": "179891xxx",
    "threadId": "179891xxx",
    "labelIds": [
      "DRAFT"
    ],
    "snippet": "Name: Reason: Company:",
    "sizeEstimate": 635,
    "raw": "TUlNRS1WZXJzaW9uOiAxLjAKRGF0ZTogRnJpLCAxMyBBdWcgMjAyMSAxNjoxMjowOSArMDIwMApNZXNzYWdlLUlEOiA8Q0FGZHVrYm5yZHhReHh4eEBtYWlsLmdtYWlsLmNvbT4KU3ViamVjdDogZHJhZnQxCkZyb206IFNlbmRlciA8c2FtcGxlQGdtYWlsLmNvbT4KVG86IFJlY2VpdmVyIDxzYW1wbGVAZ21haWwuY29tPgpDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9IjAwMDAwMDAwMDAwMGViNGI1ODA1Yzk3MTZmZDIiCgotLTAwMDAwMDAwMDAwMGViNGI1ODA1Yzk3MTZmZDIKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKCk5hbWU6CgpSZWFzb246CgpDb21wYW55OgoKLS0wMDAwMDAwMDAwMDBlYjRiNTgwNWM5NzE2ZmQyCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJVVEYtOCIKCjxkaXYgZGlyPSJsdHIiPk5hbWU6PGRpdj48YnI+PC9kaXY+PGRpdj5SZWFzb246PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5Db21wYW55OjwvZGl2PjwvZGl2PgoKLS0wMDAwMDAwMDAwMDBlYjRiNTgwNWM5NzE2ZmQyLS0=",
    "historyId": "67xxx",
    "internalDate": "1628xxx"
  }
}

raw 属性是消息所在的位置。它以base64编码。解码出来是这样的:

MIME-Version: 1.0
Date: Fri, 13 Aug 2021 16:12:09 +0200
Message-ID: <CAFdukbnrdxQxxxx@mail.gmail.com>
Subject: draft1
From: Sender <sample@gmail.com>
To: Receiver <sample@gmail.com>
Content-Type: multipart/alternative; boundary="000000000000eb4b5805c9716fd2"

--000000000000eb4b5805c9716fd2
Content-Type: text/plain; charset="UTF-8"

Name:

Reason:

Company:

--000000000000eb4b5805c9716fd2
Content-Type: text/html; charset="UTF-8"

<div dir="ltr">Name:<div><br></div><div>Reason:</div><div><br></div><div>Company:</div></div>

--000000000000eb4b5805c9716fd2--

发送中

guide 中写道:

以某种方便的方式创建电子邮件内容并将其编码为 base64url 字符串。 创建一个新的消息资源并将其原始属性设置为您刚刚创建的 base64url 字符串。

文字应符合rfc2822

所以制作这样的纯文本电子邮件(您可以省略某些字段,例如日期和消息 ID):

MIME-Version: 1.0
Subject: draft1
From: Sender <sample@gmail.com>
To: Receiver <sample@gmail.com>
Content-Type: multipart/alternative; boundary="000000000000eb4b5805c9716fd2"

--000000000000eb4b5805c9716fd2
Content-Type: text/plain; charset="UTF-8"

Name: TooNetCreation

Reason: TooNetCreation

Company: TooNetCreation

--000000000000eb4b5805c9716fd2
Content-Type: text/html; charset="UTF-8"

<div dir="ltr">Name: TooNetCreation<div><br></div><div>Reason: TooNetCreation</div><div><br></div><div>Company: TooNetCreation</div></div>

--000000000000eb4b5805c9716fd2--

编码为:

TUlNRS1WZXJzaW9uOiAxLjAKU3ViamVjdDogZHJhZnQxCkZyb206IFNlbmRlciA8c2FtcGxlQGdtYWlsLmNvbT4KVG86IFJlY2VpdmVyIDxzYW1wbGVAZ21haWwuY29tPgpDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9IjAwMDAwMDAwMDAwMGViNGI1ODA1Yzk3MTZmZDIiCgotLTAwMDAwMDAwMDAwMGViNGI1ODA1Yzk3MTZmZDIKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKCk5hbWU6IFRvb05ldENyZWF0aW9uCgpSZWFzb246IFRvb05ldENyZWF0aW9uCgpDb21wYW55OiBUb29OZXRDcmVhdGlvbgoKLS0wMDAwMDAwMDAwMDBlYjRiNTgwNWM5NzE2ZmQyCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJVVEYtOCIKCjxkaXYgZGlyPSJsdHIiPk5hbWU6IFRvb05ldENyZWF0aW9uPGRpdj48YnI+PC9kaXY+PGRpdj5SZWFzb246IFRvb05ldENyZWF0aW9uPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5Db21wYW55OiBUb29OZXRDcmVhdGlvbjwvZGl2PjwvZGl2PgoKLS0wMDAwMDAwMDAwMDBlYjRiNTgwNWM5NzE2ZmQyLS0=

您可以发送:

curl --request POST \
  'https://gmail.googleapis.com/gmail/v1/users/me/messages/send?key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"raw":"TUlNRS1WZXJzaW9uOiAxLjAKU3ViamVjdDogZHJhZnQxCkZyb206IFNlbmRlciA8c2FtcGxlQGdtYWlsLmNvbT4KVG86IFJlY2VpdmVyIDxzYW1wbGVAZ21haWwuY29tPgpDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9IjAwMDAwMDAwMDAwMGViNGI1ODA1Yzk3MTZmZDIiCgotLTAwMDAwMDAwMDAwMGViNGI1ODA1Yzk3MTZmZDIKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKCk5hbWU6IFRvb05ldENyZWF0aW9uCgpSZWFzb246IFRvb05ldENyZWF0aW9uCgpDb21wYW55OiBUb29OZXRDcmVhdGlvbgoKLS0wMDAwMDAwMDAwMDBlYjRiNTgwNWM5NzE2ZmQyCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJVVEYtOCIKCjxkaXYgZGlyPSJsdHIiPk5hbWU6IFRvb05ldENyZWF0aW9uPGRpdj48YnI+PC9kaXY+PGRpdj5SZWFzb246IFRvb05ldENyZWF0aW9uPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5Db21wYW55OiBUb29OZXRDcmVhdGlvbjwvZGl2PjwvZGl2PgoKLS0wMDAwMDAwMDAwMDBlYjRiNTgwNWM5NzE2ZmQyLS0="}' \
  --compressed

之后它应该返回一个消息实例,您将发送一封电子邮件!

参考文献

【讨论】:

  • 感谢您的反馈,非常适合发送电子邮件。但如果我想自定义以下字段:FROM、TO、SUBJECT?
  • 您只需将编码前的文本更改为 b64
  • 在纯文本电子邮件中将 To: whoever &lt;sample@gmail.com&gt; 更改为您喜欢的任何内容
  • 好的,谢谢,我现在明白了。如果我需要一封空白电子邮件(正文中没有文本),我想知道是否可以在 curl 命令中直接添加字段 FROM、TO 和 SUBJECT 而无需原始值?
  • 不使用 curl,python 客户端库对于这种工作流会更好。但最终它总是将其作为编码字符串发送。请参阅我链接的指南。
猜你喜欢
  • 2021-09-24
  • 2021-09-10
  • 2018-01-26
  • 1970-01-01
  • 2015-01-02
  • 2017-04-14
  • 2023-03-14
  • 2016-04-20
  • 2021-09-11
相关资源
最近更新 更多