【发布时间】:2021-03-08 05:10:54
【问题描述】:
我正在使用以下代码下载 Gmail 附件。在 Windows 中这工作正常,但是当我尝试在我的 Linux 机器上运行相同的代码时,它给了我一个错误,如下所示。 任何人都可以帮助我如何为办公室前景执行相同的操作。因为我收到了身份验证错误
错误:
Downloading attachments for pmgtesting1@gmail.com since 2020-11-25 to files/...
[connection] Connected to host
<= '* OK Gimap ready for requests from 51.103.27.188 l25mb237269790wmj'
=> 'A0 CAPABILITY'
<= '* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER AUTH=XOAUTH'
<= 'A0 OK Thats all she wrote! l25mb237269790wmj'
=> 'A1 LOGIN "pmgtesting1@gmail.com" "pswd****"'
<= '* NO [WEBALERT https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv-cVj07x6UiZjwizvTzmqYRNNyofoJ8yiGr960BU9t1OKkU83L43n5ocMP2SlhJ3MqWkb04Wj4ye1XxDbTSALJhCRkQ373HLB_tcH_yHBmmDycIiLGnX3NNETY0QakllRJFVjR] Web login required.'
<= 'A1 NO [ALERT] Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure)'
[connection] Ended
[connection] Closed
disconnected from pmgtesting1@gmail.com
Error ----> {
latestTime: undefined,
lastSyncId: 0,
uidvalidity: undefined,
handledIds: [],
errors: [
Error: Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure)
at Connection._resTagged (/home/textify/Mail-attachement/node_modules/imap/lib/Connection.js:1488:11)
at Parser.<anonymous> (/home/textify/Mail-attachement/node_modules/imap/lib/Connection.js:193:10)
at Parser.emit (events.js:314:20)
at Parser._resTagged (/home/textify/Mail-attachement/node_modules/imap/lib/Parser.js:175:10)
at Parser._parse (/home/textify/Mail-attachement/node_modules/imap/lib/Parser.js:139:16)
at Parser._tryread (/home/textify/Mail-attachement/node_modules/imap/lib/Parser.js:82:15)
at TLSSocket.Parser._cbReadable (/home/textify/Mail-attachement/node_modules/imap/lib/Parser.js:53:12)
at TLSSocket.emit (events.js:314:20)
at emitReadable_ (_stream_readable.js:558:12)
at processTicksAndRejections (internal/process/task_queues.js:83:21) {
type: 'no',
textCode: 'ALERT',
source: 'authentication'
}
]
}
注意:我已启用不太安全的应用连接
const downloadEmailAttachments = require('download-email-attachments');
const moment = require('moment');
const todaysDate = moment().format('YYYY-MM-DD');
var reTry = 1;
var paraObj = {
invalidChars: /\W/g,
account: `"****@gmail.com":Paswd******@imap.gmail.com:993`,
// all options and params
//besides account are optional
directory: './files',
filenameTemplate: '{filename}',
// filenameTemplate: '{day}-{filename}',
filenameFilter: /.txt?$/,
timeout: 10000,
log: { warn: console.warn, debug: console.info, error: console.error, info:
console.info },
since: todaysDate,
lastSyncIds: ['234', '234', '5345'], // ids already dowloaded and ignored, helpful
//because since is only supporting dates without time
attachmentHandler: function (attachmentData, callback, errorCB) {
console.log(attachmentData);
callback()
}
}
var onEnd = (result) => {
if (result.errors || result.error) {
console.log("Error ----> ", result);
if(reTry < 4 ) {
console.log('retrying....', reTry++)
return downloadEmailAttachments(paraObj, onEnd);
} else console.log('Failed to download attachment')
} else console.log("done ----> ");
}
downloadEmailAttachments(paraObj, onEnd);
const downloadEmailAttachments = require('download-email-attachments');
const moment = require('moment');
const todaysDate = moment().format('YYYY-MM-DD');
var reTry = 1;
var paraObj = {
invalidChars: /\W/g,
account: `"****@gmail.com":Paswd******@imap.gmail.com:993`,
// all options and params
//besides account are optional
directory: './files',
filenameTemplate: '{filename}',
// filenameTemplate: '{day}-{filename}',
filenameFilter: /.txt?$/,
timeout: 10000,
log: { warn: console.warn, debug: console.info, error: console.error, info:
console.info },
since: todaysDate,
lastSyncIds: ['234', '234', '5345'], // ids already dowloaded and ignored, helpful
//because since is only supporting dates without time
attachmentHandler: function (attachmentData, callback, errorCB) {
console.log(attachmentData);
callback()
}
}
var onEnd = (result) => {
if (result.errors || result.error) {
console.log("Error ----> ", result);
if(reTry < 4 ) {
console.log('retrying....', reTry++)
return downloadEmailAttachments(paraObj, onEnd);
} else console.log('Failed to download attachment')
} else console.log("done ----> ");
}
downloadEmailAttachments(paraObj, onEnd);
【问题讨论】:
-
您的问题到底是什么,您想要实现什么目标? @MeetMehta
-
我的主要用例是我想在 Linux 操作系统中下载 Outlook 附件(公司 ID)。首先,我尝试从 gmail 下载,但会为 Outlook 复制相同的内容。但在 Linux 操作系统中没有解决方案
-
@ale13 我已经更新了问题希望现在这会更容易理解
-
我得到了答案,只需在 Gmail 中启用 2 因素身份验证,然后注册您的应用并使用应用密码获取电子邮件。注意:对于 Outlook 部分,我没有生成应用程序密码的管理员权限,如果您有,那么这也适用于您将在找到其他解决方案后立即更新
标签: node.js linux outlook gmail gmail-imap