调用 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 替代消息,