调用 gmail api 以发送带有附件(多部分)的电子邮件时,请求的正文如何?

Posted

技术标签:

【中文标题】调用 gmail api 以发送带有附件(多部分)的电子邮件时,请求的正文如何?【英文标题】:How does the body of the request look like when making a call to gmail api for sending an email with attachment (multipart)? 【发布时间】:2019-02-22 13:49:31 【问题描述】:

谷歌文档给出了一个例子如下:

POST /upload/gmail/v1/users/userId/messages/send?uploadType=multipart HTTP/1.1 主机:www.googleapis.com 授权:承载 your_auth_token 内容类型:多部分/相关;边界=foo_bar_baz 内容长度:number_of_bytes_in_entire_request_body

--foo_bar_baz 内容类型:应用程序/json; charset=UTF-8

“id”:字符串, “threadId”:字符串, “标签标识”:[ 细绳 ], “sn-p”:字符串, “historyId”:无符号长, “有效载荷”: “partId”:字符串, “mimeType”:字符串, “文件名”:字符串, “标题”:[ “名称”:字符串, “值”:字符串 ], “正文”:users.messages.attachments 资源, “部分”: [ (消息部分) ] , “sizeEstimate”:整数, “原始”:字节

--foo_bar_baz 内容类型:message/rfc822

电子邮件信息数据 --foo_bar_baz-- 如果请求成功,服务器会返回 HTTP 200 OK 状态码以及任何元数据:

HTTP/1.1 200 内容类型:application/json

“id”:字符串, “threadId”:字符串, “标签标识”:[ 细绳 ], “sn-p”:字符串, “historyId”:无符号长, “有效载荷”: “partId”:字符串, “mimeType”:字符串, “文件名”:字符串, “标题”:[ “名称”:字符串, “值”:字符串 ], “正文”:users.messages.attachments 资源, “部分”: [ (消息部分) ] , “sizeEstimate”:整数, “原始”:字节

有人可以通过查看上面的示例来制作示例请求正文吗? 我需要发送一封带附件的电子邮件。

【问题讨论】:

【参考方案1】:

基于SO related post,正文请求可以是这样的:

var mail = [
  'Content-Type: multipart/mixed; boundary="foo_bar_baz"\r\n',
  'MIME-Version: 1.0\r\n',
  'From: sender@gmail.com\r\n',
  'To: receiver@gmail.com\r\n',
  'Subject: Subject Text\r\n\r\n',

  '--foo_bar_baz\r\n',
  'Content-Type: text/plain; charset="UTF-8"\r\n',
  'MIME-Version: 1.0\r\n',
  'Content-Transfer-Encoding: 7bit\r\n\r\n',

  'The actual message text goes here\r\n\r\n',

  '--foo_bar_baz\r\n',
  'Content-Type: image/png\r\n',
  'MIME-Version: 1.0\r\n',
  'Content-Transfer-Encoding: base64\r\n',
  'Content-Disposition: attachment; filename="example.png"\r\n\r\n',

   pngData, '\r\n\r\n',

   '--foo_bar_baz--'
].join('');

    var response = UrlFetchApp.fetch(
        "https://www.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=media", 
            method: "POST",
            headers: 
                "Authorization": "Bearer " + ScriptApp.getOAuthToken(),
                "Content-Type": "message/rfc822",
            ,
            muteHttpExceptions: true,
            payload: mail
);

这里还有一个example code,来自 Amit Agarwal 在 Google Appscript 中编写的数字灵感。 此示例展示了如何使用 Gmail API 轻松发送带有文件附件的电子邮件。

【讨论】:

我在向 /gmail/v1/users/userId/messages/send 发送请求时尝试了这种格式,它对我来说效果很好。但它的一种解决方法是发送带有附件的电子邮件。谷歌文档说必须使用 /upload/gmail/v1/users/userId/messages/send 处理带有附件的邮件。但是要知道我可以发送带有单个文件附件的邮件。

以上是关于调用 gmail api 以发送带有附件(多部分)的电子邮件时,请求的正文如何?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gmail API 发送的邮件中缺少附件,但仅适用于收件人

使用 perl 发送带有文件附件的多部分文本/html 替代消息,

用于发送带有附件的电子邮件的 GMAIL API

在 Javascript 中使用 GMAIL API 发送带有附件文件(超过 10 MB)的电子邮件

使用 Gmail API 发送大附件

GMAIL API 在 C# 中发送带附件的电子邮件