我也想获取邮件 Gmail API 附带的附件
Posted
技术标签:
【中文标题】我也想获取邮件 Gmail API 附带的附件【英文标题】:I want to get attachments as well that comes with the message Gmail API 【发布时间】:2020-10-12 20:06:06 【问题描述】:好的,因此使用此代码,我可以获取来自电子邮件的实际邮件内容,但我想要的是我也想获取消息和附件。可以做些什么来列出附件并稍后提供下载附件 gmail api 的选项。
var ifrm = document.getElementById("iframe").contentWindow.document;
ifrm.body.innerhtml = getMessageBody(message.payload);
;
let getMessageBody = (message) =>
var encodedBody = "";
if (typeof message.parts === "undefined")
encodedBody = message.body.data;
else
encodedBody = getHTMLPart(message.parts);
return Base64.decode(encodedBody);
;
let getHTMLPart = (arr) =>
for (var x = 0; x <= arr.length; x++)
if (typeof arr[x].parts === "undefined")
if (arr[x].mimeType === "text/html")
return arr[x].body.data;
else
return getHTMLPart(arr[x].parts);
return "";
;
点击消息时的 Gmail API。
getOneMessage = (messageId) =>
return window.gapi.client.gmail.users.messages
.get(
userId: "me",
id: messageId,
)
.then(
(response) =>
this.setState(
message: response.result,
);
,
(err) =>
console.error("getMessage error", err);
);
;
handleMessageClick = (e) =>
const messageId = e.currentTarget.getAttribute("id");
this.getOneMessage(messageId);
【问题讨论】:
强烈建议你不要尝试自己做,使用为你包装了api的库 请在脚本中包含您如何使用 gmail-api 来获取邮件正文。 我已经用 Gmail api 更新了这个问题。 【参考方案1】:解决方案
您正在使用Users.messages: get
端点。这可以检索邮件正文,但要检索附件,您必须使用Users.messages.attachments: get
。 Here你可以找到文档的链接。
建议的代码编辑:
getAttachments = (message, callback) =>
var parts = message.payload.parts;
for (var i = 0; i < parts.length; i++)
var part = parts[i];
if (part.filename && part.filename.length > 0)
var attachId = part.body.attachmentId;
var request = gapi.client.gmail.users.messages.attachments.get(
'id': attachId,
'messageId': message.id,
'userId': userId
);
request.execute(function(attachment)
callback(part.filename, part.mimeType, attachment);
);
getOneMessage = (messageId) =>
return window.gapi.client.gmail.users.messages
.get(
userId: "me",
id: messageId,
)
.then(
(response) =>
this.setState(
message: response.result,
);
// Get the attachment and do something with it
getAttachments(response.result, callback);
,
(err) =>
console.error("getMessage error", err);
);
;
handleMessageClick = (e) =>
const messageId = e.currentTarget.getAttribute("id");
this.getOneMessage(messageId);
参考
Users.messages.attachments
【讨论】:
有了这个我什至无法加载消息。 github.com/KhalidLam/CubeMail 这是存储库,请导航到 src/app.js 以获取建议的更改。 这怎么行不通?加载消息的代码与您发布的代码相同。以上是关于我也想获取邮件 Gmail API 附带的附件的主要内容,如果未能解决你的问题,请参考以下文章