[英]Get every attachment of an email address in Javascript
我想從電子郵件中獲取所有附件。 問題是,對於附件,我必須執行列表請求以從頁面中獲取電子郵件,然后對於每個電子郵件,另一個請求以獲取完整信息,然后對每個附件進行另一個請求。
這就是我現在要做的,因為有太多請求,我遇到了一些並發請求錯誤(我使用setTimout進行測試)
async function listMessagesWithAttachments(
auth,
pageToken = "08116115363713650026"
) {
const gmail = google.gmail({ version: "v1", auth });
console.log(123);
await gmail.users.messages.list(
{
userId: "me",
maxResults: 50,
pageToken,
},
async (err, { data }) => {
const { nextPageToken } = data;
console.log("test", nextPageToken);
if (err)
return console.log(
"Error in listMessageswithAttachments, messages list: " + err
);
let { messages } = data;
let fullMessages = [];
messages.forEach(async (message, id) => {
setTimeout(() => {
gmail.users.messages.get(
{
userId: "me",
id: message.id,
format: "full",
},
(err, { data } = { data: "" }) => {
if (err) console.log("Error ", err);
fullMessages = [...fullMessages, data];
if (fullMessages.length === messages.length) {
let attachmentIds = [];
let attachments = [];
fullMessages.forEach(
(message = { payload: { parts: [] } }, messageIndex) => {
if (!message.payload) {
message.payload = { parts: [] };
}
let parts =
(message && message.payload && message.payload.parts) ||
[];
parts &&
parts.forEach((part, partId) => {
if (
part.body.size &&
part.body.size > 0 &&
part.body.attachmentId
) {
let object = {
index: `${partId}`,
messageId: message.id,
attachmentId: part.body.attachmentId,
};
attachmentIds = [...attachmentIds, object];
}
});
if (fullMessages.length - 1 === messageIndex) {
attachmentIds.forEach(attachment => {
gmail.users.messages.attachments.get(
{
userId: "me",
messageId: attachment.messageId,
id: attachment.attachmentId,
},
(err, { data }) => {
if (err) {
console.log("Error getting attachement: " + err);
return 0;
}
attachments = [...attachments, data];
if (attachments.length === attachmentIds.length) {
if (nextPageToken) {
console.log(nextPageToken);
listMessagesWithAttachments(
auth,
nextPageToken
);
}
}
console.log(attachments);
}
);
});
}
}
);
}
}
);
}, id * 20);
});
listMessagesWithAttachments(auth, nextPageToken);
}
);
}
有一個更好的方法嗎? 例如,一種獲取list
請求中完整消息的方法,然后我可以僅對附件提出請求。 但是主要的問題是找到一種減少請求並發的方法。
謝謝。
相反,您可以創建單獨的函數,這些函數返回您的請求響應,並將其作為參數傳遞給下一個函數。
例如
var list=gmail.users.messages.list(...)
要么:
gmail.users.messages.get()
{
...
if (part.body.size && part.body.size > 0 &&part.body.attachmentId){
...
IdArray.push(messageId)
...)
return array;
...
}
getAttachmentId(IdArray){
...
}
這將不必使代碼更短或更有效,但是它將減少並發請求超時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.