使用媒体上传方法在 appscript 中发送带附件的电子邮件
send email with attachment in appscript using media upload method
我使用 "media upload" 方法创建了消息草稿
使用下面的代码
var draftUploadUrl = "https://www.googleapis.com/upload/gmail/v1/users/me/drafts?uploadType=media";
var response = UrlFetchApp.fetch(draftUploadUrl, {
method: "POST",
headers: {
//authorizing request through service account
"Authorization": "Bearer " + service.getAccessToken(),
"Content-Type": "message/rfc822",
},
muteHttpExceptions: true,
//payload_data is mime content with base64 encode of email body an
//attachment
payload: payload_data
});
draftID = /: "(.*)"/.exec(response.getContentText())[1];
console.log("draftID: " + draftID);
我得到了邮件的草稿 ID,如何在参数中设置 草稿 ID 以发送带附件的电子邮件?
代码片段
var resp1 = UrlFetchApp.fetch("https://www.googleapis.com/upload/gmail/v1/users/me/drafts/send?uploadType=media", {
method: "POST",
headers: {
"Authorization": "Bearer " + service.getAccessToken(),
"Content-Type": "message/rfc822"
},
muteHttpExceptions: true,
payload: JSON.stringify({
"id": draftID
})
});
它正在抛出错误 "Invalid draft"。你能指导如何为上面的 url 调用传递 ID 参数或者上面的代码出了什么问题吗?
提前致谢。
- 您已经能够正确创建电子邮件草稿。
- 您想使用 Google Apps 脚本通过直接请求 Gmail API 端点来发送创建的草稿邮件。
如果我的理解是正确的,这个修改怎么样?
修改点:
- 使用
https://www.googleapis.com/gmail/v1/users/me/drafts/send
作为端点。
- 将
application/json
用作Content-Type
。
修改后的脚本:
var resp1 = UrlFetchApp.fetch("https://www.googleapis.com/gmail/v1/users/me/drafts/send", {
method: "POST",
headers: {
"Authorization": "Bearer " + service.getAccessToken(),
"Content-Type": "application/json"
},
muteHttpExceptions: true,
payload: JSON.stringify({
"id": draftID
})
});
注:
- 此修改假定您已经能够使用访问令牌使用 Gmail API。
- 如果草稿邮件的格式不完整,在发送草稿邮件时,可能会出现错误。
参考:
如果我误解了你的问题,我深表歉意。
编辑:
当您想创建包含附件的电子邮件草稿时,这个示例脚本怎么样?这是来自 .
示例脚本:
此示例脚本使用 Gmail API 创建电子邮件草稿。
function createDraft() {
var fileId = "### file id ###"; // Please set this.
var file = DriveApp.getFileById(fileId);
var forScope = GmailApp.getInboxUnreadCount();
var htmlBody = 'sample HTML body'; // Please set this.
var raw =
'Subject: sample subject\r\n' + // Please set this.
'To: aa@bb.cc\r\n' + // Please set this.
'Content-Type: multipart/mixed; boundary=##########\r\n\r\n' +
'--##########\r\n' +
'Content-Type: text/html; charset=UTF-8\r\n\r\n' + htmlBody + '\r\n' +
'--##########\r\n' +
'Content-Type: ' + file.getMimeType() + '; charset=UTF-8; name="' + file.getName() + '"\r\n' +
'Content-Disposition: attachment; filename="' + file.getName() + '"\r\n' +
'Content-Transfer-Encoding: base64\r\n\r\n' + Utilities.base64Encode(file.getBlob().getBytes()) +
'\r\n--##########\r\n';
var draftBody = Utilities.base64EncodeWebSafe(raw, Utilities.Charset.UTF_8);
var params = {
method:"post",
contentType: "application/json",
headers: {"Authorization": "Bearer " + service.getAccessToken()},
muteHttpExceptions: true,
payload: JSON.stringify({"message": {"raw": draftBody}})
};
var resp = UrlFetchApp.fetch("https://www.googleapis.com/gmail/v1/users/me/drafts", params);
Logger.log(resp)
}
我使用 "media upload" 方法创建了消息草稿 使用下面的代码
var draftUploadUrl = "https://www.googleapis.com/upload/gmail/v1/users/me/drafts?uploadType=media";
var response = UrlFetchApp.fetch(draftUploadUrl, {
method: "POST",
headers: {
//authorizing request through service account
"Authorization": "Bearer " + service.getAccessToken(),
"Content-Type": "message/rfc822",
},
muteHttpExceptions: true,
//payload_data is mime content with base64 encode of email body an
//attachment
payload: payload_data
});
draftID = /: "(.*)"/.exec(response.getContentText())[1];
console.log("draftID: " + draftID);
我得到了邮件的草稿 ID,如何在参数中设置 草稿 ID 以发送带附件的电子邮件?
代码片段
var resp1 = UrlFetchApp.fetch("https://www.googleapis.com/upload/gmail/v1/users/me/drafts/send?uploadType=media", {
method: "POST",
headers: {
"Authorization": "Bearer " + service.getAccessToken(),
"Content-Type": "message/rfc822"
},
muteHttpExceptions: true,
payload: JSON.stringify({
"id": draftID
})
});
它正在抛出错误 "Invalid draft"。你能指导如何为上面的 url 调用传递 ID 参数或者上面的代码出了什么问题吗?
提前致谢。
- 您已经能够正确创建电子邮件草稿。
- 您想使用 Google Apps 脚本通过直接请求 Gmail API 端点来发送创建的草稿邮件。
如果我的理解是正确的,这个修改怎么样?
修改点:
- 使用
https://www.googleapis.com/gmail/v1/users/me/drafts/send
作为端点。 - 将
application/json
用作Content-Type
。
修改后的脚本:
var resp1 = UrlFetchApp.fetch("https://www.googleapis.com/gmail/v1/users/me/drafts/send", {
method: "POST",
headers: {
"Authorization": "Bearer " + service.getAccessToken(),
"Content-Type": "application/json"
},
muteHttpExceptions: true,
payload: JSON.stringify({
"id": draftID
})
});
注:
- 此修改假定您已经能够使用访问令牌使用 Gmail API。
- 如果草稿邮件的格式不完整,在发送草稿邮件时,可能会出现错误。
参考:
如果我误解了你的问题,我深表歉意。
编辑:
当您想创建包含附件的电子邮件草稿时,这个示例脚本怎么样?这是来自
示例脚本:
此示例脚本使用 Gmail API 创建电子邮件草稿。
function createDraft() {
var fileId = "### file id ###"; // Please set this.
var file = DriveApp.getFileById(fileId);
var forScope = GmailApp.getInboxUnreadCount();
var htmlBody = 'sample HTML body'; // Please set this.
var raw =
'Subject: sample subject\r\n' + // Please set this.
'To: aa@bb.cc\r\n' + // Please set this.
'Content-Type: multipart/mixed; boundary=##########\r\n\r\n' +
'--##########\r\n' +
'Content-Type: text/html; charset=UTF-8\r\n\r\n' + htmlBody + '\r\n' +
'--##########\r\n' +
'Content-Type: ' + file.getMimeType() + '; charset=UTF-8; name="' + file.getName() + '"\r\n' +
'Content-Disposition: attachment; filename="' + file.getName() + '"\r\n' +
'Content-Transfer-Encoding: base64\r\n\r\n' + Utilities.base64Encode(file.getBlob().getBytes()) +
'\r\n--##########\r\n';
var draftBody = Utilities.base64EncodeWebSafe(raw, Utilities.Charset.UTF_8);
var params = {
method:"post",
contentType: "application/json",
headers: {"Authorization": "Bearer " + service.getAccessToken()},
muteHttpExceptions: true,
payload: JSON.stringify({"message": {"raw": draftBody}})
};
var resp = UrlFetchApp.fetch("https://www.googleapis.com/gmail/v1/users/me/drafts", params);
Logger.log(resp)
}